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
  • 相关阅读:
    Android studio界面相关设置
    HIVE和HBASE区别
    《梦断代码》经典语录--持续更新
    幽灵漏洞(Ghost gethost)
    服务化实战之 dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
    thrift使用总结
    thrift学习总结
    IntelliJ IDEA配置Tomcat(完整版教程)
    sudo执行脚本找不到环境变量和命令
    W-TinyLFU——设计一个现代的缓存
  • 原文地址:https://www.cnblogs.com/OFSHK/p/11482881.html
Copyright © 2011-2022 走看看