题目链接:http://codeforces.com/contest/358/problem/B
第一次半夜刷比赛,只做出来一道题。这道题当时小数据过了大数据竟然RE,再把代码做了简单修改后AC了。
题目大意:给n个单词长度总和不超过1E5单次前后都有且只有一个<3单词任意位置可以插入小写字母或数字或'<','>'给你译码后的字符串问你是否正确。
先按照规则将单词拼接成字符串然后对于字符串扫描一边判断是否合法即可。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 char str[2010000], buff[2010000], ss[2010000]; 7 8 int main() 9 { 10 // freopen("in.txt", "r", stdin); 11 12 int n, len; 13 while(scanf("%d", &n)!=EOF){ 14 len = 0; 15 str[len++] = '<'; 16 str[len++] = '3'; 17 for(int i=0; i<n; i++){ 18 scanf("%s", buff); 19 strcpy(str+len, buff); 20 len+=strlen(buff); 21 str[len++] = '<'; 22 str[len++] = '3'; 23 } 24 str[len] = 0; 25 scanf("%s", ss); 26 int pa = 0, pb = 0, f = 1; 27 while(str[pa]!=0 && ss[pb]!=0) 28 { 29 if(str[pa]==ss[pb]){ 30 pa++;pb++; 31 } 32 else if((ss[pb]>='a' && ss[pb]<='z') || (ss[pb]>='0' && ss[pb]<='9') || ss[pb]=='<' || ss[pb]=='>'){ 33 pb++; 34 } 35 else{ 36 f = 0; 37 break; 38 } 39 } 40 int lena = strlen(str), lenb = strlen(ss); //本来通过str[len]!=0判断,RE了 41 if(pa<lena)f = 0; 42 while(pb<lenb){ 43 if((ss[pb]>='a' && ss[pb]<='z') || (ss[pb]>='0' && ss[pb]<='9')|| ss[pb]=='<' || ss[pb]=='>'){ 44 45 } 46 else f = 0; 47 pb++; 48 } 49 if(f) printf("yes "); 50 else printf("no "); 51 } 52 return 0; 53 }