#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<string>
#include<map>
#include<set>
using namespace std;
typedef set<int> Set;
map<string,int> str_ID;//将输入的字符串处理成数字id
map<Set,int> mapID;//将行和列保存Set,然后在令key=set,value=行
int db[10010][15];
int main()
{
int n,m,firstAppear,nextAppear,id,yesOrNo;
string line,word;
while (cin>>n>>m)
{
getchar ();
yesOrNo=0;
id=0;
for (int i=0;i<n;i++){
string line;
getline (cin,line);
//cout<<line<<" ";
nextAppear=-1;
for (int j=0;j<m;j++){
string word;
firstAppear=nextAppear+1;
if (j<m-1)
nextAppear = line.find (',',firstAppear);
else
nextAppear = line.length ();
word.assign (line,firstAppear,nextAppear-firstAppear);
//printf ("(%d,%d)",firstAppear,nextAppear);
//cout<<word<<"-haha"<<endl;
if (str_ID.count (word)==0)
str_ID[word]=id++;
db[i][j]=str_ID[word];
}
}
/*for (int i=0;i<n;i++){
for (int j=0;j<m;j++)
printf ("%d ",db[i][j]);
printf ("\n");
}*/
for (int i=0;i<m && yesOrNo==0;i++)
for (int j=i+1;j<m && yesOrNo==0;j++){
mapID.clear ();
for (int k=0;k<n && yesOrNo==0;k++){
Set a;
a.insert (db[k][i]);
a.insert (db[k][j]);
if (mapID.count(a)==0)
mapID[a]=k;
else{
yesOrNo=1;
printf ("NO\n%d %d\n%d %d\n",mapID[a]+1,k+1,i+1,j+1);
}
}
}
str_ID.clear ();
if (yesOrNo==0)
printf ("YES\n");
}
return 0;
}
UVa1592 set和map去重 不知道为什么已知wrong
最新推荐文章于 2022-11-22 09:33:47 发布