zoukankan      html  css  js  c++  java
  • 【CF-1348 C.Phoenix and Distribution】思维

    C. Phoenix and Distribution

    题意

    给出一个字符串(s),现在要把所有字符分到k个字符串中((a_1,a_2,a_3...a_k)),

    输出(min(max(a_1,a_2...a_k)))(a_i)不能为空

    思路

    首先对字符数组排个序,然后依次为(a_1,a_2,a_3...),分派字符。

    如果在第一轮出现了不同的字符,即(a[1][1],a[2][1],a[3][1]...a[k][1])存在不同字符。

    输出(s_k)

    如果(k==n),输出(s_k)

    如果第二轮的第一个字符小于最后一轮的最后一个字符((s[k+1]<s[n])),输出(s+k),

    否则每一轮的字符肯定一样,每轮输出一个字符即可。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    const int inf=0x3f3f3f3f;
    typedef long long ll;
    
    char str[N];
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int n,k;
            scanf("%d%d",&n,&k);
            scanf("%s",str+1);
            sort(str+1,str+1+n);
            if(str[1]!=str[k])
                printf("%c
    ",str[k]);
            else
            {
                if(k==n) printf("%c
    ",str[k]);
                else
                {
                    if(str[k+1]<str[n])
                        printf("%s
    ",str+k);
                    else
                    {
                        for(int i=1;i<=(n-1)/k+1;i++)
                            printf("%c",str[(i-1)*k+1]);
                        printf("
    ");
                    }
                }
            }
        }
        return 0;
    }
    /*
    */
    
  • 相关阅读:
    LeetCode之移除元素
    有被开心到hh(日常)
    交换排序
    插入排序
    顺序查找&折半查找
    C++之引用
    MySQL学习笔记
    C/C++程序编译过程
    计算机面试知识整合(更新中...)
    MFC之编辑框
  • 原文地址:https://www.cnblogs.com/valk3/p/12969040.html
Copyright © 2011-2022 走看看