🔵
【ABC417】AtCoder Beginner Contest 417【C++】
コンテスト名
AtCoder Beginner Contest 417
コンテストURL
開催日
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_j と移項し、i + A_i = j - A_j をi + A_i map<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