codeforces 716B

来源:互联网 发布:linux c mysql 参数化 编辑:程序博客网 时间:2024/06/05 20:33
                                                                     A - Complete the Word
                  Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u
                     Submit
 
Status
Description
ZS the Coder loves to read the dictionary. He thinks that a word is nice if there exists a substring (contiguous segment of letters) of it of length 26 where each letter of English alphabet appears exactly once. In particular, if the string has length strictly less than 26, no such substring exists and thus it is not nice.
Now, ZS the Coder tells you a word, where some of its letters are missing as he forgot them. He wants to determine if it is possible to fill in the missing letters so that the resulting word is nice. If it is possible, he needs you to find an example of such a word as well. Can you help him?
Input
The first and only line of the input contains a single string s (1?≤?|s|?≤?50?000), the word that ZS the Coder remembers. Each character of the string is the uppercase letter of English alphabet ('A'-'Z') or is a question mark ('?'), where the question marks denotes the letters that ZS the Coder can't remember.
Output
If there is no way to replace all the question marks with uppercase letters such that the resulting word is nice, then print ?-?1 in the only line.
Otherwise, print a string which denotes a possible nice word that ZS the Coder learned. This string should match the string from the input, except for the question marks replaced with uppercase English letters.
If there are multiple solutions, you may print any of them.
Sample Input
Input
ABC??FGHIJK???OPQR?TUVWXY?
Output
ABCDEFGHIJKLMNOPQRZTUVWXYS
Input
WELCOMETOCODEFORCESROUNDTHREEHUNDREDANDSEVENTYTWO
Output
-1
Input
??????????????????????????
Output
MNBVCXZLKJHGFDSAQPWOEIRUYT
Input
AABCDEFGHIJKLMNOPQRSTUVW??M
Output
-1
Hint
In the first sample case, ABCDEFGHIJKLMNOPQRZTUVWXYS is a valid answer beacuse it contains a substring of length 26 (the whole string in this case) which contains all the letters of the English alphabet exactly once. Note that there are many possible solutions, such as ABCDEFGHIJKLMNOPQRSTUVWXYZ or ABCEDFGHIJKLMNOPQRZTUVWXYS.
In the second sample case, there are no missing letters. In addition, the given string does not have a substring of length 26 that contains all the letters of the alphabet, so the answer is ?-?1.
In the third sample case, any string of length 26 that contains all letters of the English alphabet fits as an answer.




















题意:给你一串字符,其中包括大写字母A--Z和? ,?可替换为任意字母,问该字符串中能否出现所有的26个字母,能则输出变化后的字母,不能输出-1;
思路:如果字符串长度小于26则一定不能,如果大于26,则每26个字母遍历一次,并开一个数组记录出现过的字母,记录每26个字符中问号的个数,最后判断已经出现过的字母+问号的个数能否等于26 等于则跳出循环,不能则继续查找.如果能找到,就将每一个问号改变成未出现的那个字母,然后依次遍历跳出循环.当找到符合条件的之后,直接跳出循环,后面的问号可随机替换任意字母,这里我将其全部输出为‘A’;
ac代码:
#include<stdio.h>
#include<string.h>
#define N 50010
int main()
{   char s[N];
    int len;
    int map[30]; 
    scanf("%s",s);
    len=strlen(s);
    //printf("%d",len);
    if(len<26)
      {  printf("-1");
 }//小于26一定不可以
else
{
 int flag=0,ff=0,g,i,j,count1,count2;
for(i=0;i<=len-26;i++)
 {    flag=0;
      count1=0;
      count2=0;
   memset(map,0,sizeof(map));//每26个字母之后都要重新初始化;
      for(j=i;j<26+i;j++)
      {   if(s[j]!='?')
             map[s[j]-'A']=1;
          else
             count2++;
           
  }
  for(g=0;g<26;g++)
      {  if(map[g]==1)
          count1++;}
     if(count1+count2==26)
     {
     flag=1;
  for(j=i;j<26+i;j++)
  {    if(s[j]=='?')
        {     for(g=0;g<26;g++)
                  {  if(!map[g])
                       {    s[j]=(g+'A');//将?变为未出现过的字母
                           map[g]=1;
                           break;
}
  }
}
  }
     for(g=0;g<i;g++)
      {  if(s[g]=='?')
          printf("%c",'A');
          else
            printf("%c",s[g]);
  }
 for(j=i;j<26+i;j++)
  {   
         printf("%c",s[j]);
  }
  for(g=26+i;g<len;g++)
  {    if(s[g]!='?')
      printf("%c",s[g]);
      else
       printf("%c",'A');
  } 
       break;
  }
 }
 if(flag==0)
   printf("-1");}
   return 0;  
}

1 0
原创粉丝点击