问题标题: 酷町堂:6282 自行车比赛

0
0
已解决
荣光峰
荣光峰
资深光能
资深光能

我一看,5分钟写完,又一看WA90.....(又没超时,第三个点WA)

代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,a[300005],maxn,cnt;
bool cmp(int m,int n){
    return m<n;
}
void qsort(int a[],int l,int r){
    int i=l,j=r,mid=a[(l+r)/2];
    while(i<=j){
        while(cmp(a[i],mid)) i++;
        while(cmp(mid,a[j])) j--;
        if(i<=j){
            swap(a[i],a[j]);
            i++;
            j--;
        }
    }
    if(l<j) qsort(a,l,j);
    if(i<r) qsort(a,i,r);
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        maxn=max(maxn,a[i]); 
    } 
    qsort(a,1,n);
    for(int i=1;i<=n;i++){
        if(a[i]+n>=maxn+1&&a[i]+n>=a[2]+n-1)cnt++;
    } 
    cout<<cnt;
    return 0; 
}

@王文博


0
已采纳
王文博
王文博
缔造者之神
缔造者之神

核心:

    for(int i=1;i<=n;i++) c[i]=b[i]+n-i+1;
    for(int i=1;i<=n;i++) if(maxn<c[i]) maxn=c[i];
    for(int i=n;i>=1;i--)
    {
    	if(b[i]+n>=maxn) ans++;
        else break;
	}

b数组要从小到大排序(注:你确定不再恶搞???????二分排序都用上了)

王文博在2021-08-08 15:25:58追加了内容

0
张恩泽
张恩泽
高级天翼
高级天翼

那就是你写的有问题了,手写sort和直接调用是一样的,你可能下面的那个环节出错了,调试一下就可以了

0
被禁言 张皓轩
张皓轩
中级光能
中级光能

#include<iostream> using namespace std; int a[300001],maxn,cnt,n; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; if(a[i]>maxn){ maxn=a[i]; } } for(int i=1;i<=n;i++){ if(a[i]+n>maxn+1){ cnt++; } } if(cnt!=0){ cout<<cnt; }else{ cout<<1; } }

我的代码

第7个点错了,也TLE90

0
张恩泽
张恩泽
高级天翼
高级天翼

直接调用sort不香吗,为什么要手写一个sort

我要回答