Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) D题

来源:互联网 发布:nginx配置ssl双向验证 编辑:程序博客网 时间:2024/06/05 00:35

题意:

给出一串字符串,每M个字符中必须取一个字符,问字典序最小为多少。

思路:

依次从A B- Z 中取出字符。

如果有一个M段 没有当前取的字符CH ,那么就把这个字符串中所有的CH输出,作为最小,并且标记。

如果都有CH,那么在最后按位置把CH最小的个数输出

#include<cstdio>#include<cstring>#include<iostream>#include<vector>#include<algorithm>#include<cmath>#include<map>#include<set>#include<queue>using namespace std; int m;char st[100010];bool b[100010];int main(){    scanf("%d",&m);    scanf("%s",st);    for(char ch='a'; ch<='z'; ch++)    {        int sum=0;        for(int i=0; st[i]!='\0'; i++)        {            if (st[i]==ch||b[i]) sum=0;            else sum++;            if (sum==m) break;        }        if (sum==m)        {            for(int i=0; st[i]!='\0'; i++)                if (st[i]==ch)                {                    printf("%c",ch);                    b[i]=true;                }            continue;        }        sum=0;        int l=-1;        for(int i=0; st[i]!='\0'; i++)        {            if (b[i]) sum=0;            else sum++;            if (st[i]==ch) l=i;            if (sum==m)            {                sum=i-l;                printf("%c",ch);            }        }        break;    }     cout<<endl;    return 0;}


0 0