Codeforces 716B Complete the Word

来源:互联网 发布:海淀法院 时代网络大厦 编辑:程序博客网 时间:2024/05/29 03:09

题目链接:http://codeforces.com/problemset/problem/716/B

题意:给一个字符串,问你这个字符串的所有子串中有没有一个长度为26的子串包含所有的26个大写字母。其中问号可以代表任意字符。
没有的话输出-1,有的话吧?补成字母后输出整个字符串。
Special Judge.

就枚举瞎暴力,跑出来就随便打,跑不出来就-1.

#include <iostream> #include <cstdio>#include <cstring>#include <algorithm>#include <set>#include <queue>using namespace std;char s[50100];int main() {    scanf("%s", s);    int i, j;    char k;    int len = strlen(s);    int F = 0;    set<char> st;    for(i = 0; i < len - 25; i++) {        st.clear();        int cnt = 0;        int flag = 1;        for(j = i; j < i + 26; j++) {            if(s[j] == '?') cnt++;            else {                if(!st.count(s[j])) st.insert(s[j]);                else {                    flag = 0;                    break;                }            }        }        if(flag && st.size() + cnt == 26) {            F = 1;            break;        }    }    if(F) {        for(j = i; j < i + 26; j++) {            if(s[j] == '?') {                for(k = 'A'; k <= 'Z'; k++) {                    if(!st.count(k)) {                        st.insert(k);                        s[j] = k;                        break;                    }                }            }        }        for(i = 0; i < len; i++) {            if(s[i] == '?') putchar('A');            else printf("%c", s[i]);        }        puts("");    }    else puts("-1");    return 0;}
0 0