ZOJ 2876 Phone list
ZOJ :: Problems :: Show Problem
問題
n個の文字列が与えられる。ある文字列が、もう一方の文字列のprefixになるような2つの文字列が存在するか判定する。
解法
O(n^2)の全探索だと間に合わない。sortして隣り合う文字列を調べるとo(nlogn)で判定できる。
コード
int main(){ int T,n; cin>>T; while(T--){ cin>>n; vector<string> nums(n); REP(i,n){ cin>>nums[i]; } bool ans = true; sort(nums.begin(),nums.end()); REP(i,n-1){ int j = i+1; if(nums[i].size() <= nums[j].size() && nums[i] == nums[j].substr(0,nums[i].size())){ ans = false; goto PRINT; } } PRINT: if(ans)cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }