前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2018年全国多校算法寒假训练营练习比赛(第一场)六子冲

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

作者头像
mathor
发布2018-07-24 15:35:22
2930
发布2018-07-24 15:35:22
举报
文章被收录于专栏:mathormathor
题目链接:六子冲

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

代码语言:javascript
复制
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();
            }
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目链接:六子冲
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档