A:
B:
题意:注意可以有些人不参加
思路:
很显然是个贪心,一开始从大到小,这样其实难保证最优,因为可以有人不参加。
所以从小到大贪,双指针跳了半天,还是直接计数更直接....
#include<iostream> #include<stdio.h> #include<queue> #include<algorithm> #include<math.h> #include<stack> #include<map> #include<limits.h> #include<vector> #include<string.h> #include<string> using namespace std; typedef long long LL; typedef pair<double,double> pii; const int N = 2e5+5; const int M = 1005; const int Mod = 1e9+7; #define pi acos(-1) #define INF 1e8 #define INM INT_MIN #define pb(a) push_back(a) #define mk(a,b) make_pair(a,b) #define dbg(x) cout << "now this num is " << x << endl; #define met0(axx) memset(axx,0,sizeof(axx)); #define metf(axx) memset(axx,-1,sizeof(axx)); #define sd(ax) scanf("%d",&ax) #define sld(ax) scanf("%lld",&ax) #define sldd(ax,bx) scanf("%lld %lld",&ax,&bx) #define sdd(ax,bx) scanf("%d %d",&ax,&bx) #define sddd(ax,bx,cx) scanf("%d %d %d",&ax,&bx,&cx) #define sfd(ax) scanf("%lf",&ax) #define sfdd(ax,bx) scanf("%lf %lf",&ax,&bx) #define pr(a) printf("%d\n",a) #define plr(a) printf("%lld\n",a) int a[N]; int main() { int t;sd(t); while(t--) { int n;sd(n); for(int i=1;i<=n;++i) sd(a[i]); sort(a+1,a+n+1); int ans = 0,cnt = 0; for(int i=1;i<=n;++i) { cnt++; if(a[i] == cnt) ans++,cnt = 0; } pr(ans); } // system("pause"); return 0; }