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. ...
随机推荐
- css扁平化博客学习总结(三)header代码实现
页头.banner.正文.页脚的宏观布局 1.布局顺序的重要性: 由大到小,着眼最大的部分,慢慢细分. <body> <header><!-- 页头开始 --> & ...
- VBA文件处理
Option Explicit ' ▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽ ' Excel对象 ' △△△△△△△△△△△△△△△△△△ ' Open Public Function FileOpen_ ...
- c#转义字符串中的所有正则特殊字符
/// <summary> /// 转义字符串中所有正则特殊字符 /// </summary> /// <param name="input"> ...
- C#:在catch中return,会执行finally吗?
本文转自 vipxiaotian(CSDN) 请参考下面一段简单的语句块: 1: try2: {3: throw new Exception("new exception&qu ...
- props验证
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Nwjs从入门到精通 菜鸟实践笔记【1】
最近公司有想使用Nw来开发浏览器的想法,自己一直学的PHP,在网上并没有找到太多的相关资料,所以,就自己摸索着撸一条自学笔记: 当然呢,这里记录的都是我自己学习中遇到的问题,以及收获,希望通过自己的分 ...
- yii2 用gii生成后台模块 view path描述
view path 格式: @backend/views/refund , 注意@和/
- php 加密解密方法
<?php//可用于加密解密,如cookie,账号,手机号 as so on class DES { var $key; var $iv; //偏移量 function __construct( ...
- C#关于编码、解码相关问题
编码.解码技术是我们在程序中开发中经常使用到的,对一些敏感信息的存储,比如密码之类的,我们一般是不会直接以明文直接存储到数据库的,而是会通过各种算法,可以是现成的MD5(一种散列算法).或者是Hash ...
- MEF学习笔记
之前公司里用到了一个叫MEF的东西,说来惭愧一直只管写代码却不曾理解MEF框架为何物,今天就来学习一下,这是一篇迟到了不知多久的博客. -------------------------------- ...