HDU3368+枚举

题意看不懂的直接看百度百科对黑白棋的解释。。。

做法:分情况讨论,一共8个方向。

HDU3368+枚举
HDU3368+枚举
  1 /*
  2 搜索
  3 */
  4 #include<stdio.h>
  5 #include<string.h>
  6 const int maxn = 10;
  7 char mat[ maxn ][ maxn ];
  8 const int dx[]={-1,1,-1,1};
  9 const int dy[]={1,-1,-1,1};
 10 
 11 int max( int a,int b ){
 12     return a>b?a:b;
 13 }
 14 
 15 bool in( int x,int y ){
 16     if( x>=1&&x<=8&&y>=1&&y<=8 ) return true;
 17     else return false;
 18 }
 19 
 20 int solve( int x,int y ){
 21     int ans = 0;
 22     int pos;
 23 
 24     pos = -1;
 25     for( int i=y+1;i<=8;i++ ){
 26         if( mat[x][i]=='D' ){
 27             pos = i;
 28             break;
 29         }
 30     }
 31     if( pos!=-1 ){
 32         for( int i=y+1;i<=pos;i++ ){
 33             if( mat[x][i]=='*' ){
 34                 pos = -1;
 35                 break;
 36             }
 37         }
 38     }
 39     if( pos!=-1 ){
 40         for( int i=y+1;i<=pos;i++ ){
 41             if( mat[x][i]=='L' )
 42                 ans++;
 43         }
 44     }
 45     //right
 46     pos = -1;
 47     for( int i=y-1;i>=1;i-- ){
 48         if( mat[x][i]=='D' ){
 49             pos = i;
 50             break;
 51         }
 52     }
 53     if( pos!=-1 ){
 54         for( int i=y-1;i>=pos;i-- ){
 55             if( mat[x][i]=='*' ){
 56                 pos = -1;
 57                 break;
 58             }
 59         }
 60     }
 61     if( pos!=-1 ){
 62         for( int i=y-1;i>=pos;i-- ){
 63             if( mat[x][i]=='L' )
 64                 ans++;
 65         }
 66     }
 67     //left
 68     pos = -1;
 69     for( int i=x+1;i<=8;i++ ){
 70         if( mat[i][y]=='D' ){
 71             pos = i;
 72             break;
 73         }
 74     }
 75     if( pos!=-1 ){
 76         for( int i=x+1;i<=pos;i++ ){
 77             if( mat[i][y]=='*' ){
 78                 pos = -1;
 79                 break;
 80             }
 81         }
 82     }
 83     if( pos!=-1 ){
 84         for( int i=x+1;i<=pos;i++ ){
 85             if( mat[i][y]=='L' )
 86                 ans++;
 87         }
 88     }
 89     //down
 90     pos = -1;
 91     for( int i=x-1;i>=1;i-- ){
 92         if( mat[i][y]=='D' ){
 93             pos = i;
 94             break;
 95         }
 96     }
 97     if( pos!=-1 ){
 98         for( int i=x-1;i>=pos;i-- ){
 99             if( mat[i][y]=='*' ){
100                 pos = -1;
101                 break;
102             }
103         }
104     }
105     if( pos!=-1 ){
106         for( int i=x-1;i>=pos;i-- ){
107             if( mat[i][y]=='L' )
108                 ans++;
109         }
110     }
     //up
112     int posx,posy;
113     int K;
114     posx = -1;
115     for( int k=1;k<=8;k++ ){
116         int tx = x+k*dx[0];
117         int ty = y+k*dy[0];
118         if( in(tx,ty)==false ) break;
119         if( mat[tx][ty]=='D' ){
120             posx = tx;
121             posy = ty;
122             K = k;
123             break;
124         }
125     }
126     if( posx!=-1 ){
127         for( int k=1;k<=K;k++ ){
128             int tx = x+k*dx[0];
129             int ty = y+k*dy[0];
130             if( in(tx,ty)==false ) break;
131             if( mat[tx][ty]=='*' ){
132                 posx = -1;
133                 break;
134             }
135         }
136     }
137     if( posx!=-1 ){
138         for( int k=1;k<=K;k++ ){
139             int tx = x+k*dx[0];
140             int ty = y+k*dy[0];
141             if( in(tx,ty)==false ) break;
142             if( mat[tx][ty]=='L' )
143                 ans++;
144         }
145     }
146     //right && up
147     posx = -1;
148     for( int k=1;k<=8;k++ ){
149         int tx = x+k*dx[1];
150         int ty = y+k*dy[1];
151         if( in(tx,ty)==false ) break;
152         if( mat[tx][ty]=='D' ){
153             posx = tx;
154             posy = ty;
155             K = k;
156             break;
157         }
158     }
159     if( posx!=-1 ){
160         for( int k=1;k<=K;k++ ){
161             int tx = x+k*dx[1];
162             int ty = y+k*dy[1];
163             if( in(tx,ty)==false ) break;
164             if( mat[tx][ty]=='*' ){
165                 posx = -1;
166                 break;
167             }
168         }
169     }
170     if( posx!=-1 ){
171         for( int k=1;k<=K;k++ ){
172             int tx = x+k*dx[1];
173             int ty = y+k*dy[1];
174             if( in(tx,ty)==false ) break;
175             if( mat[tx][ty]=='L' )
176                 ans++;
177         }
178     }
179     //left && down
180     posx = -1;
181     for( int k=1;k<=8;k++ ){
182         int tx = x+k*dx[2];
183         int ty = y+k*dy[2];
184         if( in(tx,ty)==false ) break;
185         if( mat[tx][ty]=='D' ){
186             posx = tx;
187             posy = ty;
188             K = k;
189             break;
190         }
191     }
192     if( posx!=-1 ){
193         for( int k=1;k<=K;k++ ){
194             int tx = x+k*dx[2];
195             int ty = y+k*dy[2];
196             if( in(tx,ty)==false ) break;
197             if( mat[tx][ty]=='*' ){
198                 posx = -1;
199                 break;
200             }
201         }
202     }
203     if( posx!=-1 ){
204         for( int k=1;k<=K;k++ ){
205             int tx = x+k*dx[2];
206             int ty = y+k*dy[2];
207             if( in(tx,ty)==false ) break;
208             if( mat[tx][ty]=='L' )
209                 ans++;
210         }
211     }
212     //left &&up
213     posx = -1;
214     for( int k=1;k<=8;k++ ){
215         int tx = x+k*dx[3];
216         int ty = y+k*dy[3];
217         if( in(tx,ty)==false ) break;
218         if( mat[tx][ty]=='D' ){
219             posx = tx;
220             posy = ty;
221             K = k;
             break;
223         }
224     }
225     if( posx!=-1 ){
226         for( int k=1;k<=K;k++ ){
227             int tx = x+k*dx[3];
228             int ty = y+k*dy[3];
229             if( in(tx,ty)==false ) break;
230             if( mat[tx][ty]=='*' ){
231                 posx = -1;
232                 break;
233             }
234         }
235     }
236     if( posx!=-1 ){
237         for( int k=1;k<=K;k++ ){
238             int tx = x+k*dx[3];
239             int ty = y+k*dy[3];
240             if( in(tx,ty)==false ) break;
241             if( mat[tx][ty]=='L' )
242                 ans++;
243         }
244     }
245     //right && down
246 
247     return ans;
248 }
249 
250 int main(){
251     int T;
252     scanf("%d",&T);
253     int ca = 1;
254     while( T-- ){
255         for( int i=1;i<=8;i++ ){
256             scanf("%s",mat[i]+1);
257         }
258         //memset( vis,false,sizeof( vis ) );
259         int ans = 0;
260         for( int i=1;i<=8;i++ ){
261             for( int j=1;j<=8;j++ ){
262                 if( mat[i][j]=='*' ){
263                     ans = max( ans,solve( i,j ) );
264                     //if( ans>0 ) printf("attention:%d %d \n",i,j);
265                 }
266             }
267         }
268         printf("Case %d: %d\n",ca++,ans);
269     }
270     return 0;
271 }
View Code

 

