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从链表上摘除了,但它还是驻留在内存中的.这样我们就有了找到它的方法. ...
随机推荐
- jquery ajax 请求中 中文汉字的 转码问题
1.汉字参数直接跟在请求连接的后面,这样需要使用encodeURIComponent(fileName)或者encodeURI(fileName)转码两次 后台使用URLDecoder.decode( ...
- nginx配置http协议和tcp协议配置文件案例
注意 nginx 1.9版本之后才支持 tcp #user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/e ...
- 时间戳Id
ID:格式据1970.1.1毫秒数 1535091029740 13位 问题:高并发,分布式明显会有问题,网上有雪花算法,但是位数跟我需要的不一样,暂时不考虑,以后研究再用. 参考: https:/ ...
- osgearth cache
<map name="readymap.org" type="geocentric"> <options> <!--Specify ...
- [Ubuntu] apt 添加第三方库
1. 方法一:直接在 /etc/apt/sources.list 添加第三方库. $ sudo vi /etc/apt/sources.list 在其中添加: deb http://archive.s ...
- Java调用MQ队列
IBM MQ 6.0中设置两个队列,(远程队列.通道之类都不设置). 队列管理器是XIR_QM_1502 队列名称是ESBREQ IP地址是10.23.117.134(远程的一台电脑,跟我的电脑不在一 ...
- Python学习(23):Python面向对象(1)速成
转自 http://www.cnblogs.com/BeginMan/p/3190776.html 一.Python经典类与新类 经典类:如果没有直接或间接的子类化一个对象,也就是说如果没有指定一个父 ...
- WP8.1学习系列(第十七章)——交互UX之输入和反馈模式
如果你将 Windows 应用商店应用设计为触摸交互,则可免费获取对触摸板.鼠标.笔和键盘交互的支持.你的用户可以从一种输入法切换到另一种,而不会丧失应用体验的感觉.将键盘插入平板电脑?没问题.你的应 ...
- [转载]Array.prototype.slice.call(arguments,1)原理
Array.prototype.slice.call(arguments,1)该语句涉及两个知识点. arguments是一个关键字,代表当前参数,在javascript中虽然arguments表面上 ...
- python框架---->BeautifulSoup的使用
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.一个人至少拥有一个梦想,有一个理由去坚强.心 ...