1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ABC411】AtCoder Beginner Contest 411【C++】

Posted at

コンテスト名

ユニークビジョンプログラミングコンテスト2025 夏(AtCoder Beginner Contest 411)

コンテストURL

開催日

2025/06/21 21:00–22:40


A: Required Length

解法

  • 問題文通りに判定する
ABC411A.cpp
#include <iostream>
#include <string>
using namespace std;

int main(){
    string p;
    cin >> p;
    int l;
    cin >> l;

    if(p.size()>=l){
        cout << "Yes" << endl;
    }else{
        cout << "No" << endl;
    }

    return 0;
}

B: Distance Table

解法

  • 累積和
ABC411B.cpp
#include <iostream>
#include <vector>
using namespace std;

int main(){
    int n;
    cin >> n;

    vector<int> D(n);
    for(int i=0; i<n-1; i++){
        cin >> D[i+1];
    }

    for(int i=0; i<n-1; i++){
        D[i+1] += D[i];
    }

    for(int i=0; i<n; i++){
        for(int j=i+1; j<n; j++){
            if(j!=i+1){
                cout << " ";
            }
            cout << D[j] - D[i];
        }
        cout << '\n';
    }

    return 0;
}

C: Black Intervals

解法

  • 反転するマスの両隣のマスの色によって、黒く塗られたマスが連続している区間の個数の増減が決定する
ABC411C.cpp
#include <iostream>
#include <vector>
using namespace std;

int main(){
    int n, q;
    cin >> n >> q;

    int a;
    int cnt = 0;
    vector<int> V(n);
    for(int i=0; i<q; i++){
        cin >> a;
        a--;

        if(V[a]==0){
            V[a] = 1;

            if(n==1){
                cnt++;
            }else if(a==0){
                if(V[a+1]==0){
                    cnt++;
                }
            }else if(a==n-1){
                if(V[a-1]==0){
                    cnt++;
                }
            }else if(V[a-1]==0 && V[a+1]==0){
                cnt++;
            }else if(V[a-1]==1 && V[a+1]==1){
                cnt--;
            }
        }else if(V[a]==1){
            V[a] = 0;

            if(n==1){
                cnt--;
            }else if(a==0){
                if(V[a+1]==0){
                    cnt--;
                }
            }else if(a==n-1){
                if(V[a-1]==0){
                    cnt--;
                }
            }else if(V[a-1]==0 && V[a+1]==0){
                cnt--;
            }else if(V[a-1]==1 && V[a+1]==1){
                cnt++;
            }
        }

        cout << cnt << '\n';
    }

    return 0;
}

D: Conflict 2

解法

  • クエリを後ろから順に処理する
ABC411D.cpp
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <tuple>
using namespace std;

int main(){
    int n, q;
    cin >> n >> q;

    int num, p;
    string s;
    vector<tuple<int, int, string>> V;
    for(int i=0; i<q; i++){
        cin >> num;

        if(num==1){
            cin >> p;
            
            V.emplace_back(1, p, "NO");
        }else if(num==2){
            cin >> p >> s;
            
            reverse(s.begin(), s.end());
            V.emplace_back(2, p, s);
        }else if(num==3){
            cin >> p;
            
            V.emplace_back(3, p, "NO");
        }
    }

    string ans = "";
    int idx = 0;
    for(int i=q-1; i>=0; i--){
        auto [num, p, s] = V[i];

        if(num==1){
            if(idx==p){
                idx = 0;
            }
        }else if(num==2){
            if(idx==p){
                ans += s;
            }
        }else if(num==3){
            if(idx==0){
                idx = p;
            }
        }
    }

    reverse(ans.begin(), ans.end());
    cout << ans << endl;

    return 0;
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?