zoukankan      html  css  js  c++  java
  • 计蒜客NOIP模拟赛(2) D1T1邻家男孩

    凡是一个具有领导力的孩子。现实生活中他特别喜欢玩一个叫做 UNO 的纸牌游戏,他也总是带着其他小朋友一起玩,然后战胜他们。慢慢地,他厌倦了胜利,于是准备发明一种新的双人纸牌游戏。

    初始时,每个人手中都有若干张牌(也可能没有),然后由凡开始轮流出牌,当轮到自己出牌的时候,可以选择:

    1. 出一张牌使得待定分数加 111。
    2. 不出牌,对方的得分加上现在的待定分数,然后待定分数变为 000。

    无论选择什么,接下来都轮到对手出牌。

    为了能让这个游戏进行下去,假如现在的待定分数为 000,当前出牌的人就不能选择不出牌,除非他没有手牌了。

    当然作为一个竞技类纸牌游戏,你的得分减去对手的得分自然越高越好。

    凡依旧在不断的赢啊赢,直到一个带着面具的邻家男孩出现,成为了他旗鼓相当的对手,慢慢地,凡觉得自己玩不过那个男孩了,因为他总是会使用最优策略……于是他来向你求助,希望你也能帮他使用最优策略!

    输入格式

    第一行一个正整数 TTT,代表凡向你求助的次数。

    接下来 TTT 行,每行两个非负整数 A,BA,BA,B。AAA 代表凡的手牌数量,BBB 代表邻家男孩的手牌数量。

    输出格式

    对于每次求助,输出每行一个整数,表示在双方都使用最优策略情况下,凡的得分减去邻家男孩得分的值。

    数据范围与约定

    样例解释

    凡先打出一张牌,对方不出牌,手牌数为 3,1,得分为 1,0

    凡再打出一张牌,对方不出牌,手牌数为 2,1,得分为 2,0

    凡接着打出一张牌,对方不出牌,手牌数为 1,1,得分为 3,0

    凡只能再打出一张牌,对方出牌,手牌数为 0,0,得分为 3,2

    可以证明双方都没有更好的策略

    样例输入

    1
    4 1

    样例输出

    1
    博弈
    因为两边都按最优行动,所以在牌少时,必定不会出牌,因为出牌只会使待定数增加,最后被对方
    收走,等到对方消耗下来再出击
    还有一个规则:当待定数=0时,必出牌,可以理解为一个人不出,那么下一次必出

    所以,在有人没牌时A-B,否则A-B-2
    举个例子A=5,B=3,打出的牌计为2,未打出为1
    111 ------ 111
    11111 ------/00111
    解释:因为待定数为0必取,所以B在遵循最优策略时,前A-B的部分会让给A,A:2
    接下来
    111
    00011
    形成了B多A少情况,A:3 B:0
    011
    00011
    B拿1分,A:3 B:1
    001
    00011
    A:3 B:2
    01
    00001
    A:4 B:2
    最后一步很关键,无论如何B都拿2分
    A<B时也差不多

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int T,a,b,i;
     5 int main()
     6 {
     7    cin>>T;
     8     for (i=1;i<=T;i++)
     9     {
    10         scanf("%d%d",&a,&b);
    11         if (a==0||b==0) printf("%d
    ",a-b);
    12         else printf("%d
    ",a-b-2);
    13     }
    14 }
  • 相关阅读:
    第四周上机作业
    第三周作业
    java第十二周作业
    java第十二周随堂
    java第十一周作业
    java第十一周随堂
    java第十周随堂
    java第九周随堂
    java第八周作业
    java第八周随堂
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/7444441.html
Copyright © 2011-2022 走看看