您的位置:首页 > 其它

The Trip, 2007 UVA - 11100(贪心)

2017-08-19 10:15 429 查看
题目链接:点击打开链接

题意: 有 n 个包,大包可以装一个小包,问这些包能组成的最少包数;

题解: 找出 n 个数中出现最多次数的数 k,这个数就是一个基数,即能形成的最少包数(想想就明白了),从小到大排序,每隔 k 个数输出一次,输出的便是答案;

            例如:

                     1122334444556666 可以分成 1346,1346,2456 2456四个,即 k =4;

       

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iomanip>
using namespace std;

int main()
{
int n;
while(cin>>n&&n){
int a[10000+100];
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
int maxx=0; int num=0;
for(int i=0;i<n;i++){
if(a[i]==a[i+1]){
num++;
}
else if(a[i]!=a[i+1]){
num++;
maxx=max(maxx,num);
num=0;
}
}
cout<<maxx<<endl;
for(int i=0;i<maxx;i++){
cout<<a[i];
for(int j=i+maxx;j<n;j+=maxx){
cout<<" "<<a[j];
}
cout<<endl;
}
cout<<endl;

}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: