题目描述
农夫John有N(2<=N<=50)头不同的奶牛,他想要知道,哪两头奶牛看起来最相似,所以他给每头奶牛拍了5行7列的数码相片,他想要你写一个程序帮助他. 5行7列的数码相片可以分别出奶牛身上黑色和白色的斑块,下面是两头奶牛的数码照片(‘X’表示黑色部分,’.'表示白色部分).
奶牛 1 奶牛 2
…X… …X…
.XXX… …XX…
.XX… .XX…
…X. .XX…X.
.X…X. .X…X.
要比较这两头奶牛,照片上的每一部分都必须仔细检查.每一个小块将有一个"相似性的得分".上面的那两头奶牛可以得到30分,因为他们只有5个地方不一样(详见下面的图中的"#").
++##+++
+#+++++
+++++++
+##++++
+++++++
现在给你一群奶牛的照片,你的任务就是找出"相似性得分"最高的那一对奶牛,并输出他们的编号(小的在前,大的在后)…
输入样例
3
…X…
.XXX…
.XX…
…X.
.X…X.
…X…
…XX…
.XX…
.XX…X.
.X…X.
XX…
X…
XX…XX
XXXX.XX
XXX…XX
输出样例
1 2
代码
#include <iostream>
using namespace std;
char a[55][5][7];
int main()
{
int n;
cin >> n;
for(int i=0;i<n;i++)
for(int j=0;j<5;j++)
for(int k=0;k<7;k++) cin >> a[i][j][k];
int max=-1,i1,i2;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
int cnt=0;
for(int x=0;x<5;x++)
{
for(int y=0;y<7;y++)
{
if(a[i][x][y]==a[j][x][y]) cnt++;
}
}
if(cnt>max)
{
max=cnt;
i1=i;
i2=j;
}
}
}
cout << i1+1 << ' ' << i2+1;
}