POJ-1414 Life Line (暴力搜索)
Life Line
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 855 Accepted: 623
Description
Let’s play a new board game “Life Line”.
The number of the players is greater than 1 and less than 10.
In this game, the board is a regular triangle in which many small regular triangles are arranged (See Figure 1). The edges of each small triangle are of the same length.
The size of the board is expressed by the number of vertices on the bottom edge of the outer triangle.For example, the size of the board in Figure 1 is 4.
At the beginning of the game, each player is assigned his own identification number between 1 and 9,and is given some stones on which his identification number is written.
Each player puts his stone in turn on one of the “empty” vertices. An “empty vertex” is a vertex that has no stone on it.
When one player puts his stone on one of the vertices during his turn, some stones might be removed from the board. The player gains points which is equal to the number of the removed stones of himself. The points of a player for a single turn is the points he gained minus the points he lost in that turn.
The conditions for removing stones are as follows :
1.The stones on the board are divided into groups. Each group contains a set of stones whose numbersare the same and placed adjacently. That is, if the same numbered stones are placed adjacently,they belong to the same group.
2.If none of the stones in a group is adjacent to at least one “empty” vertex, all the stones in that group are removed from the board.
Figure 2 shows an example of the groups of stones.
Suppose that the turn of the player ‘4’ comes now. If he puts his stone on the vertex shown in Figure 3a, the conditions will be satisfied to remove some groups of stones (shadowed in Figure 3b). The player gains 6 points, because the 6 stones of others are removed from the board (See Figure 3c).
As another example, suppose that the turn of the player ‘2’ comes in Figure 2. If the player puts his
stone on the vertex shown in Figure 4a, the conditions will be satisfied to remove some groups of stones (shadowed in Figure 4b). The player gains 4 points, because the 4 stones of others are removed. But, at the same time, he loses 3 points, because his 3 stones are removed. As the result, the player’s points of this turn is 4 ? 3 = 1 (See Figure 4c).
When each player puts all of his stones on the board, the game is over. The total score of a player is the summation of the points of all of his turns.
Your job is to write a program that tells you the maximum points a player can get (i.e., the points he gains - the points he loses) in his current turn.
Input
The input consists of multiple data. Each data represents the state of the board of the game still in
progress. The format of each data is as follows.
N C
S1,1
S2,1 S2,2
S3,1 S3,2 S3,3
…
SN,1 … SN,N
N is the size of the board (3 <= N <= 10). C is the identification number of the player whose turn comes now (1 <= C <= 9). That is, your program must calculate his points in this turn. Si,j is the state of the vertex on the board (0 <= Si,j <= 9). If the value of Si,j is positive, it means that there is the stone numbered by Si,j there. If the value of Si,j is 0, it means that the vertex is “empty”. Two zeros in a line, i.e., 0 0, represents the end of the input.
Output
For each data, the maximum points the player can get in the turn should be output, each in a separate line.
Sample Input
4 4
2
2 3
1 0 4
1 1 4 0
4 5
2
2 3
3 0 4
1 1 4 0
4 1
2
2 3
3 0 4
1 1 4 0
4 1
1
1 1
1 1 1
1 1 1 0
4 2
1
1 1
1 1 1
1 1 1 0
4 1
0
2 2
5 0 7
0 5 7 0
4 2
0
0 3
1 0 4
0 1 0 4
4 3
0
3 3
3 2 3
0 3 0 3
4 2
0
3 3
3 2 3
0 3 0 3
6 1
1
1 2
1 1 0
6 7 6 8
0 7 6 8 2
6 6 7 2 2 0
5 9
0
0 0
0 0 0
0 0 0 0
0 0 0 0 0
5 3
3
3 2
4 3 2
4 4 0 3
3 3 3 0 3
0 0
Sample Output
6
5
1
-10
8
-1
0
1
-1
5
0
5
题目的意思就是讲一个游戏的规则,太长了,看图就应该明白了。这个题目数据量小,直接暴力搜索就可以了
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
int n,c;
int a[15][15];
int vis[15][15];
int tag;
int _count;
int num[15];
int dir[6][2]={{-1,0},{-1,-1},{0,-1},{0,1},{1,0},{1,1}};
void dfs(int x,int y,int term)
{
for(int i=0;i<6;i++)
{
int xx=x+dir[i][0];
int yy=y+dir[i][1];
if(xx<0||yy<0||xx>n-1||yy>n-1||yy>xx)
continue;
if(a[xx][yy]!=term&&a[xx][yy]!=0)
continue;
if(a[xx][yy]==0)
tag=1;
if(vis[xx][yy])
continue;
vis[xx][yy]=1;
if(a[xx][yy]==term)
_count++;
dfs(xx,yy,term);
}
}
int sove()
{
int sum=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
if(a[i][j]!=0&&vis[i][j]==0)
{
vis[i][j]=1;
tag=0;
_count=1;
dfs(i,j,a[i][j]);
if(tag==0&&a[i][j]!=c)
sum+=_count;
if(tag==0&&a[i][j]==c)
sum-=_count;
}
}
}
return sum;
}
int main()
{
int ans;
while(scanf("%d%d",&n,&c)!=EOF)
{
if(n==0&&c==0)
break;
ans=-9999999;
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
scanf("%d",&a[i][j]);
num[a[i][j]]++;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
if(a[i][j]==0)
{
a[i][j]=c;
num[c]++;
memset(vis,0,sizeof(vis));
int tmp=sove();
if(ans<tmp)
ans=tmp;
a[i][j]=0;
num[c]--;
}
}
}
printf("%d\n",ans);
}
return 0;
}
POJ-1414 Life Line (暴力搜索)的更多相关文章
- POJ 1414 Life Line(搜索)
题意: 给定一块正三角形棋盘,然后给定一些棋子和空位,棋子序号为a(1<=a<=9),group的定义是相邻序号一样的棋子. 然后到C(1<=N<=9)棋手在空位放上自己序号C ...
- poj 3050 Hopscotch DFS+暴力搜索+set容器
Hopscotch Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2774 Accepted: 1940 Description ...
- poj 2718 Smallest Difference(暴力搜索+STL+DFS)
Smallest Difference Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6493 Accepted: 17 ...
- POJ 1129:Channel Allocation 四色定理+暴力搜索
Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13357 Accepted: 68 ...
- ACM 暴力搜索题 题目整理
UVa 129 Krypton Factor 注意输出格式,比较坑爹. 每次要进行处理去掉容易的串,统计困难串的个数. #include<iostream> #include<vec ...
- hdu 4740 The Donkey of Gui Zhou(暴力搜索)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4740 [题意]: 森林里有一只驴和一只老虎,驴和老虎互相从来都没有见过,各自自己走过的地方不能走第二次 ...
- hdu 1427 速算24点 dfs暴力搜索
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem De ...
- POJ 3126 Prime Path 广度优先搜索 难度:0
http://poj.org/problem?id=3126 搜索的时候注意 1:首位不能有0 2:可以暂时有没有出现在目标数中的数字 #include <cstdio> #include ...
- 随手练——洛谷-P1151(枚举与暴力搜索)
枚举 #include <iostream> using namespace std; int main() { ; cin >> k; ; i < ; i++) { ) ...
- 枚举进程——暴力搜索内存(Ring0)
上面说过了隐藏进程,这篇博客我们就简单描述一下暴力搜索进程. 一个进程要运行,必然会加载到内存中,断链隐藏进程只是把EPROCESS从链表上摘除了,但它还是驻留在内存中的.这样我们就有了找到它的方法. ...
随机推荐
- generating-ssh-keys
https://help.github.com/articles/generating-ssh-keys/ 其中 # start the ssh-agent in the background ssh ...
- spring boot整合activemq消息中间件
spring boot整合activemq消息中间件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...
- MapWinGIS------下载与安装
最新版本下载地址: https://github.com/MapWindow/MapWinGIS/releases 1.下载后按步骤安装即可 2.右键以管理员身份运行cmd,运行:regsvr32 C ...
- Java显示指定类型的文件
文件作为存储数据的单元,会根据数据类型产生很多分类,也就是所谓的文件类型.在对数据文件进行操作时,常常需要根据不同的文件类型来作不同的处理.本实例实现的是读取文件夹指定类型的文件并显示到表格控件中.这 ...
- WAF Bypass数据库特性(Mysql探索篇)
0x01 背景 Mysql数据库特性探索,探索能够绕过WAF的数据库特性. 0x02 测试 常见有5个位置即: SELECT * FROM admin WHERE username = 1[位置一 ...
- zabbix监控第一台服务器
客户机的IP是192.168.0.80,主机名是wls12c 1. 安装客户端, 1.1 新建zabbix的用户 groupadd zabbix useradd -g zabbix zabbix 1. ...
- JS - 查找同辈中的对象
今天在使用parent().find(".a:first")的时候,发现查找结果非正常按照顺序来的.有点递归的感觉,从底层往上. 因为需要的是同级的对象,所以去查了一下jquery ...
- IOS多线程之线程属性的配置
版权声明:原创作品,谢绝转载!否则将追究法律责任. 设置线程堆栈的大小: 系统为每个你新创建的线程,都会为你的进程空间分配一定的内存作为该线程的堆栈.这里面有我们局部变量声明我们的方法就是一个堆栈 ...
- Spark学习笔记--Linux安装Spark集群详解
本文主要讲解如何在Linux环境下安装Spark集群,安装之前我们需要Linux已经安装了JDK和Scala,因为Spark集群依赖这些.下面就如何安装Spark进行讲解说明. 一.安装环境 操作系统 ...
- 开发常见错误之 :Missing artifact com.sun:tools:jar 1.7.0
Missing artifact com.sun:tools:jar 1.7.0 解决办法一: 手动配置pom.xml,添加一个dependency如下: <dependency> < ...