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

You are given a string q. A sequence of k strings s1, s2, ..., sk is called beautiful, if the concatenation of these strings is string q(formally, s1 + s2 + ... + sk = q) and the first characters of these strings are distinct.

Find any beautiful sequence of strings or determine that the beautiful sequence doesn't exist.

Input

The first line contains a positive integer k (1 ≤ k ≤ 26) — the number of strings that should be in a beautiful sequence.

The second line contains string q, consisting of lowercase Latin letters. The length of the string is within range from 1 to 100, inclusive.

Output

If such sequence doesn't exist, then print in a single line "NO" (without the quotes). Otherwise, print in the first line "YES" (without the quotes) and in the next k lines print the beautiful sequence of strings s1, s2, ..., sk.

If there are multiple possible answers, print any of them.

Sample test(s)
input
1
abca
output
YES
abca
input
2
aaacas
output
YES
aaa
cas
input
4
abc
output
NO
Note

In the second sample there are two possible answers: {"aaaca", "s"} and {"aaa", "cas"}.

大意:给出一个串和一个数字n,问你能不能把大串分成n个小串,满足每一个小串的第一个字母都是不同的

我的搓比代码。先确定最多有多少个串能分,然后标记每一个串的起点,然后根据这个起点进行输出,用vis来标记这个字母是否被访问过

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[150];
int main()
{
    int n;
    int b[30];
    memset(b,-1,sizeof(b));
    scanf("%d",&n);
    getchar();
    scanf("%s",s);
    int ans = 0;
    for(int i = 0 ; i < strlen(s) ;i++)
        if(b[s[i]-'a'] == -1){
            ans++;
            b[s[i]-'a'] = i;
        }
    int k = 0;
    int c[30];
    int vis[30];
    memset(vis,0,sizeof(vis));
    if(ans >= n){
        printf("YES\n");
    for(int i = 0 ; i < strlen(s); i++){
        if(b[s[i]-'a']!=-1 && vis[s[i]-'a'] == 0){
            c[k++] = b[s[i]-'a'];
            vis[s[i]-'a'] = 1;
        }
        if(k  == n) break;
    }
    for(int i = 0; i < n -1  ;i++){
        for(int j = c[i] ; j < c[i+1] ; j++)
            printf("%c",s[j]);
        printf("\n");
    }
    for(int j = c[n-1]; j < strlen(s); j++)
        printf("%c",s[j]);
    printf("\n");
    }
    else printf("NO\n");
    return 0;
}

 

posted @ 2015-05-08 17:53  Painting、时光  阅读(134)  评论(0编辑  收藏  举报