问题 I: 三国杀
时间限制: 1 Sec 内存限制: 128 MB提交: - 解决: - 状态
题目描述
《三国杀》是一款热门的桌上游戏,该游戏融合了西方类似游戏的特点,并结合中国三国时期背景,以身份为线索,以卡牌为形式,合纵连横,经过一轮一轮的谋略和动作获得最终的胜利。三国杀集合历史、文学、美术等元素于一身,在中国广受欢迎。
为了感受《三国杀》的魅力,KACA分析了游戏的流程。
游戏中的基础攻击卡牌是【杀】(出牌阶段,对攻击范围内除自己以外的一名角色使用,效果是对该角色造成1点伤害。)。
现在KACA假设了一种情况,现在有若干名玩家进行游戏,武将皆为白板,有若干条操作,KACA想知道操作后会产生什么结果。
已知攻击范围默认为1,相邻座位的玩家默认距离为1。
此外还有两种马具:
+h可使当其他角色出【杀】计算与该角色距离时,始终+h。
-h可使当该角色出【杀】计算与其他角色距离时,始终-h。
当然,一个角色最多只能装备一匹-h马和一匹+h马,若已有马具,再次装备同类型则会把之前的马具替换掉。
输入
多组测试数据。
第一行是两个数字n,m(2≤n≤1000,1≤m≤1000)分别代表玩家数量和操作次数。
下面m行有两种形式
1.某个玩家装备了一匹马,i P h(1≤i≤n,P为+或-,h(1≤h≤n)代表该马可提供的距离)
2.询问玩家A能否杀玩家B,K A B(K为一个字符,1≤A,B≤n)
输出
对于每组数据中的每次询问,若玩家A可以对玩家B出杀,则输出“No.# Can”,否则输出“No.# Cann't”,#代表A的编号。
样例输入
5 3
K 1 3
1 - 1
K 1 3
样例输出
No.1 Cann't
No.1 Can
作为一个不玩三国杀的人,在某学长的科普下,理解错了三次题意;
花了一下午做这道并没有难度的题真是非常的……不知道该如何形容。
总之这类益智游戏,在下的智商可能真的有瓶颈。
//提醒一下注意三国杀是坐成一圈玩的
//玩游戏的人数可不是10人以内。
//一人能装备两种马具。(可能只有垃圾如我才读不懂题);
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){
int flag1[1005]={0};
int flag2[1005]={0};
char s[5],v;
int o,l;
for(int i=0;i<m;i++){
getchar();
scanf("%s",s);
int r,j;
if(s[0]=='K')
{
scanf("%d%d",&r,&j);
if(r==j)printf("No.%d Cann't\n",r);
else{
if(r>j)
l=min(r-j,n+j-r);
else
l=min(j-r,n+r-j);
if(l+flag2[j]<=1+flag1[r])printf("No.%d Can\n",r);
else printf("No.%d Cann't\n",r);
}
}
else{
int k=strlen(s);
int t=0;
for(int b=0; b<k; b++)
t=t*10+s[b]-'0';
getchar();
scanf("%c%d",&v,&o);
if(v=='-')
flag1[t]=o;
else flag2[t]=o;
}
}
}
return 0;
}