wyh2000 and a string problem
http://acm.hdu.edu.cn/showproblem.php?pid=5284
Accepts: 428
Submissions: 1313
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 131072/65536 K (Java/Others)
问题描述
青年理论计算机科学家wyh2000在教小学生一些基础的字符串概念。 定义一个字符串s的子序列为将s中一些元素删掉得到的字符串。可以删掉全部元素,可以不删,也可以只删一些。 他还教了小学生如何判断一个串是不是另一个串的子序列。比如给你一个串,要求判断wyh是不是它的子序列,那么你只需要找一个w,找一个y,再找一个h,使得w在y前面,y在h前面即可。 有一天小学生拿着一个串问他“wyh是不是这个串的子序列?” 但是wyh2000有重度近视眼,如果字符串中有一段连续的v(至少两个),那么他会把它看成一个w。例如,字符串vvv会被看成w,字符串vvwvvv会被看成www,字符串vwvv会被看成vww。 请问wyh2000会怎么回答这个问题?
输入描述
第一行为数据组数T(1≤T≤105)。 接下来T行,每行一个字符串,表示小学生拿来问wyh2000的串。 总串长不超过3145728。只包含小写字母。 hack数据字符串长度不超过100000。
输出描述
对于每组数据,如果wyh2000会把wyh看成该串的子串,那么输出一行Yes,否则输出一行No。
输入样例
4 woshiyangli woyeshiyangli vvuuyeh vuvuyeh
输出样例
No Yes YesNo
1 #include <stdio.h> 2 #include <string.h> 3 char s[3145728],s1[3145728]; 4 int main() 5 { 6 int T,len,count1,k1,l1,l2,i,k; 7 scanf("%d",&T); 8 while(T--) 9 { 10 scanf("%s",s); 11 len=strlen(s); 12 count1=0; 13 k1=0; 14 for(int i=0; i<len; i++) 15 { 16 if(s[i]==‘v‘) 17 { 18 count1++; 19 } 20 else 21 { 22 if(count1>=2) 23 { 24 s1[k1++]=‘w‘; 25 } 26 else if(count1==1) 27 { 28 s1[k1++]=‘v‘; 29 } 30 count1=0; 31 s1[k1++]=s[i]; 32 } 33 } 34 if(count1>=2) 35 { 36 s1[k1++]=‘w‘; 37 } 38 else if(count1==1) 39 { 40 s1[k1++]=‘v‘; 41 } 42 l1=-1; 43 for(int i=0; i<k1; i++) 44 { 45 if(s1[i]==‘w‘) 46 { 47 l1=i; 48 break; 49 } 50 } 51 l2=-1; 52 if(l1>=0&&l1<=k1-3) 53 { 54 for(i=l1+1; i<k1; i++) 55 { 56 if(s1[i]==‘h‘) 57 { 58 l2=i; 59 } 60 } 61 if(l2!=-1) 62 { 63 for(i=l1+1; i<=l2-1; i++) 64 { 65 if(s1[k]==‘y‘) 66 { 67 printf("Yes\n"); 68 break; 69 } 70 } 71 if(i==l2) 72 { 73 printf("No\n"); 74 } 75 } 76 else 77 { 78 printf("No\n"); 79 } 80 } 81 else 82 { 83 printf("No\n"); 84 } 85 86 } 87 return 0; 88 }
时间: 2024-11-05 17:28:02