CodeForces 1348-C Phoenix and Distribution(字典序)

Posted jiamian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces 1348-C Phoenix and Distribution(字典序)相关的知识,希望对你有一定的参考价值。

 

https://codeforces.com/contest/1348/problem/C

 

技术图片

 

 

技术图片

 

 

技术图片

 

题意:

给你一个长度为n的字符串,要求你将它的字符分为k份,每份个数至少有1个,使得新组合的字符串中字典序最大的字符串的字典序尽可能小,打印这个字符串。


解题思路:

先sort下,然后给每份分一个字符,如果第一份的字符和第k份的字符不一样,直接输出第k份中的字符即可(剩下的字符全扔给第一个,字典序还是第k份的大)。

如果分的全一样,再分两种情况:

1、剩下的字符全一样:把剩下的均分给每一份,然后输出第一份

2、剩下的字符不全一样:把剩下的字符全扔给第一份,然后输出第一份

比如aabbc分成2份,则最后就是分成了abbc和a,因为只要第一份中的任何一个字符给了第二份,那么第一份后面的字符全往前移,字典序必变大。

 

 

 1 #include <bits/stdc++.h>
 2 typedef long long LL;
 3 #define pb push_back
 4 const int INF = 0x3f3f3f3f;
 5 const double eps = 1e-8;
 6 const int mod = 1e9+7;
 7 const int maxn = 1e5+10;
 8 using namespace std;
 9 
10 string str;
11 
12 int main()
13 {
14     #ifdef DEBUG
15     freopen("sample.txt","r",stdin); //freopen("data.out", "w", stdout);
16     #endif
17     
18     int T;
19     cin>>T;
20     while(T--)
21     {
22         int n,k;
23         cin>>n>>k>>str;
24         sort(str.begin(),str.end());
25         if(str[0]!=str[k-1])//第一轮分就不全一样,直接输出str[k-1]
26         {
27             cout<<str[k-1]<<"
";
28             continue;
29         }
30         string ans = "";
31         ans += str[0];
32         if(str[k]==str[n-1])//后面全一样,均分
33         {
34             int t=(n-k)/k;//均分完第一份可以添加的个数
35             if((n-k)%k) t++;//有余数就+1
36             for(int i=1;i<=t;i++)
37                 ans+=str[k];
38         }
39         else//后面不全一样,全给第一份
40         {
41             for(int i=k;i<n;i++)
42                 ans+=str[i];
43         }
44         cout<<ans<<"
";
45     }
46     
47     return 0;
48 }

 

 

 

 

-

以上是关于CodeForces 1348-C Phoenix and Distribution(字典序)的主要内容,如果未能解决你的问题,请参考以下文章

CodeForces - 1515A Phoenix and Gold

codeforces-1348-D Phoenix and Science

Codeforces Global Round 14, B. Phoenix and Puzzle

Codeforces Global Round 14, D. Phoenix and Socks

Codeforces Global Round 14, C. Phoenix and Towers

Codeforces Global Round 14,A. Phoenix and Gold