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%内容,订阅专栏后可继续查看/也可单篇购买

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

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

全部评论

相关推荐

03-30 21:02
已编辑
武汉大学 Java
ALEX_BLX:虽然说聊天记录不可信,不过这个趋势确实如此但我觉得也要想到一点就是卷后端的人里真正有“料”的人又有多少,我说的这个料都不是说一定要到大佬那种级别,而是就一个正常的水平。即使是现在也有很多人是跟风转码的,2-3个月速成后端技术栈的人数不胜数,但今时不同往日没可能靠速成进大厂了。这种情况就跟考研一样,你能上考场就已经打败一半的人了
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务