michimani.net

AtCoder Beginner Contest 041 の A/B/C 問題の解法 #ABC041

2024-02-27

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

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

A - 添字

A - 添字

s[i-1] を出力する。

#include <iostream>

using namespace std;
using ui = unsigned int;

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

  cout << s[i - 1] << endl;
  return 0;
}

提出 #50665005 - AtCoder Beginner Contest 041

B - 直方体

B - 直方体

\(A \times B \times C \) を計算してから余りを出そうとすると 64bit に収まらない可能性がある。余りを出すタイミングはいつでもよいので、 \(A, B, C\) のうち大きい 2 つの積を計算した時点で余りを出し、その値に \(C\) を掛けて最後にもう一度余りを出せばよい。

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;
using ull = unsigned long long;

int main()
{
  const ull d = 1000000007;

  vector<ull> abc(3, 0);
  for (auto &x : abc)
    cin >> x;
  sort(abc.rbegin(), abc.rend());

  cout << (((abc[0] * abc[1]) % d) * abc[2]) % d << endl;
  return 0;
}

提出 #50665180 - AtCoder Beginner Contest 041

C - 背の順

C - 背の順

生徒の出席番号と身長を pair<ui, ui> で記録し、身長の降順でソートしてから出席番号を出力する。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
using ui = unsigned int;

bool comp(pair<ui, ui> &l, pair<ui, ui> &r)
{
  return l.second < r.second;
}

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

  vector<pair<ui, ui>> sv(n);
  for (ui i = 0; i < n; i++)
  {
    ui a;
    cin >> a;
    sv[i] = {i + 1, a};
  }

  sort(sv.rbegin(), sv.rend(), comp);

  for (auto s : sv)
    cout << s.first << endl;

  return 0;
}

提出 #50670699 - AtCoder Beginner Contest 041


comments powered by Disqus