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?

【ABC409】AtCoder Beginner Contest 409【C++】

Posted at

コンテスト名

AtCoder Beginner Contest 409

コンテストURL

開催日

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


A: Conflict

解法

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

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

    string t, a;
    cin >> t >> a;

    for(int i=0; i<n; i++){
        if(t[i]=='o' && a[i]=='o'){
            cout << "Yes" << endl;
            return 0;
        }
    }

    cout << "No" << endl;
    return 0;
}

B: Citation

解法

  • 昇順にソートしてから、 $x$ が答えとなるには、 $A_{N-x+1}$ が $x$ 以上でなければならないことによって判定する
ABC409B.cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

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

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

    sort(A.begin(), A.end());
    for(int i=n; i>0; i--){
        if(A[n-i]>=i){
            cout << i << endl;
            return 0;
        }
    }

    cout << 0 << endl;

    return 0;
}

C: Equilateral Triangle

解法

  • $L$ が $3$ で割り切れないときは、正三角形をつくれない
  • 等間隔(差 $\frac{L}{3}$)で並ぶ $3$ 点の組み合わせの数を求める
  • 組み合わせを数えるとき、重複に注意する
ABC409C.cpp
#include <iostream>
#include <vector>
using namespace std;

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

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

    if(l%3!=0){
        cout << 0 << endl;
        return 0;
    }

    vector<int> V(n);
    vector<long long int> C(l);
    C[0]++;
    for(int i=0; i<n-1; i++){
        V[i+1] += V[i] + D[i];
        V[i+1] %= l;
        C[V[i+1]]++;
    }

    long long int cnt = 0;
    int l3 = l / 3;
    for(int i=0; i<l3; i++){
        cnt += C[i] * C[i+l3] * C[i+l3*2];
    }

    cout << cnt << endl;

    return 0;
}

D: String Rotation

解法

  • 文字列を左から見ていき、最初に $S_{i} > S_{i+1}$ となった位置で操作を実行するのが最適である
  • 最初に $S_{i} > S_{i+1}$ となったときの $S_{i}$ を、最初に $S_{i} < S_{j}$ となる位置に挿入する
    • このとき、 $l = i, \ r = j-1$
  • 計算量は $\mathrm{O}(N)$
ABC409D.cpp
#include <iostream>
#include <string>
using namespace std;

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

    while(t--){
        int n;
        cin >> n;

        string s;
        cin >> s;

        string ans = "";
        bool flag = true;
        int i;
        for(i=0; i<n-1; i++){
            if((s[i+1]-'a')<(s[i]-'a')){
                flag = false;
                
                int j;
                for(j=i+1; j<n; j++){
                    if((s[j]-'a')<=(s[i]-'a')){
                        ans.push_back(s[j]);
                    }else{
                        break;
                    }
                }

                ans.push_back(s[i]);

                for(int k=j; k<n; k++){
                    ans.push_back(s[k]);
                }

                break;
            }else{
                ans.push_back(s[i]);
            }
        }

        if(flag){
            ans.push_back(s.back());
        }

        cout << ans << '\n';
    }

    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?