HDU3368+枚举
题意看不懂的直接看百度百科对黑白棋的解释。。。
做法:分情况讨论,一共8个方向。
/*
搜索
*/
#include<stdio.h>
#include<string.h>
const int maxn = ;
char mat[ maxn ][ maxn ];
const int dx[]={-,,-,};
const int dy[]={,-,-,}; int max( int a,int b ){
return a>b?a:b;
} bool in( int x,int y ){
if( x>=&&x<=&&y>=&&y<= ) return true;
else return false;
} int solve( int x,int y ){
int ans = ;
int pos; pos = -;
for( int i=y+;i<=;i++ ){
if( mat[x][i]=='D' ){
pos = i;
break;
}
}
if( pos!=- ){
for( int i=y+;i<=pos;i++ ){
if( mat[x][i]=='*' ){
pos = -;
break;
}
}
}
if( pos!=- ){
for( int i=y+;i<=pos;i++ ){
if( mat[x][i]=='L' )
ans++;
}
}
//right
pos = -;
for( int i=y-;i>=;i-- ){
if( mat[x][i]=='D' ){
pos = i;
break;
}
}
if( pos!=- ){
for( int i=y-;i>=pos;i-- ){
if( mat[x][i]=='*' ){
pos = -;
break;
}
}
}
if( pos!=- ){
for( int i=y-;i>=pos;i-- ){
if( mat[x][i]=='L' )
ans++;
}
}
//left
pos = -;
for( int i=x+;i<=;i++ ){
if( mat[i][y]=='D' ){
pos = i;
break;
}
}
if( pos!=- ){
for( int i=x+;i<=pos;i++ ){
if( mat[i][y]=='*' ){
pos = -;
break;
}
}
}
if( pos!=- ){
for( int i=x+;i<=pos;i++ ){
if( mat[i][y]=='L' )
ans++;
}
}
//down
pos = -;
for( int i=x-;i>=;i-- ){
if( mat[i][y]=='D' ){
pos = i;
break;
}
}
if( pos!=- ){
for( int i=x-;i>=pos;i-- ){
if( mat[i][y]=='*' ){
pos = -;
break;
}
}
}
if( pos!=- ){
for( int i=x-;i>=pos;i-- ){
if( mat[i][y]=='L' )
ans++;
}
}
//up
int posx,posy;
int K;
posx = -;
for( int k=;k<=;k++ ){
int tx = x+k*dx[];
int ty = y+k*dy[];
if( in(tx,ty)==false ) break;
if( mat[tx][ty]=='D' ){
posx = tx;
posy = ty;
K = k;
break;
}
}
if( posx!=- ){
for( int k=;k<=K;k++ ){
int tx = x+k*dx[];
int ty = y+k*dy[];
if( in(tx,ty)==false ) break;
if( mat[tx][ty]=='*' ){
posx = -;
break;
}
}
}
if( posx!=- ){
for( int k=;k<=K;k++ ){
int tx = x+k*dx[];
int ty = y+k*dy[];
if( in(tx,ty)==false ) break;
if( mat[tx][ty]=='L' )
ans++;
}
}
//right && up
posx = -;
for( int k=;k<=;k++ ){
int tx = x+k*dx[];
int ty = y+k*dy[];
if( in(tx,ty)==false ) break;
if( mat[tx][ty]=='D' ){
posx = tx;
posy = ty;
K = k;
break;
}
}
if( posx!=- ){
for( int k=;k<=K;k++ ){
int tx = x+k*dx[];
int ty = y+k*dy[];
if( in(tx,ty)==false ) break;
if( mat[tx][ty]=='*' ){
posx = -;
break;
}
}
}
if( posx!=- ){
for( int k=;k<=K;k++ ){
int tx = x+k*dx[];
int ty = y+k*dy[];
if( in(tx,ty)==false ) break;
if( mat[tx][ty]=='L' )
ans++;
}
}
//left && down
posx = -;
for( int k=;k<=;k++ ){
int tx = x+k*dx[];
int ty = y+k*dy[];
if( in(tx,ty)==false ) break;
if( mat[tx][ty]=='D' ){
posx = tx;
posy = ty;
K = k;
break;
}
}
if( posx!=- ){
for( int k=;k<=K;k++ ){
int tx = x+k*dx[];
int ty = y+k*dy[];
if( in(tx,ty)==false ) break;
if( mat[tx][ty]=='*' ){
posx = -;
break;
}
}
}
if( posx!=- ){
for( int k=;k<=K;k++ ){
int tx = x+k*dx[];
int ty = y+k*dy[];
if( in(tx,ty)==false ) break;
if( mat[tx][ty]=='L' )
ans++;
}
}
//left &&up
posx = -;
for( int k=;k<=;k++ ){
int tx = x+k*dx[];
int ty = y+k*dy[];
if( in(tx,ty)==false ) break;
if( mat[tx][ty]=='D' ){
posx = tx;
posy = ty;
K = k;
break;
}
}
if( posx!=- ){
for( int k=;k<=K;k++ ){
int tx = x+k*dx[];
int ty = y+k*dy[];
if( in(tx,ty)==false ) break;
if( mat[tx][ty]=='*' ){
posx = -;
break;
}
}
}
if( posx!=- ){
for( int k=;k<=K;k++ ){
int tx = x+k*dx[];
int ty = y+k*dy[];
if( in(tx,ty)==false ) break;
if( mat[tx][ty]=='L' )
ans++;
}
}
//right && down return ans;
} int main(){
int T;
scanf("%d",&T);
int ca = ;
while( T-- ){
for( int i=;i<=;i++ ){
scanf("%s",mat[i]+);
}
//memset( vis,false,sizeof( vis ) );
int ans = ;
for( int i=;i<=;i++ ){
for( int j=;j<=;j++ ){
if( mat[i][j]=='*' ){
ans = max( ans,solve( i,j ) );
//if( ans>0 ) printf("attention:%d %d \n",i,j);
}
}
}
printf("Case %d: %d\n",ca++,ans);
}
return ;
}
HDU3368+枚举的更多相关文章
- Swift enum(枚举)使用范例
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- 编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议88~92)
建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类" ...
- Objective-C枚举的几种定义方式与使用
假设我们需要表示网络连接状态,可以用下列枚举表示: enum CSConnectionState { CSConnectionStateDisconnected, CSConnectionStateC ...
- Help Hanzo (素数筛+区间枚举)
Help Hanzo 题意:求a~b间素数个数(1 ≤ a ≤ b < 231, b - a ≤ 100000). (全题在文末) 题解: a~b枚举必定TLE,普通打表MLE,真是头疼 ...
- 枚举:enum
枚举 所谓枚举就是指定好取值范围,所有内容只能从指定范围取得. 例如,想定义一个color类,他只能有RED,GREEN,BLUE三种植. 使用简单类完成颜色固定取值问题. 1,就是说,一个类只能完成 ...
- .NET 基础一步步一幕幕[方法、结构、枚举]
方法.结构.枚举 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值,写void 方法名:P ...
- Asp.Net 将枚举类型(enum)绑定到ListControl(DropDownList)控件
在开发过程中一些状态的表示使用到枚举类型,那么如何将枚举类型直接绑定到ListControl(DropDownList)是本次的主题,废话不多说了,直接代码: 首先看工具类代码: /// <su ...
- 用枚举enum替代int常量
枚举的好处: 1. 类型安全性 2.使用方便性 public class EnumDemo { enum Color{ RED(3),BLUE(5),BLACK(8),YELLOW(13),GREEN ...
- c#编程基础之枚举
枚举的意义就在于限制变量取值范围. 当可以确定的几种取值时才可以用. 如果输入一个字符串需要进行判断是否是我们需要的字符串时,则一般需要这样写: using System; using System. ...
随机推荐
- Ceph Newstore存储引擎介绍
在Ceph被越来越多地应用于各项存储业务过程中,其性能及调优策略也成为用户密切关注讨论的话题,影响性能表现关键因素之一即OSD存储引擎实现:Ceph基础组件RADOS是强一致.对象存储系统,其OSD底 ...
- .net在Controller里的方法添加[HttpGet]和[HttpPost]
前端用post过来,Controller就要用[HttpPost],前端用get,Controller就要用[HttpGet],或者不管前端用什么,Controller都不加这些. 前端用post $ ...
- Meteor错误:TypeError: Meteor.userId is not a function
问题描述: 浏览器console提示错误TypeError: Meteor.userId is not a function. 原因分析: 通过查看Meteor API文档,可知该函数由包accoun ...
- HW--字符串加解密
package t0817; import java.util.Scanner; public class StringEncrypt { public static void main(String ...
- WebClient.UploadValues Post中文乱码的解决方法
//using (System.Net.WebClient wc = new System.Net.WebClient()) //{ // wc.Encoding = Encoding.GetEnco ...
- DIV+CSS相对IE8的兼容问题
CSS技巧: 1.div的垂直居中问题 vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了.缺点是要控制内容 ...
- 在jsp中获取服务器端的时间
以前只知道在js中这样写:var date = new Date() : 但是这得到的是客户浏览器的时间,并不是服务器的时间. 当然可以通过在Java文件中添加属性,再在js中通过document.g ...
- C 语言 查找一个字符串2在字符串1中出现的次数
#include <stdio.h> #include <windows.h> int main() { ], b[]; char *temp; ; memset( a, ); ...
- 往xml中更新节点
/* System.out.println("2323"); DocumentBuilderFactory factory = DocumentBuilderFactory.new ...
- js实现克隆一个对象
var app={}; app.cloneobj= function(obj){ var o; if(typeof obj == "object"){ if(obj===null) ...