2021 Jiangxi Provincial Collegiate Programming Contest - H. Hearthstone So Easy

题意:

p l l j pllj pllj f r e e s i n freesin freesin 初始各拥有 n n n 滴血,每一回合由两个玩家先后进行,例如第 i i i 回合:

  1. 玩家先减去自身 i i i 滴血;
  2. 玩家选择自身血量 + k +k +k 或者 对方血量 − k -k k;

给定 n n n k k k p l l j pllj pllj先手,双方都保持最优策略,求必胜方?

分析:

首先明确两点:

  1. 每一回合开始前,双方的血量是一致的;
  2. 同一回合中,先手干不掉后手,后手也无法在同回合干掉先手;

第一回合结束游戏的情况有:

  1. n = 1 n=1 n=1 :此时先手必败
  2. n < = k + 1 n<=k+1 n<=k+1 :此时后手必败,显然,先手扣完一点血后选择扣掉后手 k k k 点血,后手要么直接 G G GG GG,要么轮到后手了直接扣完最后一点再 G G GG GG

一回合结束不了游戏的话,我们假设第 i + 1 i+1 i+1 回合 先手终于可以干掉后手,那么第 i i i 回合显然先手还干不掉后手;

设第 i + 1 i+1 i+1 回合开始之前双方血量为 H H H
H H H 的约束为:

  • H > i + 1 H>i+1 H>i+1 H < = k + i + 1 H<=k+i+1 H<=k+i+1
    意思是先手减去 i + 1 i+1 i+1 点血量,然后选择扣掉后手 k k k 点血,轮到后手再扣自身 i + 1 i+1 i+1 点血量,所以区间 ( i + 1 , k + i + 1 ] (i+1,k+i+1] (i+1,k+i+1] 内的血量,先手在第 i + 1 i+1 i+1 回合可以干掉后手;

设第 i i i 回合先手减去自身 i i i 滴血后剩余血量为 h h h
h h h 的约束为:

  • h > k h>k h>k,显然 ,因为第 i i i 回合结束不了

再来枚举 h h h 的具体情况:

  1. h < = i + 1 h<=i+1 h<=i+1 ,先手必败(先手无论怎么操作,后手都可以让这回合结束剩余的血量 < = h <=h <=h
  2. h > i + 1 h>i+1 h>i+1
    ①:先手选择自身血量 + k +k +k ,则后手可以选择自身血量 + k +k +k ,则回合结束后血量
    H 0 = h + k > i + 1 + k H_0=h+k>i+1+k H0=h+k>i+1+k ,不满足约束;
    ②:先手选择对方血量 − k -k k h − k < = i + 1 h-k<=i+1 hk<=i+1 ,先手必败,显然后手可以让回合结束剩余的血量 < = i + 1 <=i+1 <=i+1
    ③:先手选择对方血量 − k -k k h − k > i + 1 h-k>i+1 hk>i+1 ,即 h > i + 1 + k h>i+1+k h>i+1+k ,后手可以选择自身血量 + k +k +k ,使得 H 1 = h > i + 1 + k H_1=h>i+1+k H1=h>i+1+k ,不满足约束;

综上所述,不存在 h h h 满足 H H H ,即不存在第 i + 1 i+1 i+1 回合 先手终于可以干掉后手,第 i i i 回合先手干不掉后手的情况,所以先手只能在第一回合干掉后手,否则后手必胜。

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,k,t; 
	cin>>t;
	while(t--) {
		cin>>n>>k;
		if(n>1&&1+k>=n) cout<<"pllj";
		else cout<<"freesin";
		cout<<endl;
	}
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值