【题目】
我爱三国杀
Description
这是一道跟三国杀有关的题目,
为了照顾没有玩过三国杀的同学,我们对游戏机制进行了化简。
牌堆:所有玩家从牌堆摸牌,每人每回合摸取两张牌,当牌堆被抽完后,视为平局。(每回合 每人一次性抽取两张)
基础牌:杀、闪,每回合最多使用一张杀
装备牌:+1马、-1马,每名角色最多装备一匹加一马和一匹减一马。
手牌:在手里留存的卡牌,装备在身上的装备牌和需要判定的延迟类锦囊皆不算手牌。 玩家可决定出牌顺序,如 你可以先装备减一马来减小双方距离。
武将技能:每个武将都有他专属的武将技能,合理运用技能可以获得额外的功效武将
血量:在不计入某些武将技能的前提中,武将血量归零将代表濒死。武将血量还代表了您的存牌量。例如在武将1 血的情况下您在回合弃牌阶段后最多只能留有1 张手牌。
距离:武将角色之间默认距离为1 ,-1马来拉近角色之间的攻击距离。武将角色在没有装备-1马时只能攻击距离为一的其他角色。所以+1马会使没有-1马的对手不能对你使用杀(既在你的回合内,如果你的手牌中有杀,你可以弃置一张杀,对一名在你攻击范围内的角色发动一次攻击,如果被攻击角色不能弃置闪来响应,则会被扣除一点体力值,如果体力值小于等于零 则进行濒死判断)
为了再对问题进行化简,我们假定三国杀只有周泰这一个武将。
他的技能为:不屈:每当你扣减1点体力后,若你体力值为0,你可以从牌堆亮出一张牌置于你的武将牌上。若此牌的点数与你武将牌上已有的任何一张牌都不同,你不会死亡。(但视你体力为0)若出现相同点数的牌,你进入濒死状态。
(既,假设你现在只有一滴血,你的对手对你使用“杀”手牌,你无法使用“闪”进行响应你的体力值归零,然后武将技能发动,你抽取一张牌堆顶的牌,假设这张牌点数为6,你将之置于你的武将牌之上。因为是第一次发动技能,你可以直接跳过濒死判定。假设在经历了多次技能发动后,你的武将牌上有了 “1”“2”“3”“4”“5”“6”“7” 这七种点数的牌。现在 你又进入了濒死状态,然后 你抽到一张点数为“5”的牌,由于现在已经有点数相同的牌了,如果不出意外,你直接死亡,对手获胜。)
现在 yx正在进行一场生死1v1对抗,已经进展到白热化阶段。双方使用周泰,体力值均为0,且均只有一张不屈牌。(这意味着,你不能在回合外存有手牌,也就是说,对方使用杀,你只能损失体力值)现在yx首先开始回合。
给出牌堆的所有信息,问你最后结果如何
。假设双方有杀出杀,有马装马。
Input
第一行输入一个整数n ,n<=500,表示牌堆中牌堆的数量。
第二行为n个字符从左到右依次表示牌堆顶到牌堆底的牌的类型。s 表示闪,a表示杀,+表示+1马,-表示-1马
第三行为n个1-9的数字,每张牌对应的点数。
第四行为两个1-9的数字。 第一个数字为yx的第一张现有不屈牌,第二个数字为yx的对手的第一张现有不屈牌。
Output
输出一行,
如果是平局,则输出ping
如果yx率先杀死对手 这输出win
否则 输出lose
Sample Input 1
11 saa+asasasa 11111111111 2 2
Sample Output 1
ping
Sample Input 2
3 saa 111 1 1
Sample Output 2
ping
Sample Input 3
4 saaa 1111 1 1
Sample Output 3
win
Hint
对于第一个样例
首先yx先动,摸到一闪一杀,杀了对手一下,
对手抽取一张濒死牌(点数为1的杀)这是对手第一张点数为1的濒死牌。所以对手不会去世。yx回合结束,弃置所有手牌。
之后到对手回合,抽取一张加一马,和一张杀。
对手装备+1马,对yx使用一张杀。
yx抽取一张濒死牌(点数为1的杀)这是yx第一张点数为1的濒死牌。所以yx不会去世.
之后yx回合打不到对手了。弃置其手牌。
对手回合,抽取一杀一闪,杀了yx一下,抽取一张不屈牌,现在yx有两张点数为1的不屈牌了。 你以为yx已经输了吗?当然没有,这时候牌堆刚好抽完,yx苟到了平局。
输出ping
【思路】yxdl出的模拟题..打的时候wa了10发,多打了个else if然后就炸裂了..晚上1发A...还是太菜了
【代码】
#include<bits/stdc++.h>
using namespace std;
const int M=2e5+10;
int main()
{
int n;
cin>>n;
char p[505];
char s[505];
bool yxbq[15]= {0};
bool dbbq[15]= {0};
cin>>p;
cin>>s;
int t1;
cin>>t1;
yxbq[t1]=1;
cin>>t1;
dbbq[t1]=1;
bool person=0;
int nowcard=0;
bool yxaddhs=0,dbaddhs=0,yxdwnhs=0,dbdwnhs=0;
while(1)
{
char x=p[nowcard];
char y=p[nowcard+1];
nowcard=nowcard+2;
if(nowcard>=n-1)
{
cout<<"ping"<<endl;
break;
}
if(person==0)
{
if(x=='+'||y=='+')
{
yxaddhs=1;
}
if(x=='-'||y=='-')
{
yxdwnhs=1;
}
if(x=='a'||y=='a')
{
if(yxdwnhs==1||dbaddhs==0)
{
if(dbbq[s[nowcard]-48]==1)
{
cout<<"win"<<endl;
break;
}
dbbq[s[nowcard]-48]=1;
nowcard++;
}
}
}
else
{
if(x=='+'||y=='+')
{
dbaddhs=1;
}
if(x=='-'||y=='-')
{
dbdwnhs=1;
}
if(x=='a'||y=='a')
{
if(dbdwnhs==1||yxaddhs==0)
{
if(yxbq[s[nowcard]-48]==1)
{
cout<<"lose"<<endl;
break;
}
yxbq[s[nowcard]-48]=1;
nowcard++;
}
}
}
person^=1;
}
}