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 }

 

你可能感兴趣的:(HDU)