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从链表上摘除了,但它还是驻留在内存中的.这样我们就有了找到它的方法. ...
随机推荐
- python 有class外壳不一定是oop,到底怎么oo?
1.继承 封装 多态是面向对象的三大特点,当年在考c++期末考试时候这三个特点还是作为填空题出现的. 而且老师也反复唠叨继承封装 多态,这三个词语是背得滚瓜烂熟了,但因为不是特别专业的计算机科班,学得 ...
- C#调用Delphi的dll之详解
C#调用Delphi接口方法,有两种解决办法: 一.将Delphi程序编译成一个COM组件,然后在C#里引用COM组件. 二.非托管调用Dephi的DLL文件. 这里我们主要讲解一下第二种方法,讲第二 ...
- 用python开发android应用 【转载】
用python开发android应用 [转载] 转载自:http://www.miui.com/thread-995114-1-1.html Python是动态语言,比较简洁.Android不直接支持 ...
- 抓包工具Wireshark
https://baike.baidu.com/item/Wireshark/10876564?fr=aladdin
- JQuery难点备忘
1 jquery绑定事件如何传递参数 $("#btn").bind("click",{"id":"111"," ...
- SpringMVC由浅入深day02_10拦截器
10 拦截器 Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理. 10.1 拦截定义 定义拦截器,实现HandlerInte ...
- HDOJ 4276 The Ghost Blows Light(树形DP)
Problem Description My name is Hu Bayi, robing an ancient tomb in Tibet. The tomb consists of N room ...
- WebService之JDK中wsimport命令
1.编写WebService类,使用@WebService注解 package test; import javax.jws.WebService; @WebService public class ...
- 转载用sql语句计算出mysql数据库的qps,tps,iops性能指标
本帖最后由 LUK 于 2014-9-21 22:39 编辑 思路: 1 关注MYSQL三个方面的性能指标,分别为query数,transaction数,io请求数 2 在某个时间范围内(例如20秒) ...
- Spark-scala-API
1.sc.version2.集群对象:SparkContext:获得Spark集群的SparkContext对象,是构造Spark应用的第一步!SparkContext对象代表 整个 Spark集群, ...