# 2018年全国多校算法寒假训练营练习比赛（第一场）六子冲

#### 题目链接：六子冲

棋盘上攻击方的2个棋子(2子必须相连并主动移动其中的1个)与被攻方的1个棋子皆处在一条直线上并相邻时，被攻方的这个棋子就被消灭  每次移动后判断一下，移动后棋子的那一行和一列，判断是否可以消灭其他子  若一行中有4子或3子不连通或攻击方的子数只有一个或3个 则无法消灭任何棋子

```import java.util.Scanner;
public class Main {
static int n;
static int p;
static int q;
static int cas = 0;
static int x[] = new int[15];
static int y[] = new int[15];
static int map[][] = new int[10][10];
static int dr[][] = {{0,0},{-1,0},{1,0},{0,-1},{0,1}};
public static void init() {
for(int i = 0;i < 10;i++)
for(int j = 0;j < 10;j++)
map[i][j] = 0;
x[11] = x[10] = x[9] = x[8] = 1;
x[2] = x[3] = x[4] = x[5] = 4;
x[1] = x[6] = 3;
x[12] = x[7] = 2;
y[11] = y[12] = y[1] = y[2] = 1;
y[10] = y[3] = 2;
y[9] = y[4] = 3;
y[8] = y[7] = y[6] = y[5] = 4;
for(int i = 1;i <= 12;i++)
map[x[i]][y[i]] = i;
}
public static void update() {
map[x[p]][y[p]] = 0;
x[p] += dr[q][0];
y[p] += dr[q][1];
map[x[p]][y[p]] = p;
check(1);
check(2);
}
public static void check(int t) {
int bk,wt,num,last;
bk = wt = num = last = 0;
for(int i = 1;i <= 4;i++) {
if(t == 1)
num = map[x[p]][i];
else
num = map[i][y[p]];
if(num == 0 && (i == 2 || i == 3))
return;
if(num > 6) {
if(last == 1 && wt == 1)
return;
wt++;
last = 2;
} else if(num > 0) {
if(last == 2 && bk == 1)
return;
bk++;
last = 1;
}
}
if((bk == 2 && wt == 1 && p <= 6) || (bk == 1 && wt == 2 && p > 6)) {
for(int i = 1;i <= 4;i++) {
if(t == 1)
num = map[x[p]][i];
else
num = map[i][y[p]];
if((wt == 1 && num > 6) || (bk == 1 && num <= 6))
map[x[num]][y[num]] = 0;
}
}
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while(cin.hasNext()) {
n = cin.nextInt();
init();
for(int i = 0;i < n;i++) {
p = cin.nextInt();
q = cin.nextInt();
update();
}
System.out.println("#Case " + ++cas + ":");
for(int i = 1;i <= 4;i++) {
for(int j = 1;j <= 4;j++)
System.out.printf("%3d",map[i][j]);
System.out.println();
}
}
}
}```

0 条评论

• ### CodeForces D.Powerful array(Div.1)

大意是是说，问区间[L,R]内的的一个值，这个值是arr[x]出现次数cnt[arr[x]]^2^*arr[x]  这道题Java版的莫队怎么都tle，...

• ### 【2020HBU天梯赛训练】7-40 列车调度

两端分别是一条入口（Entrance）轨道和一条出口（Exit）轨道，它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入，最后从出口离开。在图中有...

• ### HDU 5806

思路：尺取法！！如果已经统计过的数中有k个数是不小于m的，那么后面再加上任意数，这个区间都符合要求。想通了这一点，这道题便好做了。 一发AC

• ### 【POJ 3320】Jessica's Reading Problemc（尺取法）

尺取时，l和r 代表区间两边，每次r++时，d[r]即r的出现次数+1，d[l]即l的出现次数大于1时，左边可以短一点，d[l]--，l++，直到d[l]出...

• ### P1401 城市（30分，正解网络流）

题目描述 N( )个城市，M( )条无向边，你要找T( )条从城市1到城市N的路，使得最长的边的长度最小，边不能重复用。 输入输出格式 输入格式： 第1行...

• ### C/C++ Const 小知识

[描述] 在 C、C++、D 和 JavaScript 编程语言中，const是一个类型限定符一个应用于数据类型的关键字，表示数据是只读的。Const - Wi...

• ### 1231 最优布线问题

1231 最优布线问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 学...

• ### 使用VS2010 C#开发ActiveX控件

在网上查了一些资料也实际操作了一下，在此自己再作一次详细记录。 　　功能：将对机具操作的FK.dll封装成fk.ocx，注册后能在网页上对机器操作。 使用V...