hdu3368 dfs 下棋
两颗黑子之间的白子可以翻装成黑子,两颗白子之间的黑子可以翻转成白子,对于一个给定位置,有八个方向有翻转其他颜色的子的可能。规则之一是下棋的位置一定要能翻转对方的子。
求最优情况:黑子能翻转的白子个数的最大值。只要对有限的位置进行搜索就行,搜索8*8的位置,每个位置搜索八个方向,每个方向分别计算白子数量,直到遇到黑子,计算八个方向翻转
的白子的和,更新最大值。
下面两种代码稍有不同,当设置图的坐标为[1,8]*[1,8]时,边界可以不用管,当坐标是[0,7]*[0,7]时需要检查是否越界。
/*171ms 1376k*/
#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
char map[][];
int kase,t;
int sum;
int MAX;
int dir[][]{{,},{-,},{,},{,-},{,},{,-},{-,},{-,-}};
int dfs(int x,int y)
{
sum=;
int xx,yy;
for(int i=;i<;i++)
{
int num=;//每个搜索方向开始时翻转白子的数量都置零
xx=x+dir[i][];
yy=y+dir[i][];
while(map[xx][yy]=='L')
{
num++;
xx+=dir[i][];
yy+=dir[i][];
}
if(map[xx][yy]=='D')sum+=num;//八个方向翻转的白子总和
}
return sum;
}
int main()
{
scanf("%d",&t);
for(kase=;kase<=t;kase++)
{
int MAX=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
scanf(" %c",&map[i][j]);}//要根据全局地图来判断max,所以先保存map,不能边存边计算
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
if(map[i][j]=='*')
{
MAX=max(MAX,dfs(i,j));
}
}
printf("Case %d: %d\n",kase,MAX);
}
}
#include<bits/stdc++.h>
using namespace std;
typedef unsigned int ui;
typedef long long ll;
typedef unsigned long long ull;
#define pf printf
#define mem(a) memset(a,0,sizeof(a))
#define prime1 1e9+7
#define prime2 1e9+9
#define scand(x) scanf("%llf",&x)
#define f(i,a,b) for(int i=a;i<=b;i++)
#define scan(a) scanf("%d",&a)
#define dbg(args) cout<<#args<<":"<<args<<endl;
#define pb(i) push_back(i)
#define ppb(x) pop_back(x)
#define maxn 8
int n,m,t;
int Map[maxn][maxn];
int dir[][]={{,},{,-},{,},{-,},{,},{,-},{-,},{-,-}};
int dfs(int x,int y)
{
int cnt=;
int xx,yy;
f(i,,)
{
int tot=;
int xx=x+dir[i][];
int yy=y+dir[i][];
if(xx>=||xx<||yy<||yy>=)continue;
while((xx+dir[i][])<=&&(xx+dir[i][])>=&&(yy+dir[i][])<=&&(yy+dir[i][])>=&&Map[xx][yy]=='L')
{
tot++;
xx+=dir[i][];
yy+=dir[i][];
}
if(Map[xx][yy]=='D')cnt+=tot;
}
return cnt;
}
int ans;
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
std::ios::sync_with_stdio(false);
scan(n);
f(tt,,n)
{
ans=;
f(i,,)
f(j,,)
{
scanf(" %c",&Map[i][j]);
}
f(i,,)
f(j,,)
{
if(Map[i][j]=='*')
ans=max(ans,dfs(i,j));
}
pf("Case %d: %d\n",tt,ans);
}
}
hdu3368 dfs 下棋的更多相关文章
- hdu3368之DFS
Reversi Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Su ...
- 2019 深信服 下棋(DFS+回溯)
链接:https://www.nowcoder.com/questionTerminal/a0feb0696e2043a5b3b0779fa861b64a?f=discussion来源:牛客网 8x8 ...
- HDU 2553 N皇后问题【棋盘型DFS】
N皇后问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- CCF(棋局评估)博弈论+对抗搜索+DFS
201803-4 棋局评估 这题主要使用对抗搜索,也就是每一步寻找可以下棋的位置,通过在这一步下棋看最后会取的什么样的分数. #include<iostream> #include< ...
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1352 Solved: 780[Submit][Stat ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
随机推荐
- python爬取许多图片的代码
from bs4 import BeautifulSoup import requests import os os.makedirs('./img/', exist_ok=True) URL = & ...
- 干了这碗蛋炒饭 继续APP性能提升
[前言] 什么是做功能,功能就是客户要一碗蛋炒饭,然后做了给他. 我想谁都明白,一家餐厅能活下去,是因为能把食材料理好,客户喜欢. 更准确的说,一家餐厅能活得下去,要考虑用户需求.食材,然后就是料理水 ...
- json_encode在设计api时需要注意的问题
1. 在设计api时我们经常会使用关联数组,例如:我要返回给客户端主题信息和主题包列表 原始数组格式 $arr = array( 100=>array('themeName'=>'a',' ...
- [开源福利] Arithmetic Generator
Arithmetic Generator Built with ❤︎ by Simon Ma ✨ A powerful arithmetic generator
- win10下安装LoadRunner12汉化包
1.前提是已经下载LoadRunner安装文件,及已经安装成功: 安装包: 安装成功后,桌面会出现3个图标: 下面,开始安装汉化包: 1.右键点击“HP_LoadRunner_12.02_Commun ...
- Java大浮点数精度
BigDecimal 精度问题 BigDecimal舍入模式 ROUND_DOWN 向零舍入. 即1.55 变为 1.5 , -1.55 变为-1.5 ROUND_UP 向远离0的方向舍入 即 1.5 ...
- html建立大众点评页面遇到的问题
大众点评所用知识 HTML.CSS.bootstrap3 遇到的问题 因图片无法对齐 源码:抛弃div改用img后成功对齐 解决后成功对齐 源码: 导航栏文本无法右对齐. 我想到的方法是: div{ ...
- node生成excel,动态替换表格内容
这里使用的是exceljs模块, 好上手,易操作 1. 大致使用步骤 npm install exceljs // 引用var Excel = require('exceljs'); // 创建一个w ...
- Django开发框架知识点
一.什么是web服务器(了解) 当我们在浏览器输入URL后,浏览器会先请求DNS服务器,获得请求站点的 IP 地址.然后发送一个HTTP Request(请求)给拥有该 IP 的主机,接着就会接收到服 ...
- Yuchuan_Linux_C编程之二 GCC编译
一.整体大纲 二.gcc编译的四个阶段