您的位置:首页 > 其它

UVa:11100 The Trip, 2007

2014-01-17 18:39 381 查看
这个题从8月8号第一次写WA,8月25号再写又WA,今天写了几次又WA,最后AC。。这么水的题居然WA了这么多次。。

题意是让你把一串数字分成几组严格递增的数组,要满足两个原则,1是数组总数尽量少,2在1的前提下最长的数组尽量短。

由于是special judge,思路很简单。最少的数组数量就是里面重复次数最多的数字的个数,要满足2条件,只需要把数字排个序然后挨个往每个数组里加即可。



#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#define MAXN 10005
#define MOD 1000000007
#define INF 2139062143
#define ll long long
using namespace std;
int main()
{
    int n,kase=0;
    while(scanf("%d",&n)&&n)
    {
        if(kase) printf("\n");
        int arr[MAXN]= {0};
        for(int i=0; i<n; ++i)
            scanf("%d",&arr[i]);
        sort(arr,arr+n);
        int same=0,maxn=0;
        for(int i=0;i<n;++i)
        {
            if(!i||arr[i]!=arr[i-1]) same=1;
            else same++;
            maxn=max(same,maxn);
        }
        vector<int> bag[MAXN];
        int ans=0;
        for(int i=0,j=0; i<n; ++i,++j)
        {
           j=j%maxn;
           bag[j].push_back(arr[i]);
        }
        printf("%d\n",maxn);
        for(int i=0; i<maxn; ++i)
        {
            for(int j=0; j<bag[i].size(); ++j)
                if(!j) printf("%d",bag[i][j]);
                else printf(" %d",bag[i][j]);
            printf("\n");
        }
        kase=1;
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: