傳送門:CF-1358B Maria Breaks the Self-isolation
測試樣例:
input
4
5
1 1 2 2 1
6
2 3 4 5 6 7
6
1 5 4 5 1 9
5
1 2 3 5 6
output
6
1
6
4
題目大意:
瑪利亞有n個朋友,每個朋友有個標記a[i]。初始只有瑪利亞一個人在院子裏,她想邀請朋友來她家。朋友接受邀請的條件是:瑪利亞邀請第 i 個朋友,院子裏已有的人和同時被邀請的其他人的數量和必須大於等於a[i](瑪利亞可以同時邀請多個人)。
問:瑪利亞能聚集的最多的人數(包括她自己)。
思路:
先將a[i]升序排序,然後假設最終瑪利亞能聚集除她之外的x人,一次性將x人同時邀請,此時一定滿足x>=a[x](x=x-自己+瑪利亞),問題答案就是滿足x>=a[x]的最大的x。關鍵在於可以同時邀請多人個,只需要考慮邀請人數x與排序後最大的a[x]的關係即可。
AC代碼:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
int a[MAXN];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);//按標記排序
int cnt=0;
for(int i=1;i<=n;i++)
if(i>=a[i])
cnt=i;
printf("%d\n",cnt+1);//同意邀請的人數 + 瑪利亞自己
}
return 0;
}