题解:P11205 「Cfz Round 9」Hope
保姆级题解。
题目大意
相信你不是外星人。
思路
最小值最大,一眼二分,三分钟假掉。
正解似乎只能是贪心,我们通过阅读题目可得,我们要操作成一个以
-
a_i \ge answer -
a_i < answer
注:下文
第一种情况:我们就要将
第二种情况:由于
最后,如果
Code
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int T,n,a[N];
signed main()
{
cin>>T;
while(T--)
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
int ans=1;
int num,sum;
num=sum=0;
for(int i=1;i<=n;i++)
{
if(a[i]>=ans) sum+=a[i]-ans,ans++;
else num+=a[i]-1;
}
if(sum<=ans and sum+num>=ans) ans++;
cout<<ans<<'\n';
}
return 0;
}
后话
这题的贪心策略有些复杂,但只要想到了就秒切。
祝各位 OIer 们 CSP/NOIP RP++。