🔵

【ABC417】AtCoder Beginner Contest 417【C++】

に公開

コンテスト名

AtCoder Beginner Contest 417

コンテストURL

https://atcoder.jp/contests/abc417

開催日

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


A: A Substring

解法

  • A+1 文字目から N-B 文字目までを出力する
ABC417A.cpp
#include <iostream>
#include <string>
using namespace std;

int main(){
    int n, a, b;
    cin >> n >> a >> b;
    
    string s;
    cin >> s;
    for(int i=a; i<n-b; i++){
        cout << s[i];
    }
    cout << endl;

    return 0;
}

B: Search and Delete

解法

  • 削除する要素を全探索して記録しておく
ABC417B.cpp
#include <iostream>
#include <vector>
using namespace std;

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

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

    int b;
    for(int i=0; i<m; i++){
        cin >> b;
        for(int j=0; j<n; j++){
            if(A[j]==b){
                A[j] = -1;
                break;
            }
        }
    }

    int cnt = 0;
    for(int i=0; i<n; i++){
        if(cnt){
            cout << " ";
        }

        if(A[i]!=-1){
            cout << A[i];
            cnt++;
        }
    }
    cout << endl;

    return 0;
}

C: Distance Indicators

解法

  • j - i = A_i + A_ji + A_i = j - A_j と移項し、 i + A_imap<int, int> に記録しておく
ABC417C.cpp
#include <iostream>
#include <vector>
#include <map>
using namespace std;

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

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

        if(M.count(i+1-A[i])){
            cnt += M[i+1-A[i]];
        }

        M[A[i]+i+1]++;
    }

    cout << cnt << endl;

    return 0;
}

Discussion