• 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;
    }

     

  • 相关阅读:
    Python3 简单实现下载某个网站轮播图片
    java中i=i++的解析
    String、StringBuffer、StringBuilder的区别和解析
    java值传递和引用传递
    Java并发(多线程)
    Java Set集合(HashSet、TreeSet)
    Java泛型的基本介绍与使用
    linux自学
    移动端项目准备工作
    响应式布局概念
  • 原文地址:https://www.cnblogs.com/zero-begin/p/4488441.html
Copyright © 2020-2023  润新知