AtCoder Beginner Contest 043 の A/B/C 問題の解法 #ABC043
2024-01-23AtCoder Beginner Contest 043 の A/B/C 問題の解法。
実装はこちら atcoder/abc/001-100/043 · michimani/atcoder
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\) を先頭から一文字ずつ見ていき、次の操作を行う。
0
または1
- その値を配列の末尾に追加する
2
- 配列の末尾の要素を削除する
最後に配列の要素を順に出力する。
#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