zoukankan      html  css  js  c++  java
  • 2015ACM/ICPC亚洲区沈阳站重现赛HDU5512Pagodasgcd

    n pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai Mountain, labelled from 1 to n. However, only two of them (labelled aand b, where 1abn) withstood the test of time.

    Two monks, Yuwgna and Iaka, decide to make glories great again. They take turns to build pagodas and Yuwgna takes first. For each turn, one can rebuild a new pagodas labelled i (i{a,b} and 1in) if there exist two pagodas standing erect, labelled j and k respectively, such that i=j+k or i=jk. Each pagoda can not be rebuilt twice.

    This is a game for them. The monk who can not rebuild a new pagoda will lose the game.
     
    Input
    The first line contains an integer t (1t500) which is the number of test cases.
    For each test case, the first line provides the positive integer n (2n20000) and two different integers a and b.
     
    Output
    For each test case, output the winner (``Yuwgna" or ``Iaka"). Both of them will make the best possible decision each time.
     
    Sample Input
    16
    2 1 2
    3 1 3
    67 1 2
    100 1 2
    8 6 8
    9 6 8
    10 6 8
    11 6 8
    12 6 8
    13 6 8
    14 6 8
    15 6 8
    16 6 8
    1314 6 8
    1994 1 13
    1994 7 12
     
    Sample Output
    Case #1: Iaka
    Case #2: Yuwgna
    Case #3: Yuwgna
    Case #4: Iaka
    Case #5: Iaka
    Case #6: Iaka
    Case #7: Yuwgna
    Case #8: Yuwgna
    Case #9: Iaka
    Case #10: Iaka
    Case #11: Yuwgna
    Case #12: Yuwgna
    Case #13: Iaka
    Case#14: Yuwgna
    Case #15: Iaka
    Case #16: Iaka
     
    今天的周赛题,没有写的原因一是因为英文没看懂,而是因为以为是博弈题,博弈我不太会,所以这题也就没做。
     

    题意:

      给出t组样例,每一组给出n、i、j,i和j表示其中两座塔的高度,要求Iaka和Yuwgna两人轮流造塔,Yuwgna先造,要求塔的高度只能是从已造的塔中进行i+j和i-j进行选择,不能和之前已造的塔高重复,且塔高<=n,求出最后一个造塔的人。

    思路:

    在塔全部造完之后,已造的塔的最小塔高是i和j的最小公约数minn,可以通过#include<algorithm>下的__gcd(i,j)求得,其他的塔高一定是minn的倍数。

    利用sum记录minn和其倍数(在minn到n的范围内),再减去原有的两座塔的数量即可。

    最后由于Yuwgna先造,所以sum%2==0的话说明Iaka赢,反之Yuwgna赢。

     1 #include<stdio.h>
     2 #include<algorithm>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int tt;
     8     scanf("%d",&tt);
     9     int t=1;
    10     while(tt--)
    11     {
    12         int n,i,j;
    13         scanf("%d %d %d",&n,&i,&j);
    14         int minn=__gcd(i,j);
    15         int sum=-2;
    16         for(int i=minn;i<=n;i++)
    17         {
    18             if(i%minn==0)
    19                 sum++;
    20         }
    21         if(sum%2==0)
    22             printf("Case #%d: Iaka\n",t++);
    23         else
    24             printf("Case #%d: Yuwgna\n",t++);
    25     }
    26     return 0;
    27 }
    View Code
  • 相关阅读:
    Linux下解压分包文件zip(zip/z01/z02)
    Ubuntu 16.04安装Notepadqq编辑器替代Notepad++
    Ubuntu 16.04安装NASM汇编IDE-SASM
    java命令--jstack 工具
    详述 hosts 文件的作用及修改 hosts 文件的方法
    译:Java 中的正则表达式性能概述
    译:25个面试中最常问的问题和答案
    Android中使用GoogleMap的地理位置服务
    Android 从imageview中获得bitmap的方法
    Android通过百度地图API用Service和Alarm在后台定时获取地理位置信息
  • 原文地址:https://www.cnblogs.com/OFSHK/p/11482881.html
Copyright © 2011-2022 走看看