zoukankan      html  css  js  c++  java
  • 【模拟】第二届全国高校绿色计算大赛 预赛第二阶段(Python) 文本编辑器

    传送门

    这是一个模拟题,因为之前做过一个分块题目,直接想错了。纠结了好久,今天上午突然明悟过来

    题意

    image-20200825184537784
    image-20200825184537784

    思路

     看数据大小,直接模拟链表。
     最前和最后添加上一个节点,这样写起来比较好
     相当于复习了一遍 c 语言学的链表,写起来还是挺恶心的。

    代码

      1'''
    2Autor: valk
    3Date: 2020-08-19 18:23:25
    4LastEditTime: 2020-08-25 18:21:45
    5Description: 如果邪恶  是华丽残酷的乐章 它的终场 我会亲手写上 晨曦的光 风干最后一行忧伤 黑色的墨 染上安详
    6'''

    7class Task(object):#print
    8    def solver(self, s, p, ops):
    9        N = 3 * (10**5) + 10
    10        pre = [0 for i in range(N)]
    11        nex = [0 for i in range(N)]
    12        t = [0 for i in range(N)]
    13        aga = 0
    14        pre[aga] = -1
    15        nex[aga] = 1
    16        n = len(s)
    17        for i in range(len(s)):
    18            t[i + 1] = s[i]
    19            pre[i + 1] = i
    20            nex[i + 1] = i + 2
    21        en = n + 1
    22        pre[en] = n
    23        nex[en] = -1
    24        n += 1
    25        def insert(text):
    26            nonlocal n, pre, nex, aga, en, t, N, p
    27            rec = nex[p]
    28            nex[p] = n + 1
    29            pre[n + 1] = p
    30            for i in range(len(text)):
    31                n += 1
    32                t[n] = text[i]
    33                if i != 0:
    34                    pre[n] = n - 1
    35                nex[n] = n + 1
    36            nex[n] = rec
    37            pre[rec] = n
    38            p = n
    39        def back(l):
    40            nonlocal n, pre, nex, aga, en, t, N, p
    41            i = 1
    42            tmp = p
    43            while (i <= l and pre[tmp] != -1):
    44                tmp = pre[tmp]
    45                i += 1
    46            nex[tmp] = nex[p]
    47            pre[nex[p]] = tmp
    48            p = tmp
    49        def delete(l):
    50            nonlocal n, pre, nex, aga, en, t, N, p
    51            i = 0
    52            tmp = p
    53            while (i <= l and nex[tmp] != -1):
    54                tmp = nex[tmp]
    55                i += 1
    56            if tmp == p: # 特判这里,否则会死循环
    57                return
    58            nex[p] = tmp
    59            pre[tmp] = p
    60        def shiftL(l):
    61            nonlocal n, pre, nex, aga, en, t, N, p
    62            i = 1
    63            while (i <= l and pre[p] != -1):
    64                p = pre[p]
    65                i += 1
    66        def shiftR(l):
    67            nonlocal n, pre, nex, aga, en, t, N, p
    68            i = 1
    69            while (i <= l and nex[p] != en):# 这里不能跑到最后一个
    70                p = nex[p]
    71                i += 1
    72        for op in ops:
    73            if op[0] == 'I':
    74                insert(op[1])
    75            if op[0] == 'B':
    76                back(int(op[1]))
    77            if op[0] == 'D':
    78                delete(int(op[1]))
    79            if op[0] == 'L':
    80                shiftL(int(op[1]))
    81            if op[0] == 'R':
    82                shiftR(int(op[1]))
    83        now = nex[aga]
    84
    85        ans = ''
    86        while (now != en):
    87            ans += str(t[now])
    88            now=nex[now]
    89        return ans
    90'''
    91s = input()
    92pos = int(input())
    93t = int(input())
    94ops = []
    95for i in range(t):
    96    op = list(input().split())
    97    ops.append(op)
    98valk = Task()
    99print(valk.solver(s, pos, ops))
    100'''

    101'''
    102whatsyourproblem
    1035
    1046
    105L 2
    106D 1
    107R 4
    108I abcdef
    109L 3
    110B 2
    111'''

  • 相关阅读:
    ABAP-创建客户
    Windows 10 上的 Git 如何清除密码? Git Credential Manager for Windows
    FastAdmin 是如何利用 Git 管理插件代码的?
    关于 ThinkPHP5 使用 getBy 字段名方式获取数据
    如何开始一个电子硬件项目?(思维导图)
    随笔:关于 FastAdmin ueditor 插件 中的 rand mt_rand mt_getrandmax 问题
    Chrome 的应用功能越来越强大
    FastAdmin Bootstrap-Table 关于客户端模式(由 计算所有页的的总数引发的思考)
    随笔教程:FastAdmin 如何打开新的标签页
    odoo 数据库选择的随笔
  • 原文地址:https://www.cnblogs.com/valk3/p/13561348.html
Copyright © 2011-2022 走看看