AtCoder Beginner Contest 041 の A/B/C 問題の解法 #ABC041
2024-02-27AtCoder Beginner Contest 041 の A/B/C 問題の解法。
実装はこちら atcoder/abc/001-100/041 · michimani/atcoder 。
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 - 直方体
\(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 - 背の順
生徒の出席番号と身長を 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