2021 ICPC 江西省 H. Hearthstone So Easy 详解(博弈论,分类讨论,推式子,逆推)

13 篇文章 0 订阅
5 篇文章 0 订阅

H. Hearthstone So Easy

分析:

  • 博弈题(不知道算啥博弈)

  • 可以发现:不管先后手如何操作,一轮回和结束之后(两者都活着)两者的血量都是一样的

  • 考虑先手如何才能取胜:

    • 先手必须要尽快扣死后手,不然拖到下一轮,先手抽卡阶段就有可能被扣死
    • 故,先手最优解,会一直选择扣后手的血
  • 考虑后手如何才能取胜:

    • 后手不可能直接扣死先手,若存在这种情况,先手能更先扣死后手,故矛盾

      因此,后手只能跟先手耗时间,等着某一回合结束的下一回合,先手抽卡阶段直接被扣死

    • 故,后手只会在倒数第二轮扣先手血,然后到最后一轮先手抽卡阶段直接被扣死

      其他回合,后手会一直奶自己

  • 考虑先手在第m回合取胜,根据最优解来选择,则有以下不等式:

    { n − m ( m + 1 ) 2 > 0   ( 先 手 血 量 ) n − m ( m + 1 ) 2 − k < = 0   ( 后 手 血 量 , 第 m 回 合 还 没 来 及 奶 自 己 就 死 了 ) \begin{cases} n-\frac{m(m+1)}{2}>0\ (先手血量)\\ n-\frac{m(m+1)}{2}-k<=0\ (后手血量,第m回合还没来及奶自己就死了)\\ \end{cases} {n2m(m+1)>0 ()n2m(m+1)k<=0 (,m)
    (第 m m m 轮先手选择扣后手,后手没机会操作就没了)

    m ( m + 1 ) 2 \frac{m(m+1)}{2} 2m(m+1) 表示前 m m m 轮抽卡扣的血

  • 但是这样考虑肯定不够,先手能进行第 m m m 轮操作有个大前提:

    m − 1 m-1 m1 轮,后手选择扣先手,然后在第 m m m 轮的抽卡阶段,先手不会直接被扣死

    n − m ( m − 1 ) 2 − k − m > 0 n-\frac{m(m-1)}{2}-k-m>0 n2m(m1)km>0 , 发现了没???

    这个式子左半部分与后手血量一样,且矛盾了

    故,先手没有在第一轮扣死后手,必败!!!

  • 吐槽一下:比赛的时候也是误打误撞,就直接想着后手一直给自己加血,然后也推出来先手胜矛盾了

    当时,愣了老半天没反应过来,验算了三遍,才反应过来矛盾就说明先手不能够必胜这个道理

#include <bits/stdc++.h>
using namespace std;

signed main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int n,k;
        cin>>n>>k;
        if(n==1) cout<<"freesin"<<endl; // 巨坑,边界,就离谱,多wa一发,还整得差点直接放弃了
        else if(1+k>=n) cout<<"pllj"<<endl;
        else cout<<"freesin"<<endl;
    }
}
  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yezzz.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值