题解:P15478 [CERC2012] Chemist’s vows

· · 题解

题解:P15478 [CERC2012] Chemist’s vows

思路

先打一张元素周期表,用 unordered_set 储存:

::::success[元素周期表]

unordered_set<string> elem={"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","la","ce","pr","nd","pm","sm","eu","gd","tb","dy","ho","er","tm","yb","lu","hf","ta","w","re","os","ir","pt","au","hg","tl","pb","bi","po","at","rn","fr","ra","ac","th","pa","u","np","pu","am","cm","bk","cf","es","fm","md","no","lr","rf","db","sg","bh","hs","mt","ds","rg","cn","fl","lv"};

::::

dp[i] 为表示单词的前 i 个字符是否可以成功拆分。

::::success[AC Code]

#include<bits/stdc++.h>
#define unordered_set set
using namespace std;

set<string> elem={"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","la","ce","pr","nd","pm","sm","eu","gd","tb","dy","ho","er","tm","yb","lu","hf","ta","w","re","os","ir","pt","au","hg","tl","pb","bi","po","at","rn","fr","ra","ac","th","pa","u","np","pu","am","cm","bk","cf","es","fm","md","no","lr","rf","db","sg","bh","hs","mt","ds","rg","cn","fl","lv"};

signed main(){
    int t;  cin>>t;
    while(t--){
        string str;  cin>>str;
        int n=str.size();
        vector<bool> dp(n+1,false);
        dp[0]=true;
        for(int i=0;i<n;i++){
            if(!dp[i])  continue;
            string first;
            first+=tolower(str[i]);
            if(elem.count(first))  dp[i+1]=true;
            if(i+1<n){
                string second;
                second+=tolower(str[i]);
                second+=tolower(str[i+1]);
                if(elem.count(second))  dp[i+2]=true;
            }
        }
        cout<<(dp[n]?"YES":"NO")<<endl;
    }
    return 0;
}

::::

题解来之不易,点个赞再走吧……