1. 程式人生 > 實用技巧 >Codeforces Round #527 (Div. 3) C. Prefixes and Suffixes (思維,字串)

Codeforces Round #527 (Div. 3) C. Prefixes and Suffixes (思維,字串)

  • 題意:給你某個字串的\(n-1\)個字首和\(n-1\)個字尾,保證每個所給的字首字尾長度從\([1,n-1]\)都有,問你所給的子串是字首還是字尾.

  • 題解:這題最關鍵的是那兩個長度為\(n-1\)的子串,我們只要判斷哪個是字首就行了,然後再遍歷一遍所給的子串,用長度為\(n-1\)的字首子串來判斷是子串是字首還是字尾.

  • 程式碼:

    int n;
    string s[N];
    bool vis[N];
    int cnt;
    
    int main() {
        ios::sync_with_stdio(false);cin.tie(0);
        cin>>n;
    
        string s1="";
        string s2="";
        string pre;
        for(int i=1;i<=2*n-2;++i){
            cin>>s[i];
            if(s1.size()<s[i].size()) s1=s[i];
            else if(s1.size()==s[i].size()) s2=s[i];
        }
    
        for(int i=1;i<=2*n-2;++i){
            if(s1.substr(0,s[i].size())==s[i]) cnt++;
        }
    
        if(cnt>=n-1 && s1.substr(1,s1.size())==s2.substr(0,s2.size()-1)) pre=s1;
        else pre=s2;
    
        for(int i=1;i<=2*n-2;++i){
            if(s[i]==pre.substr(0,s[i].size()) && !vis[s[i].size()]){
                printf("P");
                vis[s[i].size()]=true;
            }
            else printf("S");
        }
    
        return 0;
    }