michimani.net

AtCoder Beginner Contest 043 の A/B/C 問題の解法 #ABC043

2024-01-23

AtCoder Beginner Contest 043 の A/B/C 問題の解法。

実装はこちら atcoder/abc/001-100/043 · michimani/atcoder

A - キャンディーとN人の子供イージー

A - キャンディーとN人の子供イージー

\(1\) から \(N\) までの和なので \(\frac{N(N+1)}{2}\) を出力する。

#include <iostream>

using namespace std;

int main()
{
  int n;
  cin >> n;

  cout << n * (1 + n) / 2 << endl;
  return 0;
}

提出 #49598285 - AtCoder Beginner Contest 043

B - バイナリハックイージー

\(s\) を先頭から一文字ずつ見ていき、次の操作を行う。

最後に配列の要素を順に出力する。

#include <iostream>
#include <vector>

using namespace std;

int main()
{
  string s;
  cin >> s;

  vector<char> S;
  for (auto k : s)
  {
    switch (k)
    {
    case '0':
    case '1':
      S.push_back(k);
      break;
    case 'B':
      if (S.size() > 0)
      {
        S.pop_back();
      }
      break;

    default:
      // noop
      break;
    }
  }

  for (auto c : S)
  {
    cout << c;
  }
  cout << endl;

  return 0;
}

提出 #49595076 - AtCoder Beginner Contest 043

C - いっしょ

いっしょ

\(\min a_i \leq t \leq \max a_i (1\leq i \leq N)\) となる各 \(t\) について、 \(\sum_{i=1}^{N} (a_i - t)^2\) を計算し、その最小値を出力する。

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;
using ui = unsigned int;
using ul = unsigned long;

int main()
{
  ui n;
  cin >> n;

  vector<int> a(n);
  int mn = 101;
  int mx = -101;
  for (ui i = 0; i < n; i++)
  {
    cin >> a[i];
    mn = min(mn, a[i]);
    mx = max(mx, a[i]);
  }

  ul ans = 0;
  for (int t = mn; t <= mx; t++)
  {
    ul c = 0;
    for (auto aa : a)
    {
      c += ul(pow(abs(aa - t), 2));
    }

    ans = ans == 0 ? c : min(ans, c);
  }

  cout << ans << endl;
  return 0;
}

提出 #49608069 - AtCoder Beginner Contest 043


comments powered by Disqus