题意:给定一个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. 转载:解决eclipse导出javadoc时的“错误: 编码GBK的不可映射字符”问题

    转自:http://blog.csdn.net/psy1100/article/details/51179342 今天要将自己的API接口和MODEL导出来一份java doc参考文档, 但是在导出的 ...

  2. Socket代码

    服务器端 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

  3. Git使用点滴记录: You have no permission to access this repo.

    代码托管在https://coding.net上面,之前Git用https的方式都好好的,没有出什么问题.结果今天git pull代码的时候一直提示以下信息: remote: Coding.net T ...

  4. js 格式化相关的时间

    javascript Date format(js日期格式化) 方法一: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s). ...

  5. python2 encode和decode函数说明

    字符串编码常用类型:utf-8,gb2312,cp936,gbk等. python中,我们使用decode()和encode()来进行解码和编码 在python中,使用unicode类型作为编码的基础 ...

  6. python's seventh day for me set

    数据类型的补充: 对于元祖:  如果只有一个元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型. tu = ('顾清秋') tul = ('顾清秋',) print(type(tu)) ...

  7. springboot成神之——log4j2的使用

    本文介绍如何在spring-boot中使用log4j2 说明 依赖 日志记录语句 log4j2配置文件 本文介绍如何在spring-boot中使用log4j2 说明 log4j2本身使用是非常简单的, ...

  8. composer 的设计原理及其基本用法

    相信有在用PHP的朋友近年来常听到composer这个套件管理工具.它到底是做什么用的?又是为了解决什么问题而存在呢? 要了解这个,得先从历史开始说起…. PHP最早加载类的方法 初学PHP时,最早会 ...

  9. L1,L2范数和正则化 到lasso ridge regression

    一.范数 L1.L2这种在机器学习方面叫做正则化,统计学领域的人喊她惩罚项,数学界会喊她范数. L0范数  表示向量xx中非零元素的个数. L1范数  表示向量中非零元素的绝对值之和. L2范数  表 ...

  10. Hibernate XXX.hbm.xml 里的class标签的 schema 属性解释

    转自:https://blog.csdn.net/mym43210/article/details/30230173 1 <?xml version="1.0" encodi ...