题意:
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;
}
}