hdoj2796

来源:互联网 发布:测音高的软件 编辑:程序博客网 时间:2024/05/29 19:50

题意:

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;    }}


0 0