🔵

【ABC419】AtCoder Beginner Contest 419【C++】

に公開

コンテスト名

AtCoder Beginner Contest 419

コンテストURL

https://atcoder.jp/contests/abc419

開催日

2025/08/16 21:00–22:40


A: AtCoder Language

解法

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

int main(){
    string s;
    cin >> s;

    if(s=="red"){
        cout << "SSS" << endl;
    }else if(s=="blue"){
        cout << "FFF" << endl;
    }else if(s=="green"){
        cout << "MMM" << endl;
    }else{
        cout << "Unknown" << endl;
    }

    return 0;
}

B: Get Min

解法

  • priority_queue<int, vector<int>, greater<int>> でボールを管理する
ABC419B.cpp
#include <iostream>
#include <queue>
using namespace std;

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

    priority_queue<int, vector<int>, greater<int>> Q;
    int num, x;
    while(q--){
        cin >> num;

        if(num==1){
            cin >> x;
            Q.push(x);
        }else if(num==2){
            cout << Q.top() << '\n';
            Q.pop();
        }
    }

    return 0;
}

C: King's Summit

解法

  • 縦・横について、それぞれ最小値と最大値の中間のマスに集まるのが最適である
ABC419C.cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

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

    vector<int> R(n), C(n);
    int minr = 1e9, minc = 1e9, maxr = 0, maxc = 0;
    for(int i=0; i<n; i++){
        cin >> R[i] >> C[i];
        minr = min(minr, R[i]);
        minc = min(minc, C[i]);
        maxr = max(maxr, R[i]);
        maxc = max(maxc, C[i]);
    }

    int midr = (minr+maxr)/2, midc = (minc+maxc)/2;

    int maxv = 0;
    for(int i=0; i<n; i++){
        maxv = max(maxv, max(abs(R[i]-midr), abs(C[i]-midc)));
    }

    cout << maxv << endl;

    return 0;
}

D: Substr Swap

解法

  • いもす法
  • 入れ替える操作の回数の偶奇に着目する
ABC419D.cpp
#include <iostream>
#include <vector>
using namespace std;

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

    string s, t;
    cin >> s >> t;

    vector<int> S(n);
    int l, r;
    for(int i=0; i<m; i++){
        cin >> l >> r;
        l--;
        r--;
        S[l]++;
        S[r+1]--;
    }

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

    for(int i=0; i<n; i++){
        if(S[i]%2==0){
            cout << s[i];
        }else{
            cout << t[i];
        }
    }
    cout << endl;

    return 0;
}

Discussion