UVa 11100 The Trip (贪心)

出现次数最多的数字的次数即为最少的答案,

只需要依次将序列按顺序分隔开即可,每组 \(n/ans\) 的长度

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxn = 10010;

int n;
int a[maxn];

ll read(){ ll s = 0, f = 1; char ch = getchar(); while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); } while(ch >= '0' && ch <= '9'){ s = s * 10 + ch - '0'; ch = getchar(); } return s * f; }

int main(){
	int T = 0;
	while(scanf("%d", &n) == 1 && n){
		for(int i = 1 ; i <= n ; ++i){
			scanf("%d", &a[i]);
		}
		if(T) printf("\n");
		T = 1;
		
		sort(a + 1, a + 1 + n);
		a[0] = -1;
		
		int k = 0, mx = 0;
		for(int i = 1 ; i <= n ; ++i){
			if(a[i] != a[i - 1]){
				k = 1;
				mx = max(mx, k);
			} else{
				++k;
				mx = max(mx, k);
			}
		}
		
		printf("%d\n", mx);
		
		for(int i = 1 ; i <= mx ; ++i){
			for(int j = i ; j <= n ; j += mx){
				if(j != i) printf(" ");
				printf("%d", a[j]);
			} printf("\n");
		}
	}
	return 0;
}
posted @ 2021-06-03 15:21  Tartarus_li  阅读(41)  评论(0)    收藏  举报