hash表,模拟(Python)

不点两面(hard version)

https://www.nowcoder.com/practice/c49e65f6b73c491ab96840cbd230b2f1

思路:hash表 + 模拟。直接根据题意进行模拟即可,当对手加入牌的时候,就把加入到hash表中,注意需要判断下牌的范围是否在之间;同理,当对手拿走牌的时候,就分别把从hash表中减去一次,也是需要判断下牌的范围是否在之间,如果牌减完了就直接从hash表中删掉。最终,hash表的长度就是每一次操作后的答案,添加到out数组中,然后整体输出即可

代码:

import sys
from collections import defaultdict

input = lambda: sys.stdin.readline().strip()

import math
inf = 10 ** 18

def I():
    return input()

def II():
    return int(input())

def MII():
    return map(int, input().split())

def LI():
    return input().split()

def LII():
    return list(map(int, input().split()))

def LFI():
    return list(map(float, input().split()))

fmax = lambda x, y: x if x > y else y
fmin = lambda x, y: x if x < y else y
isqrt = lambda x: int(math.sqrt(x))

'''

'''

def solve():
    m, q = MII()

    out = []
    d = defaultdict(int)
    for _ in range(q):
        op, x = MII()
        if op == 1:
            if x - 3 >= 1:
                d[x - 3] += 1
            if x + 3 <= m:
                d[x + 3] += 1
        else:
            if x - 3 >= 1:
                d[x - 3] -= 1
                if d[x - 3] == 0:
                    del d[x - 3]
            if x + 3 <= m:
                d[x + 3] -= 1
                if d[x + 3] == 0:
                    del d[x + 3]
        out.append(str(len(d)))
    print('\n'.join(out))

t = 1
# t = II()
for _ in range(t):
    solve()
#每日一题挑战#
全部评论

相关推荐

老树开花:可以开始投了,不用等到觉得完全准备好。一边投一边根据面试反馈改简历是最高效的方式。简历上项目描述建议突出你解决的具体问题,比如编辑器的性能优化、大文档渲染怎么处理的,而不只是列技术栈。中厂前端实习现在竞争确实激烈,建议同时关注一些有AI业务的团队,前端加AI应用是很有差异化的组合。Vue全家桶基础扎实的话可以往SSR或者跨端方向延伸,这些是面试加分项。加油,时间还来得及。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务