社区讨论
二分答案存在问题,题目真的没错吗?
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 条回复,欢迎继续交流。
正在加载回复...