华东交通大学2018年ACM“双基”程序设计竞赛 D

  摸鱼之王MIKU酱想去埃及玩,需要一个人陪同。小新和小磊都想陪MIKU酱一起去,但名额只有一个。所以小磊和小新决定用一个小游戏来决定谁和MIKU酱出去玩。
    游戏的道具是21张塔罗牌,塔罗牌分为大牌和小牌,其中大牌有22张,分别是编号为0的愚者(The Fool)和编号为21的世界(The World)。
给出22张的塔罗牌以及其编号如下:
【0】愚者(The Fool,0)
【1】魔术师(The Magician,I)
【2】女祭司(The High Priestess,II)
【3】皇后(The Empress,III)
【4】皇帝(The Emperor,IV)
【5】教皇(The Hierophant,or the Pope,V)
【6】恋人(The Lovers,VI)
【7】战车(The Chariot,VII)
【8】力量(Strength,VIII)
【9】隐士(The Hermit,IX)
【10】命运之轮(The Wheel of Fate,X)
【11】正义(Justice,XI)
【12】倒吊人(The Hanged Man,XII)
【13】死神(Death,XIII)
【14】节欲(Temperance,XIV)
【15】恶鬼(The Devil ,XV)
【16】塔(The Tower,XVI)
【17】星辰(The Star,XVII)
【18】月亮(The Moon,XVIII)
【19】太阳(The Sun,XIX)
【20】审判(Judgement,XX)
【21】世界(The World,XXI)
    游戏的规则是:将22张塔罗牌打乱,然后分别从中翻开一张卡,两张卡的权值和如果为正数,则小新获胜,如果为负数,则小磊获胜。如果这张卡是正位(即是正向的),那么这张牌的权值就为他的序号,如果是逆位(反向),则权值就为序号的相反数。例如:正位的世界的权值为21,逆位的死神的权值为 -13。因为愚者的正逆位都是0,为了让游戏更有趣,他们附加了一条规则:如果翻出了正位的愚者,那么直接判定小新获胜,如果出现了逆位的愚者,那么小磊获胜。
    大家都不知道,小磊其实具有将时间暂停几十秒的能力。但是小磊并不想用这个能力作弊,他只想在小新翻开牌的瞬间看看他翻到的是什么牌,然后计算自己可能获胜的几率。

输入描述:

多组输入,输入一个数字a(0<=a<=21)和一个数字b(0<=b<=1),a代表小新翻出来的牌的序号,b代表小新翻出卡的位序,b为0则为逆位,为1则为正位,如果输入为"-1 -1",终止输入。

输出描述:

输出格式为:a/b 该分式为最简式。中间的杠为字符“/”。如果结果为0,则输出“owatta”。如果已经获胜(小新的牌为逆位愚者)则输出“1”。
示例1

输入

复制
0 1

输出

复制
owatta




 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <vector>
 6 #include <queue>
 7 #include <set>
 8 #include <map>
 9 #include <string>
10 #include <cmath>
11 #include <cstdlib>
12 #include <ctime>
13 using namespace std;
14 typedef long long ll;
15 int  a,b;
16 int c[2]={1,-1};
17 int  main()
18 {
19     while(~scanf("%d%d",&a,&b)){
20         if(a==-1&&b==-1) break;
21         else if(a==0&&b==1){
22             printf("owatta\n");
23         }
24         else if(a==0&&b==0){
25             printf("1\n");
26         }
27         else{
28             int ret=0;
29             if(b==0) a=-a;
30             for(int  i=0;i<=21;i++){
31                 if(i==abs(a)) continue;//不放回
32                 if(i==0) {
33                     ret++;//抽到0时的逆位
34                     continue;
35                 }
36                 for(int j=0;j<2;j++){
37                     if(a+i*c[j]<0) ret++;
38                 }
39             }
40         if(ret==0){
41            printf("owatta\n");
42         }
43         else  if(ret==42){
44             printf("1\n");
45         }
46         else{
47             int g=__gcd(ret,42);
48             ret/=g;
49             printf("%d/%d\n",ret,42/g);
50         }
51         }
52     }
53     return  0;
54 }

猜你喜欢

转载自www.cnblogs.com/tingtin/p/9975344.html