Atcoder Beginner Contest 402

問題一覧

結果

AC:3,WA:3,CE:2,RE:1

レート変化:-25 656

それでは解説です

A問題

6:34 AC,WA:1

大文字の判定は,issupper関数を使います

#include <iostream>
#include <string>
using namespace std;

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

  for (char c : s)
  {
    if (isupper(c))
    {
      cout << c;
    }
  }

  cout << endl;
  return 0;
}

B問題

29:32 AC,WA:2

queueに入れて、取り出せばOKです。

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

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

  queue q;
  for (int i = 0; i < a; i++)
  {
    int op;
    cin >> op;

    if (op == 1)
    {
      int m;
      cin >> m;
      q.push(m);
    }
    else if (op == 2)
    {
      if (!q.empty())
      {
        cout << q.front() << endl;
        q.pop();
      }
    }
  }

  return 0;
}

C問題

96:54 AC,WA:1

嫌いなものの個数を数えます。

#include <bits/stdc++.h>
using namespace std;
int main()
{
  int a, b;
  cin >> a >> b;
  unordered_map<int, vector<int>> id_to_event;

  int n, m;
  for (int i = 0; i < b; i++)
  {
    cin >> n;
    for (int j = 0; j < n; j++)
    {
      cin >> m;
      id_to_event[m].push_back(i);
    }
  }

  vector bat(a);
  vector last_seen_event(b, 0);
  vector day(a + 1, 0);

  for (int i = 0; i < a; i++)
  {
    cin >> bat[i];
    if (id_to_event.count(bat[i]))
    {
      for (int j : id_to_event[bat[i]])
      {
        last_seen_event[j] = i;
      }
    }
  }
  for (int i = 0; i < b; i++)
  {
    day[last_seen_event[i]]++;
  }

  int cnt = 0;
  for (int i = 0; i < a; i++)
  {
    cout << cnt + day[i] << endl;
    cnt += day[i];
  }

  return 0;
}

D問題

コンテスト中は書き終わりませんでした、が5分で解けます(A問題より簡単です)。

全ての直線の組み合わせnP2から平行な直線全ての組み合わせを引けばよいです。

平行な直線はmodで判定できます。

#include <bits/stdc++.h>
using namespace std;
int main()
{
  int a, b;
  cin >> a >> b;
  vector Line(a, 0);
  int n, m;
  for (int i = 0; i < b; i++)
  {
    cin >> n >> m;
    Line[(n + m) % a]++;
  }
  long long cnt = (long long)b * (b - 1) / 2;
  for (auto i : Line)
  {
    cnt -= i * (i - 1) / 2;
  }
  cout << cnt << endl;
  return 0;
}

反省

PCの充電がなくなり3回ほどシャットダウンされてしまいました。

そのため、スマホのターミナルで解こうとしましたがことごとく失敗しました。

また、D問題から解くべきでした。

過去問のC埋めを続けて行きます。

2025/04/19