E卷-5键键盘-(100分)

E卷-刷题笔记合集🔗

问题描述

小兰有一个特殊的5键键盘,上面有 五个键。这些键的功能如下:

  • 键:在屏幕上输出一个字母a
  • :将当前选择的字母复制到剪贴板
  • :将当前选择的字母复制到剪贴板,并清空选择的字母
  • :将当前剪贴板里的字母输出到屏幕
  • :选择当前屏幕上的所有字母

注意以下规则:

  1. 剪贴板初始为空,新的内容被复制到剪贴板时会覆盖原来的内容
  2. 当屏幕上没有字母时, 无效
  3. 当没有选择字母时, 无效
  4. 当有字母被选择时, 这两个有输出功能的键会先清空选择的字母,再进行输出

请帮助小兰计算,给定一系列键盘输入后,最终屏幕上会显示多少个字母。

输入格式

输入为一行,用数字 分别代表 五个键的输入,数字用空格分隔。

输出格式

输出一个整数,表示最终屏幕上字母的数量。

样例输入1

1 1 1

样例输出1

3

样例输入2

1 1 5 1 5 2 4 4

样例输出2

2

样例解释

样例 解释说明
样例1 连续键入3个a,故屏幕上字母的长度为3。
样例2 输入两个a后ctrl-a选择这两个a,再输入a时选择的两个a先被清空,所以此时屏幕只有一个a。后续的ctrl-a,ctrl-c选择并复制了这一个a,最后两个ctrl-v在屏幕上输出两个a,故屏幕上字母的长度为2(第一个ctrl-v清空了屏幕上的那个a)。

数据范围

  • 输入的数字序列长度 满足
  • 输入的每个数字 满足

题解

这是一个模拟题,需要按照题目要求模拟键盘的操作过程。主要需要维护三个状态:

  1. 屏幕显示的内容:用一个数组或列表存储当前屏幕上的字母
  2. 剪贴板的内容:用一个数组或列表存储当前剪贴板中的内容
  3. 选择状态:用一个布尔值表示当前是否有内容被选中

关键点:

  1. 在有内容被选中的状态下,输入新内容(a或ctrl-v)会先清空选中内容
  2. ctrl-c和ctrl-x只在有内容被选中时才有效
  3. ctrl-a只在屏幕有内容时才有效
  4. 剪贴板的内容在复制时会覆盖原有内容

时间复杂度:,其中 是输入序列的长度。

参考代码

def solve():
    # 读取输入
    cmds = list(map(int, input().split()))
    
    # 初始化状态
    screen = []  # 屏幕显示的内容
    clip = []    # 剪贴板的内容
    selected = False  # 是否有内容被选中
    
    # 处理每个命令
    for cmd in cmds:
        if cmd == 1:  # 输入a
            if selected:
                screen.clear()
            screen.append('a')
            selected = False
        elif cmd == 2:  # ctrl-c
            if selected:
                clip = screen.copy()
        elif cmd == 3:  # ctrl-x
            if selected:
                clip = screen.copy()
                screen.clear()
                selected = False
        elif cmd == 4:  # ctrl-v
            if selected:
                screen.clear()
            screen.extend(clip)
            selected = False
        elif cmd == 5:  # ctrl-a
            if screen:
                selected = True
    
    # 输出结果
    print(len(screen))

if __name__ == "__main__":
    solve()
#include <iostream>
#include <vector>
using namespace std;

int main() {
    // 读取输入
 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法刷题笔记 文章被收录于专栏

本专栏收集并整理了一些刷题笔记

全部评论

相关推荐

金三银四就要来了,很多朋友可能都有求职、跳槽、找工作的打算,免不了要参加各种各样的面试。有些朋友明明很优秀,但因为面试时候太紧张,导致没有发挥好而错过很好的机会。分享一个能够帮助你在面试中减少紧张情绪的方法:反客为主。意思就是,不要把自己当作面试者,而要把自己当作面试官。大多数朋友在找工作的时候一个很常见的心态,就是非常希望应聘的公司能够给自己一个工作机会。这种心态当然没错,但如果心里总是期待着这个结果,很容易患得患失,在面试的时候也自然就会紧张。而如果你反过来想,这场面试不仅仅是公司在考察你,更是你近距离全面考察公司的机会:这家公司的业务到底行不行、未来的老板专业能力怎么样、管理风格又是怎样的、这个职位的工作内容具体是什么、对你的要求又是什么…这些都是你在面试中需要尽可能地去弄清楚的问题。千万不要看轻自己。你确实是在被公司挑选,你确实也希望自己能被面试官看中然后拿到这份工作,但这不是你需要特别关注的,更不是你能够控制的。对你来说,你更应该去关注的,是从自己出发,你是不是愿意和对面的这些人合作、这家公司是不是配得上你、是不是值得你短则一两年、长则三五年每天都在这里上班。这个方法的关键,就是把自己放在和公司平等的位置上。用这个心态去面试,不仅能有效缓解你的紧张,更能帮助你收集到更多对你有用的信息,更好地帮助你做出下一步决策。 #牛客激励计划# #牛客创作赏金赛#
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务