[cerc2012][Gym100624C]20181013

题意:用元素符号表示字符串

题解:签到题 简单dp

难点在于把元素符号都改成小写qaq

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 using namespace std;
 7 
 8 const int N=500010,M=120;
 9 
10 char p[114][10]={"h","he","li","be","b","c","n","o","f","ne","na","mg","al","si","p","s","cl","ar","k","ca","sc","ti","v","cr","mn","fe","co","ni","cu","zn","ga","ge","as","se","br","kr","rb","sr","y","zr","nb","mo","tc","ru","rh","pd","ag","cd","in","sn","sb","te","i","xe","cs","ba","hf","ta","w","re","os","ir","pt","au","hg","tl","pb","bi","po","at","rn","fr","ra","rf","db","sg","bh","hs","mt","ds","rg","cn","fl","lv","la","ce","pr","nd","pm","sm","eu","gd","tb","dy","ho","er","tm","yb","lu","ac","th","pa","u","np","pu","am","cm","bk","cf","es","fm","md","no","lr"};
11 char s[N];
12 int len[M];
13 bool f[N];
14 
15 int main()
16 {
17     //freopen("a.in","r",stdin);
18     int pl=114;
19     for(int i=0;i<pl;i++) len[i]=strlen(p[i]);
20     int T;
21     scanf("%d",&T);
22     while(T--)
23     {
24         scanf("%s",s+1);
25         int sl=strlen(s+1);
26         memset(f,0,sizeof(f));
27         f[0]=1;
28         for(int i=1;i<=sl;i++)
29         {
30             for(int j=0;j<pl;j++)
31             {
32                 if(len[j]==1)
33                     f[i]=(f[i] || (f[i-1] && s[i]==p[j][0]));
34                 else if(i>=2)
35                     f[i]=(f[i] || (f[i-2] && s[i-1]==p[j][0] && s[i]==p[j][1]));
36             }
37         }
38         if(f[sl]) printf("YES\n");
39         else printf("NO\n");
40     }
41     return 0;
42 }

 

posted @ 2018-10-18 11:50  拦路雨偏似雪花  阅读(187)  评论(0编辑  收藏  举报