TIL (2021.01.06)

4267 ワード

(1)スタック
3986好語
平石は単語にアーチ曲線を描き、同じ字の間(AとA、BとB)でペアを組むことにした.線の間に交差がなければ、それぞれの字が異なる位置の同じ字と正確にペアを組むことができれば、この語は「良い語」です.平石を助けて「良い単語」の数を数えます.
case 1:
3
ABAB
AABB
ABBA
->ここでAABB,ABBAはいい語だ
case 2:
3
AAA
AA
AB
AAはいいことばだ
case 3:
1
ABBABB
->ABBABBはいい言葉だ
Anipangを考えればいい同じものを集めたときに爆発するように、彼らは2つに出会ったときも爆発します.一つも残っていなければいい単語です!
stackを使用して、前に入った要素が今入る要素と同じであればpop()またはpush()です.
だからstackが完全に空になったら、誰もが残りの半分に出会って爆発します.良い単語+=1、そうしないとpassになります.
 #include <iostream>
#include <stack>
using namespace std;

int main(){
    
    int number;
    cin>>number;
    
    int count = 0;
    
    string str;
    for(int i=0;i<number;i++){
        stack<char> st;
        cin>>str;
        for(int j=0;j<str.length();j++){
            if(st.empty()){
                st.push(str[j]);
            }else{
                if(st.top()==str[j]){
                    st.pop();
                }else{
                    st.push(str[j]);
                }
            }
        }
        
        if(st.empty()){
            count++;
        }
    }
    cout<<count;
}
(2)キュー
1966プリンタキュー
現在のQueueの一番前のドキュメントの「重要度」を決定します.
残りのドキュメントに現在のドキュメントよりも重要なドキュメントがある場合は、そのドキュメントを印刷せずにQueueの一番後ろに再配置します.さもないとすぐに印刷します.
例えばQueueには4つの文書(A B C D)があり、重要度が2 1 4 3であればCを印刷し、DとA、Bを印刷する.
現在のキュー内のドキュメントの数と重要性を指定したときに、どのドキュメントが何回目に印刷されたかを特定します.例えば、上記の例では、Cドキュメントが1位、Aドキュメントが3位となっている.
優先順位で実施しましょう!
#include < queue >
優先順位queue<リソースタイプ>名前->降順でソート
priority queue<データ型、vector<データ型>、greater<データ型>名
#include <iostream>
#include <queue>
using namespace std;

int main()
{
// n = 문서의 개수 m = Que에서 몇번째에 놓여있는가
    int testCase,n,m,importance,count;
    cin>>testCase;

    
    for(int i=0;i<testCase;i++){
        cin>>n>>m;
        count = 0;
        queue<pair<int,int>>que;
        priority_queue<int> pq;
        
        for(int j=0;j<n;j++){
            cin>>importance;
            que.push({j,importance});
            pq.push(importance);
        }
        
        while (!que.empty()) {
            int index = que.front().first;
            int value = que.front().second;
            que.pop();
            
            if(pq.top()== value){
                pq.pop();
                count+=1;
                
                if(index==m){
                    cout<<count<<endl;
                    break;
                }
            }else{
                que.push({index,value});
            }
        }
    }
}