zoukankan      html  css  js  c++  java
  • 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
    ");
        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;
    }

     

  • 相关阅读:
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 344 反转字符串
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
  • 原文地址:https://www.cnblogs.com/zero-begin/p/4488441.html
Copyright © 2011-2022 走看看