Central Europe Regional Contest 2012 Problem c: Chemist’s vows

本文通过一个具体的字符串处理题目,展示了如何使用C++中的string类来实现高效字符串匹配。代码中定义了一个化学元素字典,并利用递归函数判断输入的字符串是否能完全由这些元素组成。

字符串处理的题目;

学习了一下string类的一些用法;

这个代码花的时间很长,其实可以更加优化;

代码:

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 string dict[114]= {"he","h","li","be","b","c","n","o","f","ne"
 5                    ,"na","mg","al","si","p","s","cl","ar","k","ca"
 6                    ,"sc","ti","v","cr","mn","fe","co","ni","cu","zn"
 7                    ,"ga","ge","as","se","br","kr","rb","sr","y","zr"
 8                    ,"nb","mo","tc","ru","rh","pd","ag","cd","in","sn"
 9                    ,"sb","te","i","xe","cs","ba","hf","ta","w","re"
10                    ,"os","ir","pt","au","hg","tl","pb","bi","po","at"
11                    ,"rn","fr","ra","rf","db","sg","bh","hs","mt","ds"
12                    ,"rg","cn","fl","lv","la","ce","pr","nd","pm","sm"
13                    ,"eu","gd","tb","dy","ho","er","tm","yb","lu","ac"
14                    ,"th","pa","u","np","pu","am","cm","bk","cf","es"
15                    ,"fm","md","no","lr"
16                   };
17 
18 bool go(string &s,int k)
19 {
20     if(k==s.length())
21         return true;
22     for(int i=0; i<114; i++)
23         if(s.substr(k,dict[i].length())==dict[i] && go(s,k+dict[i].length()))
24             return true;
25     return false;
26 }
27 
28 int main()
29 {
30     int tt;
31     cin>>tt;
32     string s;
33     while(tt--)
34     {
35         cin>>s;
36         cout<<(go(s,0)?"YES":"NO")<<endl;
37     }
38     return 0;
39 }
View Code

 

转载于:https://www.cnblogs.com/yours1103/p/3350517.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值