🔵
【ABC411】AtCoder Beginner Contest 411【C++】
コンテスト名
ユニークビジョンプログラミングコンテスト2025 夏(AtCoder Beginner Contest 411)
コンテストURL
開催日
2025/06/21 21:00–22:40
A: Required Length
解法
- 問題文通りに判定する
ABC411A.cpp
#include <iostream>
#include <string>
using namespace std;
int main(){
string p;
cin >> p;
int l;
cin >> l;
if(p.size()>=l){
cout << "Yes" << endl;
}else{
cout << "No" << endl;
}
return 0;
}
B: Distance Table
解法
- 累積和
ABC411B.cpp
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> D(n);
for(int i=0; i<n-1; i++){
cin >> D[i+1];
}
for(int i=0; i<n-1; i++){
D[i+1] += D[i];
}
for(int i=0; i<n; i++){
for(int j=i+1; j<n; j++){
if(j!=i+1){
cout << " ";
}
cout << D[j] - D[i];
}
cout << '\n';
}
return 0;
}
C: Black Intervals
解法
- 反転するマスの両隣のマスの色によって、黒く塗られたマスが連続している区間の個数の増減が決定する
ABC411C.cpp
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n, q;
cin >> n >> q;
int a;
int cnt = 0;
vector<int> V(n);
for(int i=0; i<q; i++){
cin >> a;
a--;
if(V[a]==0){
V[a] = 1;
if(n==1){
cnt++;
}else if(a==0){
if(V[a+1]==0){
cnt++;
}
}else if(a==n-1){
if(V[a-1]==0){
cnt++;
}
}else if(V[a-1]==0 && V[a+1]==0){
cnt++;
}else if(V[a-1]==1 && V[a+1]==1){
cnt--;
}
}else if(V[a]==1){
V[a] = 0;
if(n==1){
cnt--;
}else if(a==0){
if(V[a+1]==0){
cnt--;
}
}else if(a==n-1){
if(V[a-1]==0){
cnt--;
}
}else if(V[a-1]==0 && V[a+1]==0){
cnt--;
}else if(V[a-1]==1 && V[a+1]==1){
cnt++;
}
}
cout << cnt << '\n';
}
return 0;
}
D: Conflict 2
解法
- クエリを後ろから順に処理する
ABC411D.cpp
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <tuple>
using namespace std;
int main(){
int n, q;
cin >> n >> q;
int num, p;
string s;
vector<tuple<int, int, string>> V;
for(int i=0; i<q; i++){
cin >> num;
if(num==1){
cin >> p;
V.emplace_back(1, p, "NO");
}else if(num==2){
cin >> p >> s;
reverse(s.begin(), s.end());
V.emplace_back(2, p, s);
}else if(num==3){
cin >> p;
V.emplace_back(3, p, "NO");
}
}
string ans = "";
int idx = 0;
for(int i=q-1; i>=0; i--){
auto [num, p, s] = V[i];
if(num==1){
if(idx==p){
idx = 0;
}
}else if(num==2){
if(idx==p){
ans += s;
}
}else if(num==3){
if(idx==0){
idx = p;
}
}
}
reverse(ans.begin(), ans.end());
cout << ans << endl;
return 0;
}
Discussion