题目:http://codeforces.com/problemset/problem/7/A
第一次做这题时一阵瞎敲(当时题目的大意是一个粉刷匠粉刷墙壁,但是并不影响问题原型),啥也不懂。后来训练时又遇上了,思路清晰多了。在墙上刷一次无论是横着的还是竖着的都具有”贯穿性“,即连续8个点全是B。那么在8*8的墙上统计所有行中B的数量,最小的就是列的粉刷数。同理,列上最小的B的数量就是粉刷行数,result=r+c。 最后有一个特殊案例,如果全都刷上了那么就是8而不是16.
#include <iostream>
#include<cstdio>
using namespace std;
char s[8][10];
int main()
{
//freopen("cin.txt","r",stdin);
while(cin>>s[0]){
int i,j,ans1=8,ans2=8,ans;
for(i=1;i<8;i++){
scanf("%s",s[i]);
}
int a=0,b=0;
for(i=0;i<8;i++){
a=b=0;
for(j=0;j<8;j++){
if(s[i][j]=='B')a++;
if(s[j][i]=='B')b++;
}
ans1=min(ans1,a);
ans2=min(ans2,b);
}
ans=ans1+ans2;
if(ans1==8&&ans2==8)ans=8;
printf("%d\n",ans);
}
return 0;
}
啊,写完了才发现,没加头文件algorithm也能用min,这是怎么回事。。因为Win32头文件windef.h中,也定义了min和max?