hdoj2796
题意:
1.在每一堆里顶部的coin的size必须大于这一堆其他的coin;
2.在每一堆里顶部的coin的size必须大于前面堆的顶部的coin;
3.在每一堆里顶部的coin的num必须大于前面堆的数量;
然后给你n(<=50)个coin,让你判断能够组成多少个堆;
思路:
就是排序一下,然后根据他给的信息模拟一下就好了,水题。。。打了快一个小时。。。
#include <bits/stdc++.h> using namespace std; typedef long long LL; typedef unsigned long long ULL; const double eps=1e-6; const double pi=acos(-1.0); const int mod=998244353; const int INF=0x3f3f3f3f; const int N=55; int a[N]; bool vis[N]; int main() { int n,i,xx,sum,flag,num,flat; while(~scanf("%d",&n)) { memset(vis,0,sizeof(vis)); for(i=0; i<n; i++) { scanf("%d",&a[i]); } sort(a,a+n); sum=0; xx=1; flag=0; while(1) { flat=0; num=0; for(i=0; i<n; i++) { if(!vis[i]) { if(num+1==xx) { if(a[i]>flag) { flag=a[i]; vis[i]=1; num++; flat=1; sum++; break; } } else if(num+1<xx) { flag=max(flag,a[i]); vis[i]=1; num++; flat=1; } } } if(!flat) break; else{ xx++; } } cout<<sum<<endl; } }