【hpuoj】三国杀

问题 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;
} 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值