http://acm.pku.edu.cn/JudgeOnline/problem?id=3363这道题刚开始看懂题时,我是死活不敢动手,就是不相信就是这么做,后来用百度搜了搜这题,在一个博客上看到他对这题的想法,简单的模拟,我这才开始写,值得一提的是,这道题帮助我发现了个我不好的习惯,今天因为这个习惯,使两道题都tl,我总是在没读完数据,输出结果后,就经过一个fflush来刷干净缓冲,但是把结束条件也刷掉了,使程序断不了,导致tl。(这都多些partychen :-))
1#include<iostream>
2using namespace std;
3#define Max 100
4int 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 阅读(295)
评论(0) 编辑 收藏 引用 所属分类:
acm