0
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?

【ABC428】AtCoder Beginner Contest 428【C++】

Posted at

コンテスト名

AtCoder Beginner Contest 428(Promotion of AtCoderJobs)

コンテストURL

開催日

2025/10/18 21:30–23:10


A: Grandma's Footsteps

解法

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

int main(){
    int s, a, b, x;
    cin >> s >> a >> b >> x;

    int acnt = 0, bcnt = 0, sum = 0;
    bool flag = true;
    while(x--){
        if(flag){
            acnt++;
            sum += s;
            if(acnt%a==0){
                flag = false;
            }
        }else{
            bcnt++;
            if(bcnt%b==0){
                flag = true;
            }
        }
    }

    cout << sum << endl;

    return 0;
}

B: Most Frequent Substrings

解法

  • map<string, int> で各部分文字列の出現回数を記録する
ABC428B.cpp
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <map>
using namespace std;

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

    string s;
    cin >> s;

    string t;
    map<string, int> M;
    for(int i=0; i<n-k+1; i++){
        t = s.substr(i, k);

        M[t]++;
    }

    vector<pair<int, string>> V;
    for(auto [t, cnt] : M){
        V.emplace_back(-cnt, t);
    }

    sort(V.begin(), V.end());
    int maxv = V[0].first;
    cout << -maxv << endl;
    for(int i=0; i<V.size(); i++){
        if(V[i].first!=maxv){
            break;
        }

        if(i){
            cout << " ";
        }

        cout << V[i].second;
    }
    cout << endl;

    return 0;
}

C: Brackets Stack Query

解法

  • ( を $1$ 、) を $-1$ とみなし、合計で判定する
ABC428C.cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

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

    int num;
    char c;
    vector<int> A{0}, B{0};
    while(q--){
        cin >> num;

        if(num==1){
            cin >> c;

            if(c=='('){
                A.push_back(A.back() + 1);
            }else if(c==')'){
                A.push_back(A.back() - 1);
            }

            B.push_back(min(B.back(), A.back()));
        }else if(num==2){
            A.pop_back();
            B.pop_back();
        }

        if(A.back()==0 && B.back()==0){
            cout << "Yes" << '\n';
        }else{
            cout << "No" << '\n';
        }
    }

    return 0;
}
0
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
0
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?