zoukankan      html  css  js  c++  java
  • [计蒜客] n 子棋

     n 子棋

    Description

    小 A 和小 B 在玩 nn 子棋, nn 子棋游戏的规则是,两人在一个左上角是 (1,1)(1,1),右下角是 (n,n)(n,n) 的 n imes nn×n 棋盘中交替落子,只要有一方的 nn 个棋子在同一行或者同一列或者同一条对角线上,对方就输了。

    游戏由小 A 先手,一共进行了 mm 回合,请你来当裁判,帮他们裁定胜负。

    游戏结束的条件是:

    • 出现胜负;
    • 所有回合结束。

    一旦满足上述任意一个条件,游戏立即结束,后续回合无效。

    Input

    第一行两个整数 n,mn,m ,表示棋盘大小和回合数 。

    接下来 mm 行,每行两个数 x,yx,y,表示当前轮到的人会在第 xx 行第 yy 列放一个棋子。

    output

    输出一行,包含一个整数 xx ,表示游戏结束的回合,和一个字符串 SS 表示游戏结果,用一个空格隔开。

    若小 A 赢了 SS 为"milk!";小 B 赢了 SS 为"juice!";否则 SS 为"drawn!"

    对于前 10\%10% 的数据,保证 n=1n=1;

    对于前 30\%30% 的数据,保证 1leq n leq 21n2;

    对于前 70\%70% 的数据,保证 1leq n leq 501n50;

    对于前 90\%90% 的数据,保证 1leq nleq 5001n500;

    对于 100\%100% 的数据,保证 1leq nleq 10^5, 0leq m leq min(3 imes 10^5, n^2)1n105,0mmin(3×105,n2)。

    保证最初棋盘是空的且游戏结束前所有操作均合法。

    Examples

    Input

    2 4
    1 1
    2 2
    2 1
    1 2

    Output

    3 milk!

    正确解法:

    对每行、每列,两条对角线各用一个变量维护(初值为0) ,

    轮到小 A 就++对应变量、轮到小 B 则--,同时检查对应变量绝对值是否为 n。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<string>
     6 using namespace std;
     7 const int N=100000+100;
     8 int n,m,x,y;
     9 int a[N]={0},b[N]={0},cnt1=0,cnt2=0;
    10 int f=1;
    11 int main()
    12 {
    13     cin>>n>>m;
    14     for(int i=1;i<=m;i++,f=-f)
    15     {
    16         cin>>x>>y;
    17         a[x]+=f;
    18         b[y]+=f;
    19         if(x==y)
    20             cnt1+=f;
    21         if(x==n-y+1)
    22             cnt2+=f;
    23         if(abs(a[x])==n||abs(b[y])==n||abs(cnt1)==n||abs(cnt2)==n)
    24         {    cout<<i<<" ";
    25             if(f==1)    cout<<"milk!"<<endl;
    26              else cout<<"juice!"<<endl;
    27               return 0;
    28         }
    29     }
    30     cout<<m<<" "<<"drawn!"<<endl;
    31     return 0;
    32 }
    View Code

     

    No matter how you feel, get up , dress up , show up ,and never give up.
  • 相关阅读:
    C++中的 . 和 >
    JVM内存学习
    JAVA内部类
    2013年3月25日
    Dalvik虚拟机
    多线程访问数据库
    深入学习Android笔记(一)
    结对项目四则运算 “软件”之升级版
    分布式版本控制系统Git的安装与使用
    第一次作业准备
  • 原文地址:https://www.cnblogs.com/Kaike/p/10702328.html
Copyright © 2011-2022 走看看