Official
F - NewFolder(1) Editorial
by
F - NewFolder(1) Editorial
by
kyopro_friends
\(L=10\) を文字列長の最大値とします。
問題文中の指示通りに毎回文字列を探すと、\(\Omega(N^2)\)の時間がかかりTLEしてしまいます。
連想配列を用いて、「いままでに \(S_i\) と同じ文字列を入力として何度受け取ったか」を覚えておくことで、\(1\) つあたり \(O(L\log N)\) 時間で出力すべき文字列を求めることができ、全体で \(O(NL\log N)\) 時間で問題を解くことができます。
実装例(C++)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
map<string,int>cnt;
for(int i=0;i<n;i++){
string s;
cin >> s;
if(cnt[s]==0)cout << s << endl;
else cout << s << "(" << cnt[s] << ")" << endl;
cnt[s]++;
}
}
posted:
last update: