题目链接:https://vjudge.net/problem/UVA-11100
题目大意:给定n个正整数,把它们划分成尽量少的严格递增序列。
思路:容易知道,严格递增序列的个数就是出现次数最多的数。直接暴力即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include<cctype>
#include <cstdlib>
#include<map>
#include<iostream>
#include<queue>
using namespace std;
typedef long long LL;
const int dr[] = {0,0,-1,1};
const int dc[] = {-1,1,0,0};
const int maxn = 10000 + 5;
int a[maxn], num[maxn*100];
int main()
{
int n;
while(scanf("%d", &n) && n)
{
int maxsize = 0;
memset(num, 0, sizeof num);
for(int i = 0; i < n; i++) {
scanf("%d", &a[i]);
++num[a[i]];
maxsize = max(maxsize, num[a[i]]);
}
sort(a, a+n);
printf("%d\n", maxsize);
for(int i = 0; i < maxsize; i++)
{
printf("%d", a[i]);
for(int j = i+maxsize; j < n; j += maxsize)
printf(" %d", a[j]);
printf("\n");
}
}
return 0;
}