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

}




posted @ 2016-07-18 14:23  see_you_later  阅读(138)  评论(0编辑  收藏  举报