AtCoderで入茶を目指して勉強しています。
勉強を継続するために投稿を始めました。
もともとアカウントを作成していましたが、今年の4月から本格的に勉強を始めました。
一応自分用に解法を書いていますが雑です、自分で読み返して困ったら修正します。
私のアカウント
解いた問題
本日解いた問題
B - Bombs
B - Bombs
解答
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define mod 998244353
int main() {
ll r, c;
cin >> r >> c;
vector<vector<char>> b(r, vector<char>(c));
rep(i, r) rep(j, c) cin >> b[i][j];
for(int i = 0; i < r; i++){
for(int j = 0; j < c; j++){
if(b[i][j]!='.'&&b[i][j]!='#') {
ll tmp = b[i][j] - '0';
b[i][j] = '.';
for(int k = 0; k < r; k++){
for(int l = 0; l < c; l++){
if(b[k][l]!='#') continue;
else if(b[k][l]!='.') {
ll man = abs(i-k)+abs(j-l);
if(man <= tmp) b[k][l] = '.';
}
}
}
}
}
}
rep(i, r) {
rep(j, c) {
cout << b[i][j];
}
cout << endl;
}
}
解法
マス目すべてに対して数値であるかどうかを全探索を行い、その後、壁のマスがマンハッタン距離で数値以下であるかを全探索を行うことで結果が求まる。
B - Chessboar
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define mod 998244353
int main() {
vector<string> s(8);
rep(i, 8) cin >> s[i];
ll num = 8;
string res;
for(int i = 0; i < 8; i++){
for(int j = 0 ; j < 8; j++){
if(s[i][j]=='*') {
ll alp = 'a' + j - '0';
char tmp = alp + '0';
res.push_back(tmp);
tmp = num - i + '0';
res.push_back(tmp);
}
}
}
cout << res << endl;
}
解法
左から何マスか、下から何マスかを数えることで名前を求めることができる。
B - chess960
B - chess960
解答
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define mod 998244353
int main() {
string s;
cin >> s;
vector<ll> b, r;
ll k = 0;
for(int i = 0; i < 8; i++){
if(s[i]=='B') b.push_back(i+1);
if(s[i]=='K') k = i;
if(s[i]=='R') r.push_back(i);
}
if(b[0]%2==b[1]%2) cout << "No" << endl;
else if(r[0] > k || k > r[1]) cout << "No" << endl;
else cout << "Yes" << endl;
}
解法
文字列中の2つのB
の位置、K
の位置、2つのR
の位置を入れる変数を用意する。それぞれにおいて、問題の条件が成り立つかを判定することで結果が求まる。