🔵
【ABC419】AtCoder Beginner Contest 419【C++】
コンテスト名
AtCoder Beginner Contest 419
コンテストURL
開催日
2025/08/16 21:00–22:40
A: AtCoder Language
解法
- 問題文通りに判定する
ABC419A.cpp
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
cin >> s;
if(s=="red"){
cout << "SSS" << endl;
}else if(s=="blue"){
cout << "FFF" << endl;
}else if(s=="green"){
cout << "MMM" << endl;
}else{
cout << "Unknown" << endl;
}
return 0;
}
B: Get Min
解法
-
priority_queue<int, vector<int>, greater<int>>でボールを管理する
ABC419B.cpp
#include <iostream>
#include <queue>
using namespace std;
int main(){
int q;
cin >> q;
priority_queue<int, vector<int>, greater<int>> Q;
int num, x;
while(q--){
cin >> num;
if(num==1){
cin >> x;
Q.push(x);
}else if(num==2){
cout << Q.top() << '\n';
Q.pop();
}
}
return 0;
}
C: King's Summit
解法
- 縦・横について、それぞれ最小値と最大値の中間のマスに集まるのが最適である
ABC419C.cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> R(n), C(n);
int minr = 1e9, minc = 1e9, maxr = 0, maxc = 0;
for(int i=0; i<n; i++){
cin >> R[i] >> C[i];
minr = min(minr, R[i]);
minc = min(minc, C[i]);
maxr = max(maxr, R[i]);
maxc = max(maxc, C[i]);
}
int midr = (minr+maxr)/2, midc = (minc+maxc)/2;
int maxv = 0;
for(int i=0; i<n; i++){
maxv = max(maxv, max(abs(R[i]-midr), abs(C[i]-midc)));
}
cout << maxv << endl;
return 0;
}
D: Substr Swap
解法
- いもす法
- 入れ替える操作の回数の偶奇に着目する
ABC419D.cpp
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n, m;
cin >> n >> m;
string s, t;
cin >> s >> t;
vector<int> S(n);
int l, r;
for(int i=0; i<m; i++){
cin >> l >> r;
l--;
r--;
S[l]++;
S[r+1]--;
}
for(int i=0; i<n-1; i++){
S[i+1] += S[i];
}
for(int i=0; i<n; i++){
if(S[i]%2==0){
cout << s[i];
}else{
cout << t[i];
}
}
cout << endl;
return 0;
}
Discussion