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

2780 단어 codeforces
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
"); 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("
"); } for(int j = c[n-1]; j < strlen(s); j++) printf("%c",s[j]); printf("
"); } else printf("NO
"); return 0; }

좋은 웹페이지 즐겨찾기