codeforces|Codeforces Round #643 (Div. 2) B. Young Explorers

B. Young Explorers 题目链接-B. Young Explorers
codeforces|Codeforces Round #643 (Div. 2) B. Young Explorers
文章图片

codeforces|Codeforces Round #643 (Div. 2) B. Young Explorers
文章图片

题目大意
每人都有一个组队人数,值为 a i a_i ai?的人只能加入人数大于等于 a i a_i ai?个人的团,求最多能组成多少个团.
解题思路
贪 心 贪心 贪心

  • 先将数列从小到大排序,然后for循环遍历
  • cnt计数,所此时cnt==a[i]说明能凑成一队了,直接ans++,并将cnt清零一边重新计数
  • 具体操作见代码
【codeforces|Codeforces Round #643 (Div. 2) B. Young Explorers】附上代码
#pragma GCC optimize("-Ofast","-funroll-all-loops") #include #define int long long #define lowbit(x) (x &(-x)) #define endl '\n' using namespace std; const int INF=0x3f3f3f3f; const int dir[4][2]={-1,0,1,0,0,-1,0,1}; const double PI=acos(-1.0); const double e=exp(1.0); const double eps=1e-10; const int M=1e9+7; const int N=2e5+10; typedef long long ll; typedef pair PII; typedef unsigned long long ull; inline void read(int &x){ char t=getchar(); while(!isdigit(t)) t=getchar(); for(x=t^48,t=getchar(); isdigit(t); t=getchar()) x=x*10+(t^48); } int a[N]; signed main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t; cin>>t; while(t--){ int n,ans=0; cin>>n; for(int i=0; i>a[i]; sort(a,a+n); for(int i=0,cnt=0; i=a[i]){ ans++; cnt=0; } } cout<

    推荐阅读