#include<iostream>
#include<string>
#include<list>
using namespace std;
class direction
{
public:
int x;
int y;
direction(int x,int y):x(x),y(y){}
bool operator<(direction &str2);
bool operator==(direction &str1);
};
bool direction::operator ==(direction &str1)
{
if(x==str1.x&&y==str1.y)
return true;
else return false;
}
bool direction::operator<(direction &str2)
{
if(x>str2.x) return false;
if(x<str2.x) return true;
if(x==str2.x)
{
if(y<str2.y) return true;
else return false;
}
}
class lost
{
string map[200];
string sur[3];
int row;
int col;
public:
int x;
int y;
list<direction> li;
lost(string str1[200],string sur1[3],int n,int m);
void matching();
void matching1();
};
lost::lost(string str1[200],string sur1[3],int n,int m)
{
for(int i=0;i<n;i++)
map[i]=str1[i];
sur[0]=sur1[0];
sur[1]=sur1[1];
sur[2]=sur1[2];
row=n;
col=m;
}
void lost::matching1()
{
for(int i=0;i<col;i++)
{
for(int j=row-1;j-2>=0;j--)
{
if(map[j][i]==sur[0][0]&&map[j-1][i]==sur[0][1]&&map[j-2][i]==sur[0][2]&&
map[j][i+1]==sur[1][0]&&map[j-1][i+1]==sur[1][1]&&map[j-2][i+1]==sur[1][2]&&
map[j][i+2]==sur[2][0]&&map[j-1][i+2]==sur[2][1]&&map[j-2][i+2]==sur[2][2]&&
i+2<col&&j-2>=0)
{
direction *dir=new direction(j,i+2);
li.push_back(*dir);
delete dir;
}
}
for(int j1=row-3;j1>=0;j1--)
{
if(map[j1][i]==sur[0][0]&&map[j1+1][i]==sur[0][1]&&map[j1+2][i]==sur[0][2]&&
map[j1][i-1]==sur[1][0]&&map[j1+1][i-1]==sur[1][1]&&map[j1+2][i-1]==sur[1][2]&&
map[j1][i-2]==sur[2][0]&&map[j1+1][i-2]==sur[2][1]&&map[j1+2][i-2]==sur[2][2]&&
i-2>=0&&j1+2<row)
{
direction *dir=new direction(j1+2,i);
li.push_back(*dir);
delete dir;
}
}
}
}
void lost::matching()
{
int size=col;
for(int k=0;k<row;k++)
{
for(int i=0;i<size;i++)
{
int i1=i;
int i2=i;
int j=0;
if(sur[0][0]==map[k][i1])
{
while(map[k][i1]==sur[0][j]&&j<3&&i1<size)
{
i1++;
j++;
}
if(j==3&&k+2<row)
{
if(map[k+1][i]==sur[1][0]&&map[k+1][i+1]==sur[1][1]&&map[k+1][i+2]==sur[1][2]&&
map[k+2][i]==sur[2][0]&&map[k+2][i+1]==sur[2][1]&&map[k+2][i+2]==sur[2][2])
{
direction *dir=new direction(k+2,i+2);
li.push_back(*dir);
delete dir;
}
}
j=0;
while(map[k][i2]==sur[0][j]&&j<3&&i2>=0)
{
i2--;
j++;
}
if(j==3&&k-2>=0)
{
if(map[k-1][i]==sur[1][0]&&map[k-1][i-1]==sur[1][1]&&map[k-1][i-2]==sur[1][2]&&
map[k-2][i]==sur[2][0]&&map[k-2][i-1]==sur[2][1]&&map[k-2][i-2]==sur[2][2])
{
direction *dir=new direction(k,i);
li.push_back(*dir);
delete dir;
}
}
}
}
}
}
void main()
{
int N,M;
string str[200];
string sur[3];
cin>>N>>M;
for(int i=0;i<N;i++)
cin>>str[i];
cin>>sur[0];
cin>>sur[1];
cin>>sur[2];
lost lo(str,sur,N,M);
lo.matching();
lo.matching1();
lo.li.unique();
lo.li.sort();
list<direction>::iterator cur=lo.li.begin();
while(cur!=lo.li.end())
{
cout<<cur->x<<" "<<cur->y<<endl;
cur++;
}
}
為什么我輸入這個程式會顯示 輸出結果大大超出正確答案
uj5u.com熱心網友回復:
請Debug下單步除錯一下看看,應該很容易找到出錯的地方~uj5u.com熱心網友回復:
我用VC除錯過,結果是正確的,可是在hiho coder提交后 就說 結果大大超出正確答案。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/153444.html
標籤:基礎類
