zoukankan      html  css  js  c++  java
  • 51nod 1995 三子棋

    题目来源: syu校赛
    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
     收藏
     关注

    小的时候大家一定玩过“井”字棋吧。也就是在九宫格中,只要任意行、列,或者任意连续对角线上面出现三个相同的,就能获胜。现在小明和小花也在玩三子棋,但是他们不是在九宫格里,而是在3×4的格子里面。现在小明先下,但是他知道小花这个人很聪明,他想知道第一步下在哪一个地方最合适,你能帮帮他吗?



    Input
    第一行输入一个整数T,表示数据组数(1<T<10000); 
    第二行输入两个整数x,y,表示3×4格子里面的一个坐标(x,y)(1<=x<=3,1<=y<=4);
    Output
    每组数据输出最后小明输赢的结果,如果小明一定能赢,第一行输出“Win”,第二行输出小明所需要花的最少步数;如果小明跟小花只能打成平手,第一行输出“Equal”,第二行输出数字0;如果小明不能赢也不能跟小花打成平手,第一行输出“Lose”,第二行输出小花赢小明所需要花的最少步数。

    Input示例
    2
    2 1
    2 4
    Output示例
    Equal
    0
    Equal
    0


    打表找规律题:借用隔壁博客一张图:




    由于时3x4的表格,所以都是对称的,只需要考虑左上角4个表格,可以知道表格中2,4时同一类,且获胜走的步数时4

    表格3明显时打平的位置,位置1找一下规律,发现最少步数是6,这样扩展到其他的表格中即可求得答案!


    #include<iostream>
    using namespace std;
    int qi[4][5];
    
    void init()
    {
        qi[1][1]=qi[1][4]=qi[3][1]=qi[3][4]=6;
        qi[1][2]=qi[1][3]=qi[2][2]=qi[2][3]=qi[3][2]=qi[3][3]=4;
        qi[2][1]=qi[2][4]=0;
    }
    int main()
    {
        int t;
        int x,y;
        init();
        cin>>t;
        while(t--)
        {
            cin>>x>>y;
            if(qi[x][y]==0)
            {
                cout<<"Equal"<<endl;
                cout<<0<<endl;
            }
            else if(qi[x][y]==4)
            {
                cout<<"Win"<<endl;
                cout<<4<<endl;
    
            }
            else if(qi[x][y]==6)
            {
                cout<<"Win"<<endl;
                cout<<6<<endl;
            }
    
        }
        return 0;
    }


  • 相关阅读:
    N个数求和(PTA)
    集合相似度(PTA)
    方格取数(1)(状压dp入门)
    Drainage Ditches(dinic模板)
    The Accomodation of Students(二分图判断+匈牙利算法)
    Gopher II(匈牙利算法模板)
    Apple Tree(树状数组)
    node.js中的文件系统
    canvas简易画板
    canvas绘制爱心的几种方法
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9387046.html
Copyright © 2011-2022 走看看