公式
		
			
				E - NewFolder(1) 解説
			
			by 
		
		
		
			
		
		
			
	
			
				E - NewFolder(1) 解説
			
			by  kyopro_friends
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]++;
	}
}
				投稿日時:
				
				
				最終更新:
				
			
