🔵
【ABC436】AtCoder Beginner Contest 436【C++】
コンテスト名
AtCoder Beginner Contest 436
コンテストURL
開催日
2025/12/13 21:00–22:40
A: o-padding
解法
- 問題文通りに操作する
ABC436A.cpp
#include <iostream>
#include <string>
using namespace std;
int main(){
int n;
cin >> n;
string s;
cin >> s;
for(int i=0; i<n-s.size(); i++){
cout << 'o';
}
cout << s << endl;
return 0;
}
B: Magic Square
解法
- 問題文通りに操作する
ABC436B.cpp
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n;
cin >> n;
vector<vector<int>> G(n, vector<int>(n, -1));
G[0][(n-1)/2] = 1;
int r = 0, c = (n - 1) / 2, k = 1;
for(int i=0; i<n*n-1; i++){
if(G[(r-1+n)%n][(c+1)%n]==-1){
r = (r - 1 + n) % n;
c = (c + 1) % n;
}else{
r = (r + 1) % n;
}
G[r][c] = k + 1;
k = k + 1;
}
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(j){
cout << " ";
}
cout << G[i][j];
}
cout << '\n';
}
return 0;
}
C: 2x2 Placing
解法
-
set<pair<int, int>>にブロックが置かれているマスの位置を記録する
ABC436C.cpp
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main(){
int n, m;
cin >> n >> m;
set<pair<int, int>> S;
int r, c;
vector<int> dr = {0, 0, 1, 1}, dc = {0, 1, 0, 1};
int cnt = 0;
for(int i=0; i<m; i++){
cin >> r >> c;
bool flag = true;
for(int i=0; i<4; i++){
int nr = r + dr[i], nc = c + dc[i];
if(S.count(make_pair(nr, nc))){
flag = false;
break;
}
}
if(flag){
cnt++;
for(int i=0; i<4; i++){
int nr = r + dr[i], nc = c + dc[i];
S.emplace(nr, nc);
}
}
}
cout << cnt << endl;
return 0;
}
Discussion