http://acm.pku.edu.cn/JudgeOnline/problem?id=3363这道题刚开始看懂题时,我是死活不敢动手,就是不相信就是这么做,后来用百度搜了搜这题,在一个博客上看到他对这题的想法,简单的模拟,我这才开始写,值得一提的是,这道题帮助我发现了个我不好的习惯,今天因为这个习惯,使两道题都tl,我总是在没读完数据,输出结果后,就经过一个fflush来刷干净缓冲,但是把结束条件也刷掉了,使程序断不了,导致tl。(这都多些partychen :-))
1
#include<iostream>
2
using namespace std;
3
#define Max 100
4
int main()
5
{
6
int n,m,r,c,cont;
7
int i,j,p,q,t;
8
int map[Max][Max];
9
char row[Max];
10
while(scanf("%d%d%d%d",&n,&m,&r,&c)){
11
getchar();
12
memset(map,0,sizeof(map));
13
if(!n&&!m&&!r&&!c)break;
14
cont=0;
15
t=0;
16
for(i=0;i<n;i++){
17
gets(row);
18
for(j=0;j<m;j++){
19
if(map[i][j]!=row[j]-'0')
20
if(i+r<=n&&j+c<=m){
21
for(q=i;q<i+r;q++)
22
for(p=j;p<j+c;p++){
23
map[q][p]+=1;
24
map[q][p]%=2;}
25
cont++;}
26
else {t=1;break;}
27
}
28
if(t==1)break;
29
}
30
if(t==1){
31
while((++i)<n)gets(row);
32
printf("-1\n");}
33
else printf("%d\n",cont);
34
}
35
return 0;
36
}
posted on 2008-02-27 21:58
zoyi 阅读(313)
评论(0) 编辑 收藏 引用 所属分类:
acm