BNU 三国杀

来源:互联网 发布:手机淘宝旺信在哪里 编辑:程序博客网 时间:2024/06/08 17:29

  《三国杀》是一款热门的桌上游戏,融合了西方类似游戏的特点,并结合中国三国时期背景,以身份为线索,以卡牌为形式,集合历史、文学、美术等元素于一身。
       相信很多人都玩过这款游戏,在此只对此问题做简单介绍:
       【杀】
       出牌阶段,攻击范围内对除自己以外的一名角色使用,效果是对该角色造成1点伤害。
       攻击范围是1。(当计算距离 D ≤ 1 时,可以使用【杀】)
       【马】
       - Num 【马】
       当该角色出【杀】计算与其他角色的距离时,始终 - Num。(可以理解为一种进攻上的优势)。
       + Num 【马】
       当其他角色出【杀】计算与该角色距离时,始终 + Num。(可以理解为一种防御上的优势)。
       (一角色最多装备一匹 - Num1 【马】 和 最多一匹 + Num2 【马】,可同时装备两种马。此处Num1 与 Num2 无关)
       由于《三国杀》理论上来说是可以没有人数限制的,所以你叫了 N 个人一起来玩,大家坐成了一圈,逆时针依次编号 1到 N,现给出M 个操作,每个操作是以下两种之一:

       "N1 S Num"——表示编号为N1 的玩家将要装备或替换一张【马】。
       S 为 "+" 或 "-" ; 
       "K A B" ——表示A对B使用一张【杀】询问A 能否杀到B 。
       能则输出 "Yes!" ,否则输出 "I'm sorry." 。
       如图,赵云装备有一张 +1 【马】。



       此时,赵云杀关羽时距离 D = 1 。而关羽想杀赵云时距离 D = 2 。

Input

第一行为T(1 ≤ T ≤ 10),表示测试数据组数。
每组数据第一行为两个整数N,M 。(2 ≤ N ≤ 1000 ,1 ≤ M ≤ 1000)
接下来有M 行,每一行格式为 
"N1 S Num" (1 ≤ N1 ≤ N , S 为 "+" 或 "-" ,1 ≤ Num ≤ 100,N1和Num均为整数)
或 "K A B" (1 ≤ A,B ≤ N,A ≠ B,A、B都是整数)
假定游戏中无人阵亡。

Output

对于为每组数据,先输出一行 "Case #C:",C 对应数据组数,C 从1 到 T 。
对于每一个格式为 "K A B" 的操作,则输出 "Yes!" 或 "I'm sorry." 。
每组数据之后有一个空行。

Sample Input

2
3 1
K 1 3
5 4
K 1 3
K 1 2
1 - 1
K 1 4

Sample Output

Case #1:
Yes!

Case #2:
I'm sorry.
Yes!
Yes!




此题我只能用无语来表达我的心情了 !!一道简单地模拟题,理论上是很容易过的,不过此oj实在是变态!!

字符转化为数字,是给判错的,用atoi瞬间就过了...花费我好长时间检查bug。现在贴ac代码。

  #include<iostream>#include<string.h>#include<algorithm>#include<stdio.h>#include<cmath>using namespace std;#define abs(x) ((x)<0?0-(x):(x))int min(int a,int b){return a<b?a:b;}int main(){    int T,i,j,n,hash1[1010],hash2[1010],tt=1,m,a,b,x;    char str[3];    cin>>T;    while(T--)    {        printf("Case #%d:\n",tt++);        scanf("%d%d",&n,&m);            for(i=1;i<=n;i++){            hash1[i]=0;            hash2[i]=0;            }        while(m--)        {            scanf("%s",str);            if(str[0]!='K')             {                b=atoi(str);//将字符串转化为数字                scanf("%s%d",str,&x);                if(str[0]=='-') hash1[b]=x;                else hash2[b]=x;            }            else             {                scanf("%d%d",&a,&b);                  //cout<<dis<<" "<<hash1[a]<<endl;                printf(hash1[a]+1>=hash2[b]+min(abs(a-b),n-abs(a-b))?"Yes!\n":"I'm sorry.\n");            }        }         cout<<endl;    }    return 0;}