0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AtCoder 勉強記録[C++] その61

Posted at

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

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の位置を入れる変数を用意する。それぞれにおいて、問題の条件が成り立つかを判定することで結果が求まる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?