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 (暴力搜索)的更多相关文章

  1. POJ 1414 Life Line(搜索)

    题意: 给定一块正三角形棋盘,然后给定一些棋子和空位,棋子序号为a(1<=a<=9),group的定义是相邻序号一样的棋子. 然后到C(1<=N<=9)棋手在空位放上自己序号C ...

  2. poj 3050 Hopscotch DFS+暴力搜索+set容器

    Hopscotch Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2774 Accepted: 1940 Description ...

  3. poj 2718 Smallest Difference(暴力搜索+STL+DFS)

    Smallest Difference Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6493   Accepted: 17 ...

  4. POJ 1129:Channel Allocation 四色定理+暴力搜索

    Channel Allocation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13357   Accepted: 68 ...

  5. ACM 暴力搜索题 题目整理

    UVa 129 Krypton Factor 注意输出格式,比较坑爹. 每次要进行处理去掉容易的串,统计困难串的个数. #include<iostream> #include<vec ...

  6. hdu 4740 The Donkey of Gui Zhou(暴力搜索)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4740 [题意]: 森林里有一只驴和一只老虎,驴和老虎互相从来都没有见过,各自自己走过的地方不能走第二次 ...

  7. hdu 1427 速算24点 dfs暴力搜索

    速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem De ...

  8. POJ 3126 Prime Path 广度优先搜索 难度:0

    http://poj.org/problem?id=3126 搜索的时候注意 1:首位不能有0 2:可以暂时有没有出现在目标数中的数字 #include <cstdio> #include ...

  9. 随手练——洛谷-P1151(枚举与暴力搜索)

    枚举 #include <iostream> using namespace std; int main() { ; cin >> k; ; i < ; i++) { ) ...

  10. 枚举进程——暴力搜索内存(Ring0)

    上面说过了隐藏进程,这篇博客我们就简单描述一下暴力搜索进程. 一个进程要运行,必然会加载到内存中,断链隐藏进程只是把EPROCESS从链表上摘除了,但它还是驻留在内存中的.这样我们就有了找到它的方法. ...

随机推荐

  1. android5.1移植记录

    应用能够配置Android系统的各种设置,这些设置的默认值都是由frameworks中的SettingsProvider从数据库中读取的frameworks/base/packages/Setting ...

  2. Go之函数直接实现接口

    //1.定义一个接口 type Run interface { Runing() } //2.定义一个函数类型 type Runer func() //3.让函数直接实现接口 func (self R ...

  3. UITextField中文输入法输入时对字符长度的限制 输入时对字符类型的限制

    检索一个字符串的长度的话:直接用 length,去进行判断就行了, 如果要检索字符串是否是自己要限制的类型的话,可以用正则表达式: 举个例子:   匹配9-15个由字母/数字组成的字符串的正则表达式: ...

  4. python使用代理访问服务器

    python使用代理访问服务器主要有一下3个步骤: 1.创建一个代理处理器ProxyHandler: proxy_support = urllib.request.ProxyHandler(),Pro ...

  5. 【代码审计】后台Getshell的两种常规姿势

    0x00 前言 在早些年刚接触web安全的时候,基础套路都是找注入--找后台--找上传点--找数据库备份--Getshell,然而在代码审计的角度,也存在类似的基本操作. 这里结合代码实例介绍白盒Ge ...

  6. selenium之 chromedriver与chrome版本映射表(更新至v2.31)

    转自:http://blog.csdn.net/huilan_same/article/details/51896672 chromedriver版本 支持的Chrome版本 v2.31 v58-60 ...

  7. [XPath] XPath 与 lxml (一)XPath 术语

    前言 这是一篇主要介绍 XPath 的文章,由于 JQuery 已经不支持 XPath,所以本文主要通过 Python 的 lxml.etree 来介绍 XPath. 什么是 XPath ? XPat ...

  8. hadoop核心逻辑shuffle代码分析-map端

    首先要推荐一下:http://www.alidata.org/archives/1470 阿里的大牛在上面的文章中比较详细的介绍了shuffle过程中mapper和reduce的每个过程,强烈推荐先读 ...

  9. sqlite3错误码整理

    #define SQLITE_OK /* 成功 | Successful result */ /* 错误码开始 */ #define SQLITE_ERROR /* SQL错误 或 丢失数据库 | S ...

  10. Github上star和fork比较高的vim配置方案

    https://github.com/amix/vimrchttps://github.com/humiaozuzu/dot-vimrchttps://github.com/spf13/spf13-v ...