はじめに
たなしょです。
今回のC問題は難しいですね。
問題文
https://atcoder.jp/contests/abc137/tasks/abc137_c
考え方
for (int i = 0; i < N; i++) { cin >> s[i]; sort(s[i].begin(), s[i].end()); }
文字列を入力したらその文字列を並び替える。
sort(s.begin(), s.end());
N個の配列に文字列を格納した後、配列をソートする。
for (int i = 1; i < N; i++) { if (s[i] == s[i - 1]) { cnt++; ans += cnt; } else { cnt = 0; } }
配列に格納されている文字列が一致する場合はcntを1つ追加して、
ansに足して代入する。
いざ実装
#include <iostream> #include <vector> #include <utility> #include <algorithm> #include <cstdlib> #include <string> typedef long long ll; using namespace std; int main() { int N; cin >> N; vector<string> s(N); for (int i = 0; i < N; i++) { cin >> s[i]; sort(s[i].begin(), s[i].end()); } sort(s.begin(), s.end()); ll ans = 0; int cnt = 0; for (int i = 1; i < N; i++) { if (s[i] == s[i - 1]) { cnt++; ans += cnt; } else { cnt = 0; } } cout << ans << endl; return 0; }
最後に
C問題難しすぎます。
最後まで読んでいただいてありがとうございました。 もしよろしければtwitterアカウント(@piklus100yen)もフォローしていただけると幸いです!