首页 > 其他分享 >2022年十三届B组----试题F:消除游戏

2022年十三届B组----试题F:消除游戏

时间:2023-11-26 16:14:46浏览次数:28  
标签:删除 pos len ---- range 2022 十三届 节点 append

目录

题目

法一、切片

s=list(input())
j=0
while j < 2 ** 64:  #题目要求的操作次数
    pos = set()  #集合特性(去重)
    for i in range(1, len(s) - 1):
        if s[i] == s[i - 1] and s[i] != s[i + 1]:
            pos.add(i)#需要删除的下标存到集合
            pos.add(i + 1)
        if s[i] != s[i - 1] and s[i] == s[i + 1]:
            pos.add(i - 1)
            pos.add(i)
    if len(pos) == 0:#循环完如果集合没有数字,表示没有边缘字符
        print("".join(s))#把s转换成字符串打印
        break#跳出循环
    s1 = []#新建一个列表
    for p in range(len(s)):#把不在集合里面的元素添加到新的列表中
        if p not in pos:
            s1.append(s[p])
    s = s1.copy()
    pos.clear()#每次循环完以后清空集合
    if len(s) == 0:
        print("EMPTY")
        break
    j += 1
  • 12个测试只能通过7个

法二、双向链表

N=10**6+10
pos=[]   # 存储需要删除的节点位置
l,r=[0]*N,[0]*N  # 节点的左指针和右指针
st=[False]*N  # 节点状态,记录节点是否已删除
s=input()
n=len(s)
s="@"+s+"@"   # 在字符串开头和结尾添加特殊字符 "@",确保每个字符都有左右相邻字符,来处理边界情况
# 构建双向链表
for i in range(1,n+1):
    l[i]=i-1
    r[i]=i+1
# 查找所有边缘字符
def check(i):
    if s[l[i]]=="@" or s[r[i]]=="@":
        return
    if s[l[i]]==s[i] and s[r[i]]!=s[i]:
        pos.append(r[i])
        pos.append(i)
    if s[l[i]]!=s[i] and s[r[i]]==s[i]:
        pos.append(l[i])
        pos.append(i)

# 删除节点   
def remove(j):
    r[l[j]]=r[j]
    l[r[j]]=l[j]
    # 删除j结点,置为True
    st[j]=True

# 检查相邻重复字符并删除
for i in range(1,n+1):
    check(i)
while pos:
    ne=[]
    for p in pos:  # 如果节点已删除,则跳过
        if st[p]:continue
        remove(p)
        ne.append(l[p])
        ne.append(r[p])
    pos=[] 
    for e in ne:
        if not st[e]:
            check(e)
ans=""
for i in range(1,n+1):
    if not st[i]:# 如果节点未删除,则添加到结果字符串
        ans+=s[i]
if ans:
    print(ans)
else:
    print("EMPTY")

标签:删除,pos,len,----,range,2022,十三届,节点,append
From: https://www.cnblogs.com/lushuang55/p/17857287.html

相关文章

  • linux - find 查找文件
    1.-name在当前目录以及子目录中根据文件名进行查找find-name"apt.md"2.-iname忽略大小写进行查找find-iname"apt.md"3.-mindepth,-maxdepth设置从根目录下查找的目录层级find/-mindepth3-maxdepth5-namepasswd4.-exec对查找到的文件执行命令find-name......
  • 【HITCTF2023】MISC1&2 WriteUp
    MISC1-leftoverfileThereistrafficpacketcapturedbyengineersontheintranetonthecontrolledmachine.Pleaseanalyzethetrafficpacketandobtaintheflag.拿到一个捕获文件,有大量Modbus/TCP协议的流量,并且从192.168.181.132<-->192.168.181.5的最多。......
  • CodeTON Round 7 (Div. 1 + Div. 2, Rated, Prizes!)
    CodeTONRound7(Div.1+Div.2,Rated,Prizes!)A-JaggedSwaps解题思路:若\(a[1]=1\),则可以。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;typedefpair<int,int>pii;#definefifirst#definesesecondvoidsolve(){......
  • WPS加载EndNote X9插件
    参考官方教程,针对EndNoteX9版本修改1、关闭WPS。2、找到路径C:\ProgramFiles(x86)\EndNoteX9\Product-Support\CWYW,将Cwyw_X86.dat的后缀修改为.zip注意这里是把Cwyw_X86.dat重命名为Cwyw_X86.zip,不是把Cwyw_X86.dat文件压缩成Cwyw_X86.zip3、新建目录C:\ProgramFiles(x......
  • Jmter - Concurrency Thread Group
    目录介绍参数介绍介绍特点:ConcurrencyThreadGroup提供了用于配置多个线程计划的简化方法该线程组目的是为了保持并发水平,意味着如果并发线程不够,则在运行线程中启动额外的线程和StandardThreadGroup不同,它不会预先创建所有线程,因此不会使用额外的内容对于SteppingThr......
  • 学习笔记11
    第13章TCP/IP和网络编程一、知识点归纳一、网络编程简介计算机网络:将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,实现资源共享和信息传递的计算机系统。网络编程:在网络通信协议下,不同计算机上运行的程序可以进行数据传输。二、TCP/IP协议......
  • 员工管理系统简洁版
    【一】需求介绍用户可以注册,并将注册信息临时保存起来,登陆时可根据指定用户名或密码进行登陆设定好用户名和密码,用户通过输入指定的用户名和密码进行登陆最大尝试次数:用户最多尝试猜测3次最大尝试次数后:如3次后,问用户是否继续登陆如果回答Y或y,就再给3次机会,提示【还剩最后......
  • 用户登录注册升级版
    【一】需求介绍用户可以注册,并将注册信息临时保存起来,登陆时可根据指定用户名或密码进行登陆设定好用户名和密码,用户通过输入指定的用户名和密码进行登陆最大尝试次数:用户最多尝试猜测3次最大尝试次数后:如3次后,问用户是否继续登陆如果回答Y或y,就再给3次机会,提示【还......
  • clickhouse infoes
    我们可以使用下面的查询来获取关于表的元数据:SELECTpart_type,path,formatReadableQuantity(rows)ASrows,formatReadableSize(data_uncompressed_bytes)ASdata_uncompressed_bytes,formatReadableSize(data_compressed_bytes)ASdata_compressed_......
  • 用户登录注册简洁版
    【一】需求介绍设定好用户名和密码,用户通过输入指定的用户名和密码进行登陆最大尝试次数:用户最多尝试猜测3次最大尝试次数后:如3次后,问用户是否继续登陆如果回答Y或y,就再给3次机会,提示【还剩最后三次机会】3次都猜错的话登录结束如果回答N或n,登陆结束!如果格式输入错误,提示......