zoukankan      html  css  js  c++  java
  • UVA 141 The Spot Game 斑点游戏。。

     The Spot Game 

    The game of Spot is played on an NxN board as shown below for N = 4. During the game, alternate players may either place a black counter (spot) in an empty square or remove one from the board, thus producing a variety of patterns. If a board pattern (or its rotation by 90 degrees or 180 degrees) is repeated during a game, the player producing that pattern loses and the other player wins. The game terminates in a draw after 2N moves if no duplicate pattern is produced before then.

    Consider the following patterns:

     

    picture23

     

    If the first pattern had been produced earlier, then any of the following three patterns (plus one other not shown) would terminate the game, whereas the last one would not.

     

    Input and Output

    Input will consist of a series of games, each consisting of the size of the board, N (2 tex2html_wrap_inline180 N tex2html_wrap_inline180 50) followed, on separate lines, by 2N moves, whether they are all necessary or not. Each move will consist of the coordinates of a square (integers in the range 1..N) followed by a blank and a character `+' or `-' indicating the addition or removal of a spot respectively. You may assume that all moves are legal, that is there will never be an attempt to place a spot on an occupied square, nor to remove a non-existent spot. Input will be terminated by a zero (0).

     

    Output will consist of one line for each game indicating which player won and on which move, or that the game ended in a draw.

     

    Sample input

     

    2
    1 1 +
    2 2 +
    2 2 -
    1 2 +
    2
    1 1 +
    2 2 +
    1 2 +
    2 2 -
    0

     

    Sample output

     

    Player 2 wins on move 3
    Draw

    题意:给定一个n*n的棋盘, 然后玩家1和玩家2每人轮操作棋子(可以放一个棋子或者拿掉一个棋子)。进行n次。。。然后如果某一个玩家进行一次操作之后。棋盘出现之前出现过的局面,这另外一位玩家获得胜利。。如果放完没人胜利,输出Draw。 注意,棋盘是可以旋转的,看题目中前4副图,代表的都是相同的局面。。

    思路:放了棋子的点为1,没放的为0,把每个局面,,保存成一个字符串,,每次放完棋子之后。旋转4次。4种情况都插入到一个set。。如果一个玩家放完棋子后的局面。在set里面可以找到,则这个玩家失败,另一个玩家胜利。。

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <set>
    using namespace std;
    
    int n;
    int map[55][55];
    char save[4][2555];
    int x, y;
    char c;
    set<string> adj;
    void sav()
    {
        memset(save, 0 , sizeof(save));
        int t;
        t = 0;
        for (int i = 1; i <= n; i ++)
    	for (int j = 1; j <= n; j ++)
    	{
    	    save[0][t ++] = map[i][j] + '0';
    	}
        save[0][t] = '';
        t = 0;
        for (int i = 1; i <= n; i ++)
    	for (int j = 1; j <= n; j ++)
    	{
    	    save[1][t ++] = map[j][n + 1 - i] + '0';
    	}
        save[1][t] = '';
        t = 0;
        for (int i = 1; i <= n; i ++)
    	for (int j = 1; j <= n; j ++)
    	{
    	    save[2][t ++] = map[n + 1 - i][n + 1 - j] + '0';
    	}
        save[2][t] = '';
        t = 0;
        for (int i = 1; i <= n; i ++)
    	for (int j = 1; j <= n; j ++)
    	{
    	    save[3][t ++] = map[n + 1 - j][i] + '0';
    	}
        save[3][t] = '';
    }
    int main()
    {
        while (~scanf("%d", &n) && n)
        {
    	int judge = 0;
    	int bu = 0;
    	memset(map, 0 , sizeof(map));
    	adj.clear();
    	for (int i = 0; i < 2 * n; i ++)
    	{
    	    scanf("%d%*c%d%*c%c%*c", &x, &y, &c);
    	    if (c == '+')
    		map[x][y] = 1;
    	    if (c == '-')
    		map[x][y] = 0;
    	    sav();
    	    for (int j = 0; j < 4; j ++)
    	    {
    		if (adj.find(save[j]) != adj.end())
    		{
    		    judge = 1;
    		    break;
    		}
    	    }
    	    for (int j = 0 ; j < 4; j ++)
    		adj.insert(save[j]);
    	    if (judge)
    	    {
    		if (bu == 0)
    		    bu = i + 1;
    	    }
    	}
    	if (judge)
    	{
    	    if (bu % 2)
    		printf("Player 2 wins on move %d
    ", bu);
    	    else
    		printf("Player 1 wins on move %d
    ", bu);
    	}
    	else
    	    printf("Draw
    ");
        }
        return 0;
    }


  • 相关阅读:
    log4j中Spring控制台输出Debug级信息过多解决方法
    spring使用aop
    过滤器(filter)实现用户登录拦截
    Eclipse将项目部署tomcat的webapps目录
    css初始化样例代码
    dede表单修改默认必填
    DedeCMS提交自定义表单加入验证码功能
    jQuery入门第三天
    jQuery入门第二天
    jQuery入门第一天
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3228536.html
Copyright © 2011-2022 走看看