https://cn.vjudge.net/problem/UVA-1592
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int maxr = 10000 + 5;
const int maxc = 10 + 5;
int n,m,cnt,id[maxr][maxc];
map<string,int> IDcache;
int ID(const string & s){
if(IDcache.count(s))return IDcache[s];
return IDcache[s]=++cnt;
}
void findAns(){
for(int c1=0;c1<m;c1++)
for(int c2=c1+1;c2<m;c2++){
map<PII,int> d;
for(int i=0;i<n;i++){
PII p=make_pair(id[i][c1],id[i][c2]);
if(d.count(p)){
puts("NO");
printf("%d %d\n",d[p]+1,i+1);
printf("%d %d\n",c1+1,c2+1);
return;
}
d[p]=i;
}
}
puts("YES");
}
int main() {
//freopen("datain.txt","r",stdin);
while(cin>>n>>m){
getchar(); cnt=0;
IDcache.clear();
string s;
for(int i=0;i<n;i++){
getline(cin,s);
int lastpos=0;
for(int j=0;j<m;j++){
int p=s.find(',',lastpos);
id[i][j]=ID(s.substr(lastpos,p-lastpos));
lastpos=p+1;
}
}
findAns();
}
}
usingnamespacestd; typedef pair<int,int> PII; constint maxr = 10000 + 5; constint maxc = 10 + 5; int n,m,cnt,id[maxr][maxc]; map<string,int> IDcache; int ID(const string & s){ if(IDcache.count(s))return IDcache[s]; return IDcache[s]=++cnt; } void findAns(){ for(int c1=0;c1<m;c1++) for(int c2=c1+1;c2<m;c2++){ map<PII,int> d; for(int i=0;i<n;i++){ PII p=make_pair(id[i][c1],id[i][c2]); if(d.count(p)){ puts("NO"); printf("%d %d\n",d[p]+1,i+1); printf("%d %d\n",c1+1,c2+1); return; } d[p]=i; } } puts("YES"); } int main() { //freopen("datain.txt","r",stdin);while(cin>>n>>m){ getchar(); cnt=0; IDcache.clear(); string s; for(int i=0;i<n;i++){ getline(cin,s); int lastpos=0; for(int j=0;j<m;j++){ int p=s.find(',',lastpos); id[i][j]=ID(s.substr(lastpos,p-lastpos)); lastpos=p+1; } } findAns(); } }