码迷,mamicode.com
首页 > 其他好文 > 详细

1358B - Codeforces Round #645 (Div. 2) - Maria Breaks the Self-isolation

时间:2020-11-13 13:17:44      阅读:34      评论:0      收藏:0      [点我收藏+]

标签:老太太   ===   set   下标   int   --   force   bit   target   

地址: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

标签:老太太   ===   set   下标   int   --   force   bit   target   

原文地址:https://www.cnblogs.com/expedition/p/13946249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!