Blog·Tanky WooABOUTRSS

HDOJ 2060 Snooker

08 Aug 2010
这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。

题目地址: 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”)

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


#include 

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;
}