🔵

【ABC431】AtCoder Beginner Contest 431【C++】

に公開

コンテスト名

トヨタシステムズプログラミングコンテスト2025(AtCoder Beginner Contest 431)

コンテストURL

https://atcoder.jp/contests/abc431

開催日

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


A: Robot Balance

解法

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

int main(){
    int h, b;
    cin >> h >> b;

    if(h>b){
        cout << h - b << endl;
    }else{
        cout << 0 << endl;
    }

    return 0;
}

B: Robot Weight

解法

  • 問題文通りにシミュレーションする
ABC431B.cpp
#include <iostream>
#include <vector>
using namespace std;

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

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

    int q;
    cin >> q;
    vector<int> P(n);
    int p;
    int sum = x;
    for(int i=0; i<q; i++){
        cin >> p;
        p--;

        if(P[p]==0){
            P[p] = 1;
            sum += W[p];
        }else if(P[p]==1){
            P[p] = 0;
            sum -= W[p];
        }

        cout << sum << '\n';
    }

    return 0;
}

C: Robot Factory

解法

  • 頭パーツの軽いほうから K 個、体パーツの重いほうから K 個を選び、それぞれを軽い順に組み合わせて判定する
ABC431C.cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

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

    vector<int> H(n), B(m);
    for(int i=0; i<n; i++){
        cin >> H[i];
    }
    for(int i=0; i<m; i++){
        cin >> B[i];
    }

    sort(H.begin(), H.end());
    sort(B.begin(), B.end());

    bool flag = true;
    for(int i=0; i<k; i++){
        if(H[i]>B[m-k+i]){
            flag = false;
            break;
        }
    }

    if(flag){
        cout << "Yes" << endl;
    }else{
        cout << "No" << endl; 
    }

    return 0;
}

Discussion