UVa11100 The Trip, 2007

给跪了..这个构造法...

最小的序列还是很好求的(顺便吐槽一下白书上的翻译有歧义把..怎么是划分呢..)

但是关于方案的输出, 本来想用个vector<pair<int, int> >暴力维护的,

结果看了网上的代码,

利用性质就行了啊!

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <iostream>
 5 #include <vector>
 6 using namespace std;
 7 typedef pair<int, int> P;
 8 const int MAXN = 1e4 + 20;
 9 
10 int N;
11 int a[MAXN]; 
12 
13 int main()
14 {
15     //freopen("11100.in", "r", stdin);
16     //freopen("11100.out", "w", stdout);
17     while(cin>>N, N)
18     {
19         for(int i = 1; i <= N; i++)
20             scanf("%d", &a[i]);
21         sort(a + 1, a + N + 1);
22         int maxk = 1; P tmp(0, 0);
23         for(int i = 1; i <= N; i++)
24             if(a[i] == tmp.first){
25                 tmp.second++;
26                 maxk = max(maxk, tmp.second);
27             }
28             else tmp.second = 1, tmp.first = a[i];
29         printf("%d
", maxk);
30         for(int i = 1; i <= maxk; i++)
31         {
32             printf("%d", a[i]);
33             for(int j = i + maxk; j <= N; j += maxk)
34                 printf(" %d", a[j]);
35             printf("
");
36         }
37         puts("");
38     }
39     return 0;
40 }
原文地址:https://www.cnblogs.com/wsmrxc/p/9230041.html