Asa's Blog

ABC211

Tags: AtCoder  ABC  Competitive-Programming 

Published on 2021.07.24. Last Modified on 2021.07.24.

今回は 3 完。D 解けそうだったのに解けず、かなり悔しい。

問題概要

A

$C = \frac{A-B}{3} +B$を求める

B

$S_{1~4}$の中にH, 2B, 3B, HRが 1 つずつあるかチェック

C

文字列の中から 8 文字選んで、左からchokudaiとする方法は何通りか

ちなみに D

都市 1 から都市 N まで、最短で移動できる経路は何通りか

提出

全体の提出:a01sa01to の提出 - AtCoder Beginner Contest 211

A

提出 #24478580 - AtCoder Beginner Contest 211

double 型でそのまま出力。

#include <atcoder/all>
using namespace std;

int main() {
  cout << fixed << setprecision(15);
  double a, b;
  cin >> a >> b;
  cout << b + (a - b) / 3 << endl;
  return 0;
}

提出時刻は 21:00:47。1 分以内で解けたのは ABC205 以来。わーい

B

提出 #24485829 - AtCoder Beginner Contest 211

4 次元の bool 配列を用意して、それぞれがあれば true にする。そのあと、false が含まれていればNo

#include <bits/stdc++.h>
using namespace std;

void chk(vector<bool> &t, string s) {
  if (s == "H") { t[0] = true; }
  if (s == "2B") { t[1] = true; }
  if (s == "3B") { t[2] = true; }
  if (s == "HR") { t[3] = true; }
}

int main() {
  string s1, s2, s3, s4;
  cin >> s1 >> s2 >> s3 >> s4;
  vector<bool> t(4, false);
  chk(t, s1);
  chk(t, s2);
  chk(t, s3);
  chk(t, s4);
  bool ans = t[0] && t[1] && t[2] && t[3];
  cout << (ans ? "Yes" : "No") << endl;
  return 0;
}

かなり汚いコードだけど、とりあえず提出時刻は 21:04:10。いつも通りな感じ。

C

提出 #24498688 - AtCoder Beginner Contest 211

ちょっと悩んで、chokudaiを右から場合の数をすればいいのでは?となった。

#include <atcoder/all>
#include <bits/stdc++.h>
using namespace std;
using namespace atcoder;

#define loop(i, n) for (ll i = 0; i < n; i++)

typedef modint1000000007 mint;

int main() {
  string s;
  cin >> s;
  vector<mint> a(8);
  loop(i, s.size()) {
    switch (s[s.size() - i - 1]) {
      case 'c':
        a[0] += a[1];
        break;
      case 'h':
        a[1] += a[2];
        break;
      case 'o':
        a[2] += a[3];
        break;
      case 'k':
        a[3] += a[4];
        break;
      case 'u':
        a[4] += a[5];
        break;
      case 'd':
        a[5] += a[6];
        break;
      case 'a':
        a[6] += a[7];
        break;
      case 'i':
        a[7]++;
        break;
    }
  }
  cout << a[0].val() << endl;
  return 0;
}

とりあえず場合の数的な考えです。解説見たら DP 使ってました。C 問題で DP とかまじかよ…

D

提出 #24507635 - AtCoder Beginner Contest 211

とりあえず DFS したら TLE 出ました。解説だと BFS 使うみたいです。学ばなければ…。

結果と感想

はい、かなりの微増です。

次回から 8 問体制になるらしいので、今後のレーティングがどうなってくるんだろう…?という感じですね。

Goodbye, 6問体制のABC...!

keyboard_arrow_up