HDU 5284

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,使得wy前面,yh前面即可。
有一天小学生拿着一个串问他“wyh是不是这个串的子序列?”
但是wyh2000有重度近视眼,如果字符串中有一段连续的v(至少两个),那么他会把它看成一个w。例如,字符串vvv会被看成w,字符串vvwvvv会被看成www,字符串vwvv会被看成vww。
请问wyh2000会怎么回答这个问题?
输入描述
第一行为数据组数T(1T105)。
接下来T行,每行一个字符串,表示小学生拿来问wyh2000的串。
总串长不超过3145728。只包含小写字母。
hack数据字符串长度不超过100000。
输出描述
对于每组数据,如果wyh2000会把wyh看成该串的子串,那么输出一行Yes,否则输出一行No
输入样例
4
woshiyangli
woyeshiyangli
vvuuyeh
vuvuyeh
输出样例
No
Yes
Yes
No




 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 }

 

posted @ 2015-07-18 22:23  萌萌哒哒哒  阅读(221)  评论(0编辑  收藏  举报