pku 3363

pku 3363
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 }

你可能感兴趣的:(pku 3363)