HDU 4121 Xiangqi(模拟+恶心)

题目链接

自己的代码能力太弱了啊,这个题有应该有两个方法,一个是直接判将所能走的点,是否存在被杀的可能,另一个就是先将红方可以 控制的点都找出来,然后再判断。

去年福州赛区的被板刷的题,我做了2-3天,错了10+,POJ,HDU上都交,开始的思路还清晰,后来瞎改的都不知道自己写的是什么了,今天那个有个群赛,我下了下决心,一定要BUG找出来,从网上找了代码,找数据,测了测也对啊,终于 在自己乱试的数据找到错误,一开始的思路是对的,只错了一点,结果越改,偏离的越多了,模拟题,一直是自己的短板,本来可以用2000B+解决的问题,我却写了6000B+,查错都非常困难。。。 在WA了后,一定要慎重修改,慎重提交。。。

   错误:1.变量打错,自己提交都不检查啊。。2.开始把将的位置p[x][y]也初始化为1,这个从侧面反映出当时没想清楚,导致的后果也非常严重。。。3.漏了N种情况啊,本来第二个错误开始的时候没有的,最后瞎改,越改越乱了。

  如果,今天那个群赛,没有这个题,我或许会等很久再去DEBUG,如果比赛遇到这种情况,我该怎么办,在知道算法正确,代码有错误时,自己总是不下个决心去找出错,或者在开始就把可能出现的问题给解决,不能总是没有提高。

  模拟题,更要把细节想清楚再去写代码。

  总之,多做,多敲模拟题,认真认真啊!!!!写之前先想想如何可以简单的实现,这份代码,除了马的部分,借鉴了以前做BFS的时候有简单的写法,其他的 整个代码我都觉着太失败了。

  1 #include<stdio.h>
  2 #include<string.h>
  3 int main()
  4 {
  5     int n,x,y,i,j,k,c,r,z,q;
  6     int ar[6] = {0,0,1,-1};
  7     int ac[6] = {1,-1,0,0};
  8     int hc[9] = {2,2,1,1,-2,-2,-1,-1};
  9     int hr[9] = {1,-1,2,-2,1,-1,2,-2};
 10     int hhc[9] = {1,1,0,0,-1,-1,0,0};
 11     int hhr[9] = {0,0,1,-1,0,0,1,-1};
 12     int p[17][17],key[17][17],sitc[10],sitr[10],se[10];
 13     char o[3];
 14     while(scanf("%d%d%d",&n,&x,&y)!=EOF)
 15     {
 16         z = 0;
 17         memset(p,0,sizeof(p));
 18         memset(key,0,sizeof(key));
 19         if(n == 0&&x == 0&&y == 0)
 20             break;
 21         for(i = 1; i <= n; i ++)
 22         {
 23             scanf("%s%d%d",o,&c,&r);
 24             if(o[0] == 'G')
 25             {
 26                 sitc[i] = c;
 27                 sitr[i] = r;
 28                 se[i] = 1;
 29             }
 30             else if(o[0] == 'R')
 31             {
 32                 sitc[i] = c;
 33                 sitr[i] = r;
 34                 se[i] = 2;
 35             }
 36             else if(o[0] == 'C')
 37             {
 38                 sitc[i] = c;
 39                 sitr[i] = r;
 40                 se[i] = 3;
 41             }
 42             else if(o[0] == 'H')
 43             {
 44                 sitc[i] = c;
 45                 sitr[i] = r;
 46                 se[i] = 4;
 47             }
 48             p[c][r] = 1;
 49         }
 50         for(i = 1; i <= n; i ++)
 51         {
 52             if(se[i] == 1)
 53             {
 54                 for(j = sitc[i]-1; j >= 1; j --)
 55                 {
 56                     if(p[j][sitr[i]] != 0)
 57                     {
 58                         key[j][sitr[i]] = 1;
 59                         break;
 60                     }
 61                     else
 62                         key[j][sitr[i]] = 1;
 63                 }
 64             }
 65             else if(se[i] == 2)
 66             {
 67                 for(j = sitc[i]-1; j >= 1; j --)
 68                 {
 69                     if(p[j][sitr[i]] != 0)
 70                     {
 71                         key[j][sitr[i]] = 1;
 72                          break;
 73                     }
 74                     else
 75                         key[j][sitr[i]] = 1;
 76                 }
 77                 for(j = sitc[i]+1; j <= 10; j ++)
 78                 {
 79                     if(p[j][sitr[i]] != 0)
 80                     {
 81                          key[j][sitr[i]] = 1;
 82                          break;
 83                     }
 84                     else
 85                         key[j][sitr[i]] = 1;
 86                 }
 87                 for(j = sitr[i]-1; j >= 1; j --)
 88                 {
 89                     if(p[sitc[i]][j] != 0)
 90                     {
 91                         key[sitc[i]][j] = 1;
 92                          break;
 93                     }
 94                     else
 95                         key[sitc[i]][j] = 1;
 96                 }
 97                 for(j = sitr[i]+1; j <= 10; j ++)
 98                 {
 99                     if(p[sitc[i]][j] != 0)
100                     {
101                          key[sitc[i]][j] = 1;
102                          break;
103                     }
104                     else
105                         key[sitc[i]][j] = 1;
106                 }
107             }
108             else if(se[i] == 3)
109             {
110                 z = 0;
111                 for(j = sitc[i]-1; j >= 1; j --)
112                 {
113                     if(p[j][sitr[i]] == 1)
114                     {
115                         z = 1;
116                         break;
117                     }
118                 }
119                 if(z)
120                 {
121                     for(k = j-1; k >= 1; k --)
122                     {
123                         if(p[k][sitr[i]] != 0)
124                         {
125                             key[k][sitr[i]] = 1;
126                              break;
127                         }
128                         else
129                             key[k][sitr[i]] = 1;
130                     }
131                 }
132                 z = 0;
133                 for(j = sitc[i]+1; j <= 10; j ++)
134                 {
135                     if(p[j][sitr[i]] == 1)
136                     {
137                         z = 1;
138                         break;
139                     }
140                 }
141                 if(z)
142                 {
143                     for(k = j+1; k <= 10; k ++)
144                     {
145                         if(p[k][sitr[i]] != 0)
146                         {
147                         key[k][sitr[i]] = 1;
148                          break;
149                         }
150                         else
151                             key[k][sitr[i]] = 1;
152                     }
153                 }
154                 z = 0;
155                 for(j = sitr[i]-1; j >= 1; j --)
156                 {
157                     if(p[sitc[i]][j] == 1)
158                     {
159                         z = 1;
160                         break;
161                     }
162                 }
163                 if(z)
164                 {
165                     for(k = j-1; k >= 1; k --)
166                     {
167                         if(p[sitc[i]][k] != 0)
168                         {
169                             key[sitc[i]][k] = 1;
170                              break;
171                         }
172                         else
173                             key[sitc[i]][k] = 1;
174                     }
175                 }
176                 z = 0;
177                 for(j = sitr[i]+1; j <= 10; j ++)
178                 {
179                     if(p[sitc[i]][j] == 1)
180                     {
181                         z = 1;
182                         break;
183                     }
184                 }
185                 if(z)
186                 {
187                     for(k = j+1; k <= 10; k ++)
188                     {
189                         if(p[sitc[i]][k] != 0)
190                         {
191                             key[sitc[i]][k] = 1;
192                              break;
193                         }
194                         else
195                             key[sitc[i]][k] = 1;
196                     }
197                 }
198             }
199             else if(se[i] == 4)
200             {
201                 for(j = 0; j <= 7; j ++)
202                 {
203                     if(sitc[i]+hc[j]>=1&&sitc[i]+hc[j]<=10&&sitr[i]+hr[j]>=1&&sitr[i]+hr[j]<=10)
204                     {
205                         if(p[sitc[i]+hhc[j]][sitr[i]+hhr[j]] == 0)
206                         {
207                             key[sitc[i] + hc[j]][sitr[i] +hr[j]] = 1;
208                         }
209                     }
210                 }
211             }
212         }
213         z = 0;
214         for(i = 0; i <= 3; i ++)
215         {
216             if(x+ac[i] >= 1 &&x+ac[i] <= 3 && y+ar[i] >= 4 &&y +ar[i] <= 6)
217             {
218                 if(key[x+ac[i]][y+ar[i]] == 0)
219                 {
220                     z = 1;
221                     break;
222                 }
223             }
224         }
225         if(z)
226         printf("NO\n");
227         else
228         printf("YES\n");
229     }
230     return 0;
231 }

 

posted @ 2012-06-23 20:43  Naix_x  阅读(283)  评论(0编辑  收藏  举报