更多相关文章
  • Swift 2.0学习笔记(Day 24)——枚举
    原创文章,欢迎转载.转载请注明:关东升的博客    Swift中的枚举可以定义一组常量.提高程序的可读性:还具有面向对象特性. 使用enum关键词声明枚举类型,具体定义放在一对大括号内,枚举的语法格式如下: enum 枚举名 {      枚举的定义 } “枚举名”是该枚举类型的名称.它首先应该是有 ...
  • 题意:求任意两点之间的距离的最少一个距离 思路:枚举一下就可以了 #include <iostream> #include<cstdio> #include<cmath> using namespace std; #define N 10010 struct no ...
  • 


    		    2.8 枚举(Enumerations)
    本页内容包含: 枚举语法(Enumeration Syntax) 匹配枚举值与Swith语句(Matching Enumeration Values with a Switch Statement) 相关值(Associated Values) 原始值(Raw Values) 枚举定义了一个通用类型 ...
  • 一 简单应用 package cn.xy.Enum; public enum TrafficLamp { RED,GREEN,YELLOW; } TrafficLamp red = TrafficLamp.RED; System.out.println(red); System.out.printl ...
  • acdream1421 TV Show (枚举)
    http://acdream.info/problem?pid=1421 Andrew Stankevich Contest 22 TV Show Special JudgeTime Limit: 2/1MS (Java/Others)Memory Limit: 128/64KB (Java/Oth ...
  • 


    		     输出枚举类型的值(seqmentation fault)
    vim enum.c gcc -DD enum.c ./a.out 编译后发现执行到 24 行报错. 添加代码用于输出枚举值: 本文出自 "小崔的实验笔记" 博客,谢绝转载!
  • 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 分析:实质上是求(a,b,c)勾股数的个数,其中c是确定的. 对于勾股数有一组通式: a=m^2-n^2 b=2mn c=m^2+n^2 对于上面3个式子有3个约束: ①gcd(a,b,c ...
  • Fiber Communications Time Limit: 1MS   Memory Limit: 30K Total Submissions: 3804   Accepted: 1160 Description Farmer John wants to connect his N (1 &l ...
一周排行