Codeforces Round #662 (Div. 2) 参与排名人数13194
[codeforces 1393C] Pinkie Pie Eats Patty-cakes 桶排序+数字的两种分配形式
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址https://codeforces.com/contest/1393/problem/C
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
C - Pinkie Pie Eats Patty-cakes | GNU C++17 | Accepted | 46 ms | 4300 K |
题目大意:给出一堆数字,编程者可合理安排数字位置,要求雷同数字之间包含的最少数量的数字数量尽可能的大,输出这个最大的最小值。题目进一步理解如下:
7
1 7 1 6 4 4 6
3
构造数字序列如下
1 4 6 7 1 4 6
1 (4 6 7) 1 4 6 雷同数字1之间有3个数字(4 6 7)
1 4 (6 7 1) 4 6 雷同数字4之间有3个数字(6 7 1)
1 4 6 (7 1 4) 6 雷同数字4之间有3个数字(7 1 4)
雷同数字之间做少包含数字是3,最大最小间距是3
基本思路:相见样例模拟过程(建议结合AC代码一起阅读)。
样例模拟过程如下
7
1 7 1 6 4 4 6
3
1有2个,2有2个,6有2个, 分配形式二
7有1个 分配形式一
安置过程如下:
(1)(1)
(1)(1)
(1 2)(1 2)
(1 2 6)(1 2 6)
(1 2 6 7)(1 2 6)
8
1 1 4 6 4 6 4 7
2
4有3个, 分配形式二
1有2个,6有2个, 分配形式一
7有1个 分配形式一
安置过程如下:
(4)(4)(4)
(4 1)(4 1)(4)
(4 1 2)(4 1 2)(4)
(4 1 2 7)(4 1 2)(4)
3
3 3 3
0
3有3个, 分配形式二
安置过程如下:
(3)(3)(3)
6
2 5 2 3 1 4
4
2有2个, 分配形式二
1有1个,3有1个,4有1个,5有1个 分配形式一
安置过程如下:
(2)(2)
(2 1)(2)
(2 1 3)(2)
(2 1 3 4)(2)
(2 1 3 4 5)(2)
AC代码如下:
#include
#define maxn 100010
int cnt[maxn],tot;
int main(){
int t,n,i,a,c,ans;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(i=1;i<=n;i++)cnt[i]=0;
for(i=1;i<=n;i++)scanf("%d",&a),cnt[a]++;
c=0,tot;
for(i=1;i<=n;i++)
if(c