CF-1358B Maria Breaks the Self-isolation 【排序、貪心】

傳送門: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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章