水题 Codeforces Round #302 (Div. 2) A Set of Strings

题目传送门

 1 /*
 2     题意:一个字符串分割成k段,每段开头字母不相同
 3     水题:记录每个字母出现的次数,每一次分割把首字母的次数降为0,最后一段直接全部输出
 4 */
 5 #include <cstdio>
 6 #include <iostream>
 7 #include <cstring>
 8 #include <string>
 9 #include <algorithm>
10 using namespace std;
11 
12 const int MAXN = 1e2 + 10;
13 const int INF = 0x3f3f3f3f;
14 char s[MAXN];
15 int num[30];
16 
17 int main(void)        //Codeforces Round #302 (Div. 2) A Set of Strings
18 {
19     //freopen ("A.in", "r", stdin);
20 
21     int k;
22     while (scanf ("%d", &k) == 1)
23     {
24         scanf ("%s", &s);
25         if (k == 1)    {puts ("YES");    printf ("%s
", s);    continue;}
26 
27         memset (num, 0, sizeof (num));
28         int len = strlen (s);
29         for (int i=0; i<len; ++i)    num[s[i]-'a']++;
30         int t = 0;
31         for (int i=0; i<26; ++i)    if (num[i])    ++t;
32         if (t < k)    {puts ("NO");    continue;}
33 
34         puts ("YES");
35         printf ("%c", s[0]);    num[s[0]-'a'] = 0;
36         int p = 0;    int i;
37         for (i=1; i<len; ++i)
38         {
39             if (!num[s[i]-'a'])    {printf ("%c", s[i]);}
40             else
41             {
42                 num[s[i]-'a'] = 0;    puts ("");
43                 printf ("%c", s[i]);    ++p;
44             }
45             if (p == k - 1)    break;
46         }
47 
48         for (int j=i+1; j<len; ++j)    printf ("%c", s[j]);
49         puts ("");
50     }
51 
52     return 0;
53 }
编译人生,运行世界!
原文地址:https://www.cnblogs.com/Running-Time/p/4488690.html