每日一题(01.08)

Description:

编号为1~N的N位小朋友玩石头剪刀布游戏。亮出手势后在讨论游戏的结果时,他们以如下的形式表述:D X Y
如果D为1,表示编号为X的小朋友和编号为Y的小朋友手势相同。
如果D为2,表示编号为X的小朋友赢了编号为Y的小朋友。
由于他们是小朋友,可能会有人说假话。当满足以下三个条件之一时,判定这句话是假话:
1.当前的话与已经说出的真话矛盾;
2.X或Y比N大;
3.X赢了自己。
请你编程根据N和K句话,输出假话的数量。

Input:

第一行两个数N和K(1<=N<=50000,0<=k<=10000)。以下K行分别是D X Y。

Output:

假话的数量。

Sample Input:

100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5

Sample Output:

3

Reference Code (Python):

n,k=list(map(int,input().split()))
fake=0
win=[[] for i in range(n)]
same=[[] for i in range(n)]
while k:
    k-=1
    d,x,y=list(map(int,input().split()))
    if x>n or y>n or (d==2 and x==y):
        fake+=1
        continue
    if d==1 and (x in win[y-1] or y in win[x-1]):
        # 如果y赢了x,或者x赢了y,就矛盾,否则不矛盾。
        fake+=1
        continue
    if d==2 and (x in same[y-1] or x in win[y-1]):
        # 如果x和y一样,或者y赢了x,就矛盾,否则不矛盾。
        fake+=1
        continue
    if d==1 and x not in same[y-1] and x!=y:
        # x not in same[y-1]是为了防止读入相同数据,下同。
        same[x-1].append(y)
        same[y-1].append(x)
        for i in range(n):
            if i==x-1 or i==y-1:
                continue
            if x in same[i]:
                # i和x一样,x赢了y,则i赢了y。
                win[i].append(y)
            if y in same[i]:
                # i和y一样,x赢了y,则x赢了i。
                win[x-1].append(i+1)
    if d==2 and y not in win[x-1]:
        win[x-1].append(y)
        for i in range(n):
            if i==x-1 or i==y-1:
                continue
            if x in win[i]:
                # i赢了x,x赢了y,则y赢了i。
                win[y-1].append(i+1)
            if y in win[i]:
                # i赢了y,x也赢了y,则i和x一样。
                same[x-1].append(i+1)
                same[i].append(x)
print(fake)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值