Official

B - Same Name Editorial by penguinman


\(N\) の制約が \(1000\) 以下と小さいので、\(1 \leq i \lt j \leq N\) を満たすすべての整数対 \((i,j)\) について問題文中の条件を満たすか、すなわち \(S_i=S_j\) かつ \(T_i=T_j\) となっているかを判定すればよいです。

計算量は \(S_i\) の長さの総和を \(X\)\(T_i\) の長さの総和を \(Y\) として \(O(N(X+Y))\) となります。

実装例 (C++)

#include<bits/stdc++.h>
using namespace std;

int main(){
	int N; cin >> N;
	vector<string> S(N),T(N);
	string ans = "No";
	for(int i=0; i<N; i++){
		cin >> S[i] >> T[i];
		for(int j=0; j<i; j++){
			if(S[i]==S[j] && T[i]==T[j]) ans = "Yes";
		}
	}
	cout << ans << endl;
}

実装例 (Python)

N = int(input())
S = ['']*N
T = ['']*N
for i in range(N):
    S[i],T[i] = map(str,input().split())
ans = 'No'
for i in range(N):
    for j in range(i+1,N):
        if S[i]==S[j] and T[i]==T[j]:
            ans = 'Yes'
print(ans)

posted:
last update: