题意:给定一个8*8的棋盘,然后要懂黑白棋,现在是黑棋走了,问你放一个黑子,最多能翻白子多少个。

析:我是这么想的,反正才是8*8的棋盘,那么就暴吧,反正不会超时,把每一个格能暴力的都暴力,无非是上,下,左,右,左上,左下,右上,右下,

然后都试试就好了。不过懂点黑白棋的还是好做一点。

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <algorithm> using namespace std;
const int maxn = 10 + 5;
const int dr[] = {0, 0, 1, -1, 1, -1, -1, 1};
const int dc[] = {1, -1, 1, -1, -1, 1, 0, 0};
char s[maxn][maxn];
int vis[maxn][maxn]; int dfs(int x, int y, int r, int c){
int xx = r + x;
int yy = c + y;
if(xx < 0 || yy < 0 || xx > 7 || yy > 7) return 0;
vis[x][y] = 1;
if(s[xx][yy] == 'D' || s[xx][yy] == '*') return 0;
if(s[xx][yy] == 'L' && !vis[xx][yy]) return 1 + dfs(xx, yy, r, c);
else if(s[xx][yy] == 'L' && vis[xx][yy]) return dfs(xx, yy, r, c);
return 0;
} int main(){
int n;
cin >> n; for(int kase = 1; kase <= n; ++kase){
memset(vis, 0, sizeof(vis));
// int ans = 0;
for(int i = 0; i < 8; ++i)
scanf("%s", s[i]);
int ans = 0; for(int i = 0; i < 8; ++i){
for(int j = 0; j < 8; ++j){
int cnt = 0;
memset(vis, 0, sizeof(vis));
if(s[i][j] == '*'){ for(int k = 0; k < 8; ++k){
int xx = i, yy = j;
bool ok = false;
while(xx >= 0 && xx < 8 && yy >= 0 && yy < 8){
if(s[xx][yy] == 'D'){ ok = true; break; }
xx += dr[k];
yy += dc[k];
if(s[xx][yy] == '*') break;
}
if(ok){ cnt += dfs(i, j, dr[k], dc[k]); } }
}
ans = max(ans, cnt);
}
} printf("Case %d: %d\n", kase, ans);
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <cstring> using namespace std;
const int maxn = 200 + 5;
const int dr[] = {0, 0, 1, -1, 1, -1, -1, 1};
const int dc[] = {1, -1, 1, -1, -1, 1, 0, 0};
char s[10][10]; int dfs(int i, int j, int r, int c){
if(i < 0 || j < 0 || i > 7 || j > 8) return -1000;
else if(s[i][j] == '*') return -1000;
else if(s[i][j] == 'D') return 0;
else return 1 + dfs(i+r, c+j, r, c);
} int main(){
int T;
cin >> T;
for(int kase = 1; kase <= T; ++kase){
for(int i = 0; i < 8; ++i)
scanf("%s", s[i]);
int ans = 0;
for(int i = 0; i < 8; ++i)
for(int j = 0; j < 8; ++j)
if(s[i][j] == '*'){
int cnt = 0;
for(int k = 0; k < 8; ++k)
cnt += max(0, dfs(i+dr[k], j+dc[k], dr[k], dc[k]));
ans = max(ans, cnt);
} printf("Case %d: %d\n", kase, ans); }
return 0;
}

HDU 3368 Reversi (暴力,DFS)的更多相关文章

  1. HDU 3368 Reversi

    http://acm.hdu.edu.cn/showproblem.php?pid=3368 题意:模拟黑白棋,下一步黑手最大可以转化多少个白旗 分析:暴力 原先的思路是找到D然后遍历其八个方向,直到 ...

  2. hihoCoder 1185 连通性·三(Tarjan缩点+暴力DFS)

    #1185 : 连通性·三 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 暑假到了!!小Hi和小Ho为了体验生活,来到了住在大草原的约翰家.今天一大早,约翰因为有事要出 ...

  3. Strange Country II 暴力dfs

    这题点的个数(<=50)有限, 所以可以纯暴力DFS去搜索 //#pragma comment(linker, "/STACK:16777216") //for c++ Co ...

  4. HDU 1269 迷宫城堡(DFS)

    迷宫城堡 Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的 ...

  5. HDU 1045 Fire Net(DFS)

    Fire Net Problem Description Suppose that we have a square city with straight streets. A map of a ci ...

  6. HDU - 5877 Weak Pair (dfs+树状数组)

    题目链接:Weak Pair 题意: 给出一颗有根树,如果有一对u,v,如果满足u是v的父节点且vec[u]×vec[v]<=k,则称这对结点是虚弱的,问这棵树中有几对虚弱的结点. 题解: 刚开 ...

  7. HDOJ(HDU).2660 Accepted Necklace (DFS)

    HDOJ(HDU).2660 Accepted Necklace (DFS) 点我挑战题目 题意分析 给出一些石头,这些石头都有自身的价值和重量.现在要求从这些石头中选K个石头,求出重量不超过W的这些 ...

  8. HDOJ(HDU).1045 Fire Net (DFS)

    HDOJ(HDU).1045 Fire Net [从零开始DFS(7)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HD ...

  9. HDOJ(HDU).1241 Oil Deposits(DFS)

    HDOJ(HDU).1241 Oil Deposits(DFS) [从零开始DFS(5)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...

随机推荐

  1. Des加解密(Java端和Js端配套)解析

    一.什么是DES加密        des对称加密,对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码( ...

  2. 转: 使用Jmeter创建ActiveMQ JMS POINT TO POINT请求,环境搭建、请求创建、插件安装、监听服务器资源等

    转自:http://www.cnblogs.com/qianyiliushang/p/4348584.html 准备工作: 安装JDK,推荐使用1.7以上版本,并设置JAVA_HOME 下载Jmete ...

  3. Python基础-变量作用域

    1.函数作用域介绍 函数作用域 Python中函数作用域分为4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局 ...

  4. innodb事务日志详解

    首先看InnoDB的缓存和文件的关系图如下: InnoDB事务日志功能介绍 InnoDB使用日志来减少提交事务时的开销.因为日志中已经记录了事务,就无须在每个事务提交时把缓冲池的脏块刷新(flush) ...

  5. 1088 Rational Arithmetic

    题意: 给出两个分式(a1/b1 a2/b2),分子.分母的范围为int型,且确保分母不为0.计算两个分数的加减乘除,结果化为最简的形式,即"k a/b",其中若除数为0的话,输出 ...

  6. zabbix增加手机短信、邮件监控的注意要点,SSL邮件发送python脚本

    1.短信接口文档: URL http://xxx.com/interfaces/sendMsg.htm Method POST Description 文字短信调用接口 Request Param L ...

  7. monolog 应该是世界上最好的日志插件了

    引入 composer require monolog/monolog 官网 https://github.com/Seldaek/monolog 创建工具类 <?php /** * Creat ...

  8. mysql库操作

    一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MyS ...

  9. SQL Server 2008怎么自动备份数据库

    在SQL Server 2008数据库中.为了防止数据的丢失我们就需要按时的来备份数据库了.要是每天都要备份的话,人工备份会很麻烦的,自动备份的话就不需要那么麻烦了,只 要设置好了,数据库就会自动在你 ...

  10. python实现文件加密

    前言: 想实现批量文件加密,可惜批量.展时没有思路 0x1 没有加密前的图片 加密后!!! !!!打不开了 0x02: 代码 import hashlib def get_sha1(f): xd=op ...