【PAT甲级】1117 Eddington Number (25分)

题意:

输入一个正整数N(<=100000),接着输入N个非负整数。输出最大的整数E使得有至少E个整数大于E。

AAAAAccepted code:

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int a[100007];
 5 int num[100007];
 6 map<int,int>mp;
 7 int main(){
 8     ios::sync_with_stdio(false);
 9     cin.tie(NULL);
10     cout.tie(NULL);
11     int n;
12     cin>>n;
13     int cnt=0;
14     for(int i=1;i<=n;++i)
15         cin>>a[i];
16     sort(a+1,a+1+n);
17     for(int i=1;i<=n;++i){
18         if(!mp[a[i]])
19             mp[a[i]]=++cnt;
20         ++num[mp[a[i]]];
21     }
22     for(int i=cnt-1;i;--i)
23         num[i]+=num[i+1];
24     int ans=0;
25     for(int i=n;i;--i){
26         int pos=upper_bound(a+1,a+1+n,i)-a;
27         if(pos<=n&&num[mp[a[pos]]]>=i){
28             ans=i;
29             break;
30         }
31     }
32     cout<<ans;
33     return 0;
34 }

猜你喜欢

转载自www.cnblogs.com/ldudxy/p/12343666.html