社区讨论

二分答案存在问题,题目真的没错吗?

P4447[AHOI2018初中组] 分组参与者 5已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@mi7dmzj3
此快照首次捕获于
2025/11/20 19:57
4 个月前
此快照最后确认于
2025/11/20 19:57
4 个月前
查看原帖
C
#include<bits/stdc++.h>
using namespace std;
#define res register int
int s[100010];
int minn,maxn;
int n,end;

int check(int x) {
	//cout<<"check: "<<x<<endl;
    int num=1;
    for(res i=1;i<n;++i){
    	if(s[i]+1==s[i+1]) ++num;
    	else if(num<x) return 0;
    	else num=1;
	}
	//if(num>=x) cout<<"right"<<endl;
	if(num>=x) return 1;
}

int main() {
//	freopen("text.in","r",stdin);
//	freopen("my.out","w",stdout);
    cin>>n;end=n;
    for(res i=1; i<=n; ++i) cin>>s[i];
    minn=1,maxn=2*n;
    sort(s+1,s+n+1);
    
//    cout<<endl;for(res i=1;i<=n;++i) cout<<s[i]<<" ";cout<<endl;

    while(maxn>=minn) {
//		cout<<minn<<"--"<<maxn<<endl;
        int mid=(minn+maxn)>>1;
        if(check(mid)) end=mid,minn=mid+1;
        else maxn=mid-1;
    }

    cout<<end;
    return 0;
}

回复

10 条回复,欢迎继续交流。

正在加载回复...