1358B - Codeforces Round #645 (Div. 2) - Maria Breaks the Self-isolation
Posted expedition
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1358B - Codeforces Round #645 (Div. 2) - Maria Breaks the Self-isolation相关的知识,希望对你有一定的参考价值。
地址:https://codeforces.com/problemset/problem/1358/B
题意:
老太太 FREEDOM 打算在新冠期间组织聚会(freedom!!!冥主!!!自由!!!)
对于第 i 人,如果在她进院子的时候,院子里的人数(不包括自己) >= ai,她就来(嫌死得不够快)
求的是最多能有多少人参加聚会
思路:
显然,为了让更多的人能加入聚会,让要求低(院子里的人数 >= ai)先到,充到场人头数字,从而可以邀请更多要求高的,所以,将{a1,a2,a3,...,an}升序排序一下,利用数组的下标计“院子里到的人数”
如:
原: 1 5 4 5 1 9
排序:1 1 4 5 5 9 a[i]
下标:1 2 3 4 5 6 i ===> 院子里的人数
条件:a[i] <= i
所以:1 1 4 5 5 9
按照上方的逻辑,遇到“4”的时候,看似是无解的,但只要其后面的人可以来,就可以让后面的人与"4"同时到场,从而在“4”到场的时候,院子里的人数必然满足"4"要求,也必然满足后面的人的要求【互相充人头】
由上,5位可以到,加上举办方 FREEDOM,共计6人可以到场
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5 + 10; int a[N]; int main(){ // freopen("x.txt","r",stdin); int t; cin >>t; while(t--){ int n; cin >>n; for(int i = 1; i <= n;i++){ scanf("%d",&a[i]); } sort(a+ 1,a+n+ 1); int ans = 0; for(int i = 1;i <= n;i++){ if(a[i] <= i){ ans = i; } } cout << ans + 1 <<endl; } return 0; }
以上是关于1358B - Codeforces Round #645 (Div. 2) - Maria Breaks the Self-isolation的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Educational Codeforces Round 67
Codeforces Round 1132Educational Round 61
codeforces Technocup 2017 - Elimination Round 2/Codeforces Round #380 (Div. 2, Rated, Based on Techn
Codeforces Round #705 (Div. 2)