AtCoder Beginner Contest 137 #ABC137
2023-12-18AtCoder Beginner Contest 137 の A/B/C 問題の解説。
実装はこちら atcoder/abc/101-200/137 · michimani/atcoder 。
A - +-x
特筆する点はなし。
提出 #48625713 - AtCoder Beginner Contest 137
B - One Clue
特筆する点はなし。黒が確定している座標を含める形で前後に \(K\) ずらした範囲が答えなので、 \([X - (K-1), X + (K-1)]\) の値を出力する。
#include <iostream>
using namespace std;
int main()
{
int k, x;
cin >> k >> x;
int cnt = 0;
for (int i = x - (k - 1); i <= x + (k - 1); i++)
{
if (cnt > 0)
{
cout << " ";
}
cout << i;
cnt++;
}
cout << endl;
return 0;
}
提出 #48625637 - AtCoder Beginner Contest 137
C - Green Bin
入力された各文字列をソートして、ソートした文字列をキーとして、 map<string, unsigned long long>
に登録し、値をインクリメントする。
この値は同一の文字列が出現した回数なので、そこから 2 つを選ぶ組み合わせ、つまり \( {}_n C_2 \) の合計値を出せば良い。
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
unsigned long long nc2(unsigned long long n)
{
return (n * (n - 1)) / 2;
}
int main()
{
unsigned int n;
cin >> n;
map<string, unsigned long long> s_cnt;
for (unsigned int i = 0; i < n; i++)
{
string s;
cin >> s;
sort(s.begin(), s.end());
s_cnt[s]++;
}
unsigned long long ans = 0;
auto iter = s_cnt.begin();
while (iter != s_cnt.end())
{
ans += nc2(iter->second);
iter++;
}
cout << ans << endl;
return 0;
}
提出 #48625194 - AtCoder Beginner Contest 137
comments powered by Disqus