HDOJ 2060 Snooker

题目地址:
http://acm.hdu.edu.cn/showproblem.php?pid=2060


这题恐怕看了题目,就有一大半的人要放弃把。。。
网上COPY了一个翻译:
问题分析
Problem Analyse 背景:
当菲利普要放松一下自己的时候,他喜欢去玩QQ里的斯诺克游戏,虽然他还只是个小菜鸟。也许你还不知道这个游戏的规则,没关系,我会先为你介绍。一共有21个球在台面上,其中包括15个红球和6个彩球:黄、绿、褐、蓝、粉、黑。选手需要用一个白球来使这些球滚进洞里,那些球所代表的值的和就是他的得分。选手必须先把一个红球打进洞里,然后它得到红球相应的分值(1分),然后他就有一次机会去选择打一个彩球。在红球还未全部打进洞里之前,打进去的彩球需要重新拿出来。换句话说,也就是最后桌上将会只留下彩球。选手按下面的顺序来击球:黄(2分)、绿(3分)、褐(4分)、蓝(5分)、粉(6分)、黑(7分)。这时候把彩球打进洞里,它们不会被拿出来。当桌面上没有球留下的时候,比赛结束。分数高的选手获胜。PS:红球不会重新拿出。我仅仅只阐述了一下规则,如果你希望了解更多的资料,请浏览:http://sports.tom.com/snooker/
例如,桌台上还有12个红球(如果还有红球留在台面上,表示所有的彩球一定也都留在台面上)。我假设菲利普能继续击球,他能得到的最大分数是: 12 * 1(一次性打掉12个红球) + 7 * 12(每打完一个红球就打黑球) + 2 + 3 + 4 + 5 + 6 + 7(没有红球剩下时,就打所有的彩球)。现在,你的任务就是在菲利普告诉你现在台面上的情况(有多少个球还留在台面上)后判断一下他是否需要放弃这局比赛。如果他还有获胜的机会,就输出“Yes”,否则输出“No”。 (PS:如果他最大可能的得分加上现在的分数等于对手的分数,依然输出“Yes”)

水题吧?~~~简单的数学题


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
#include <stdio.h>
 
int main(void)
{
    int t, n, s1, s2;
 
    scanf("%d", &t);
    while (t-- && scanf("%d%d%d", &n, &s1, &s2))
    {
        s1 += n > 6 ? 8 * (n - 6) : 0;
        s1 += n > 6 ? 27 : n * (15 - n) / 2;
        puts(s1 >= s2 ? "Yes" : "No");
    }
 
    return 0;
}

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

发表评论

电子邮件地址不会被公开。 必填项已用*标注