题意:求一个矩形类似于田字行,使得左边的上下两行的内容一样,右边的内容一样。暴力4个循环不可行,运用map,先行遍历再列遍历,运用map<pair<int,int>,int>
。具体看代码把。
#include <iostream>
#include <map>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;
const int Max =100000;
map<string,int> mp;
map<int,int> mp1;
map<pair<int,int>,int> sum;
int map_int[10010][100];
int main()
{
int n,m;
while (cin >> n >> m){
getchar();
char str[1000];
int num=0;
for(int i=0;i<n;i++)
{
gets(str);
string sstr;
int num1=0;
for(int z=0;;z++)
{
if(str[z]==','||str[z]=='\0')
{
if(!mp.count(sstr))
{
mp[sstr]=num;
map_int[i][num1]=num;
num1++;
num++;
}
else
{
map_int[i][num1]=mp[sstr];
num1++;
}
sstr.clear();
if(str[z]=='\0')
break;
}
else
{
sstr.push_back(str[z]);
}
}
}
/*for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
cout<<map_int[i][j]<<" ";
cout<<endl;
}
*/
int cont=0;
int row=0;
int col=0;
int cont1=0;
for(int i=0;i<m;i++)
{
if(cont1==1)
break;
for(int j=i+1;j<m;j++)
{
if(cont1==1)
break;
mp1.clear();
sum.clear();
for(int z=0;z<n;z++)
{
if(sum.count(make_pair(map_int[z][i],map_int[z][j])))
{
cont=1;
cout<<"NO"<<endl;
cout<<sum[make_pair(map_int[z][i],map_int[z][j])]<<" "<<z+1<<endl;
cout<<i+1<<" "<<j+1<<endl;
cont1=1;
break;
}
else
{
mp1[map_int[z][i]]=map_int[z][j];
sum[make_pair(map_int[z][i],map_int[z][j])]=z+1;
}
}
}
}
if(cont==0)
printf("YES\n");
}
return 0;
}