Zenn
🔵

【ABC398】AtCoder Beginner Contest 398【C++】

2025/03/24に公開

コンテスト名

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

コンテストURL

https://atcoder.jp/contests/abc398

開催日

2025/03/22 21:00-22:40


A: Doors in the Center

解法

  • 回文の中央は =
  • NN の偶奇で場合分けする
ABC398A.cpp
#include <iostream>
using namespace std;

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

    if(n%2==0){
        for(int i=0; i<n/2-1; i++){
            cout << '-';
        }
        cout << "==";
        for(int i=0; i<n/2-1; i++){
            cout << '-';
        }
    }else{
        for(int i=0; i<n/2; i++){
            cout << '-';
        }
        cout << '=';
        for(int i=0; i<n/2; i++){
            cout << '-';
        }
    }
    cout << endl;

    return 0;
}

B: Full House 3

解法

  • 各種類の枚数を vector<int> に記録する
  • 3枚以上ある種類が一つ見つかれば、次は2枚以上ある種類を見つければよいことに注意する
ABC398B.cpp
#include <iostream>
#include <vector>
using namespace std;

int main(){
    int a;
    vector<int> V(13);
    for(int i=0; i<7; i++){
        cin >> a;
        a--;
        V[a]++;
    }

    bool flag3 = false, flag2 = false;
    for(int i=0; i<13; i++){
        if(!flag3 && V[i]>=3){
            flag3 = true;
        }else if(V[i]>=2){
            flag2 = true;
        }
    }

    if(flag3 && flag2){
        cout << "Yes" << endl;
    }else{
        cout << "No" << endl;
    }

    return 0;
}

C: Uniqueness

解法

  • map<int, int> で各数を持っている人数を記録する
ABC398C.cpp
#include <iostream>
#include <vector>
#include <map>
using namespace std;

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

    vector<int> A(n);
    map<int, int> M;
    for(int i=0; i<n; i++){
        cin >> A[i];
        M[A[i]]++;
    }

    int maxv = 0, maxid = -1;
    for(int i=0; i<n; i++){
        if(M[A[i]]==1 && maxv<A[i]){
            maxv = A[i];
            maxid = i + 1;
        }
    }

    cout << maxid << endl;

    return 0;
}

D: Bonfire

解法

  • 焚き火と高橋君が風と逆向きに移動すると考える
  • set<pair<int, int>> に焚き火の位置を記録する
ABC398D.cpp
#include <iostream>
#include <string>
#include <set>
using namespace std;

int main(){
    int n, r, c;
    cin >> n >> r >> c;

    string s;
    cin >> s;

    set<pair<int, int>> S;
    int x = 0, y = 0;
    S.emplace(x, y);
    for(int i=0; i<n; i++){
        if(s[i]=='N'){
            x++;
            S.emplace(x, y);
            r++;
        }else if(s[i]=='W'){
            y++;
            S.emplace(x, y);
            c++;
        }else if(s[i]=='S'){
            x--;
            S.emplace(x, y);
            r--;
        }else if(s[i]=='E'){
            y--;
            S.emplace(x, y);
            c--;
        }

        if(S.count({r, c})){
            cout << 1;
        }else{
            cout << 0;
        }
    }

    cout << endl;

    return 0;
}

Discussion

ログインするとコメントできます