H. Hearthstone So Easy
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
Hearthstone is a turn-based card game. The game flow of each round is: Player 1 draws card ⇒ player 1 plays cards ⇒ player 2 draws card ⇒ player 2 plays cards.
We simplify the game logic as follows:
- During each player’s draw stage, the player attempts to draw a card from his or her deck.
- During each player’s playing stage, the player can choose:
- to increase his/her health by k points. Note that there is no upper limit on health.
- to reduce the opponent’s health by k points.
When there are no cards in the player’s card deck, the player will enter a state of fatigue. At this time, the player will increase his/her fatigue value by one every times he/she tries to draw a card, and then deduct the amount of health by th****e fatigue value. The fatigue value of each player is initially 000 points.
pllj and freesin like playing hearthstone very much. In a certain game, both players have no cards in their decks, and both the fatigue points are 000 points, and the health points are both n points. When a player’s health is less than or equal to 000, the player immediately loses the game.
At this time, it’s pllj’s turn to draw card. Both players are very smart, so they play the game optimally. Who will be the winner? Please output his name.
输入描述:
The first line contains a single integer t (1≤t≤10^5), which represents the number of data cases.
Each test case is one line containing two positive integers n,k(1≤n,k≤10^9)separated by one whitespace, of which meaning is described before.
输出描述:
For each case of data, output a line of string pllj or freesin to indicate the winner.
Tag: math
Difficulty:5/10
思路:
有一点博弈的思想在里面,首先我们可以想到有四种情况: A加血, B也加血(情况一)、A打B B加血(情况二)、A加血 B打A(情况三)、A打B B打A(情况四); 因为A和B都是相同的血量,所以我们可以发现情况一和四拖疲劳的话肯定是A输(A是先手),而且因为A先吃疲劳,A必然会被B先打死 ; 所以A唯一的赢面就在于能否第一回合斩杀B,否则都是B赢。当然,记得特判只有1血时,A直接暴毙。
AC代码:
#include <iostream>
using namespace std;
int t;
int main() {
cin >> t;
while (t --) {
int n, k;
cin >> n >> k;
if (n == 1) cout << "freesin" << endl;
else if (1 + k >= n) cout << "pllj" << endl;
else cout << "freesin" << endl;
}
return 0;
}