1. 程式人生 > 實用技巧 >AtCoder Beginner Contest 187 C - 1-SAT

AtCoder Beginner Contest 187 C - 1-SAT

C - 1 - SAT

看了官網提供的題解,發現這個思路很巧妙,同時也作為對STL中的set容器的學習吧

題目分析

這道題需要一個set容器來儲存輸入的字串。

測試資料無非有兩類:以!開頭的字串和沒有以!開頭的字串 。輸入的如果是以!開頭的字串,那麼把!去掉後再在set容器查詢一下是否有匹配的元素,如果存在的話,輸出匹配的元素,結束程式執行;對於非!開頭的元素,那麼在容器查詢一下加上!後是否有匹配的元素,如果存在的話,輸出匹配的元素,結束程式執行。如果無匹配元素,那麼將輸入的字串儲存在容器中。

我原本的思路是儲存完字串之後,再遍歷一遍 好暴力qwq ,但這個思路完全是反過來了:判斷完再儲存。對於我這蒟蒻來說這個思路確實是想不到,順便也學習了set的一些用法。

AC程式碼

#include<bits/stdc++.h>
using namespace std;
int n;
string ss;
set<string> s;
int main(){
    ios_base::sync_with_stdio(false);
    ios::sync_with_stdio(false);
   
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> ss;
        if(ss[0] == '!'){
            string t = ss; 
            t.erase(t.begin());
            if(s.count(t)){
                cout << t << endl; return 0;
            }
            
        }
        else {
            string t = "!" + ss;
            if(s.count(t)){
                cout << ss << endl; return 0;
            }
        }
        s.insert(ss);
    }
    cout << "satisfiable" << endl;

    return 0;
}