【2022寒假精进训练-8】7-9 包装机
一种自动包装机的结构如图 1 所示。首先机器中有 N 条轨道,放置了一些物品。轨道下面有一个筐。当某条轨道的按钮被按下时,活塞向左推动,将轨道尽头的一件物品推落筐中。当 0 号按钮被按下时,机械手将抓取筐顶部的一件物品,放到流水线上。图 2 显示了顺序按下按钮 3、2、3、0、1、2、0 后包装机的状态。
图1 自动包装机的结构
图 2 顺序按下按钮 3、2、3、0、1、2、0 后包装机的状态
一种特殊情况是,因为筐的容量是有限的,当筐已经满了,但仍然有某条轨道的按钮被按下时,系统应强制启动 0 号键,先从筐里抓出一件物品,再将对应轨道的物品推落。此外,如果轨道已经空了,再按对应的按钮不会发生任何事;同样的,如果筐是空的,按 0 号按钮也不会发生任何事。
现给定一系列按钮操作,请你依次列出流水线上的物品。
输入格式:输入第一行给出 3 个正整数 N(≤100)、M(≤1000)和 S$_{max}$(≤100),分别为轨道的条数(于是轨道从 1 到 N 编号)、每条轨道初始放置的物品数量、以及筐的最大容量。随后 N 行,每行给出 M 个英文大写字母,表示每条轨道的初始物品摆放。
最 ...
【2022寒假精进训练-8】7-13 二叉搜索树的结构
二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树。(摘自百度百科)
给定一系列互不相等的整数,将它们顺次插入一棵初始为空的二叉搜索树,然后对结果树的结构进行描述。你需要能判断给定的描述是否正确。例如将{ 2 4 1 3 0 }插入后,得到一棵二叉搜索树,则陈述句如“2是树的根”、“1和4是兄弟结点”、“3和0在同一层上”(指自顶向下的深度相同)、“2是4的双亲结点”、“3是4的左孩子”都是正确的;而“4是2的左孩子”、“1和3是兄弟结点”都是不正确的。
输入格式:输入在第一行给出一个正整数N(≤100),随后一行给出N个互不相同的整数,数字间以空格分隔,要求将之顺次插入一棵初始为空的二叉搜索树。之后给出一个正整数M(≤100),随后M行,每行给出一句待判断的陈述句。陈述句有以下6种:
A is the root,即”A是树的根”;
A and B are siblings,即”A和B是兄弟结点”;
A is the par ...
【2022寒假精进训练-8】7-11 病毒溯源
病毒容易发生变异。某种病毒可以通过突变产生若干变异的毒株,而这些变异的病毒又可能被诱发突变产生第二代变异,如此继续不断变化。
现给定一些病毒之间的变异关系,要求你找出其中最长的一条变异链。
在此假设给出的变异都是由突变引起的,不考虑复杂的基因重组变异问题 —— 即每一种病毒都是由唯一的一种病毒突变而来,并且不存在循环变异的情况。
输入格式:输入在第一行中给出一个正整数 N(≤10^4^),即病毒种类的总数。于是我们将所有病毒从 0 到 N−1 进行编号。
随后 N 行,每行按以下格式描述一种病毒的变异情况:
1k 变异株1 …… 变异株k
其中 k 是该病毒产生的变异毒株的种类数,后面跟着每种变异株的编号。第 i 行对应编号为 i 的病毒(0≤i<N)。题目保证病毒源头有且仅有一个。
输出格式:首先输出从源头开始最长变异链的长度。
在第二行中输出从源头开始最长的一条变异链,编号间以 1 个空格分隔,行首尾不得有多余空格。如果最长链不唯一,则输出最小序列。
注:我们称序列 { a$_1$,⋯,a*$_n$ } 比序列 { *b$_1$,⋯,b$_n$ } “小”,如果存在 1≤k ...
【2022寒假精进训练】天梯赛经验分享
天梯赛经验分享诚信应考,千万不要作弊!!!千万不要作弊!!!千万不要作弊!!!
天梯赛是一人作弊,取消全校成绩,作弊即社死
知识相关基础L1-10题(100分)L1题目基本不涉及数据结构,最难的就是字符串处理题和数学模拟题(大数)
掌握STL容器和函数的使用就可以了(string、vector、set、multiset、map、unodered_map、stack、queue)
如果理解了指针和迭代器,灵活使用<algorithm>头文件的函数会便捷很多
L1经常出现想象不到的特殊情况,导致一两个测试点无法通过;有时也会出一些非常麻烦的字符串处理题
L1-064 估值一亿的AI核心代码 (20 分)
L1-046 整除光棍 (20 分)
进阶L2-4题(100分)L2肯定会涉及到数据结构和算法(动态规划从没考过),大多为模拟题和少部分的数据结构题
情景模拟题不会直接说明考察什么数据结构,需要自己看清问题本质(排序、树的DFS、图的遍历、图的最短路径、并查集等等)
如果是数据结构题,往往都比较难,一般是硬性的知识点(也就是没学过基本肯定不会的那种,例如:中缀式转后缀式、堆、 ...
【2022每日分享day28】插件Vimium分享
河北大学2022寒假萌新程序设计训练每日知识分享-day28
每日分享—— 插件Vimium分享Vimium —— 一个支持全键盘操作浏览器的辅助工具
Vimium是一款Chrome上的插件,是Vim和Chromium的结合,可以帮助用户完全脱离鼠标,通过使用一系列快捷键来操作浏览器。Vim是一个著名的功能强大、高度可定制的Linux等平台上的文本编辑器,它可以让你彻底脱离鼠标,通过一系列快捷键,来操作任何一件事情。而Vimium则继承了Vim 中的常用键位,让你在使用Chrome的过程中,无论是浏览网页、切换标签或是其它任何操作,全都可以只通过键盘完成。Vimium实际上可以理解成是一系列快捷键配置,你可以通过这些快捷键来完成对应的操作。虽然快捷键比较多,但常用的不多,而且使用几次后很容易上手。
官网地址:http://vimium.github.io/
可以在群文件下载压缩包,然后再浏览器中使用该扩展工具
【2022每日分享day27】单调栈&单调队列
河北大学2022寒假萌新程序设计训练每日知识分享-day27
每日分享——单调栈&单调队列1.核心思想利用栈和队列的单调性质,优化枚举区间内极值O(n)的时间复杂度到O(1)
2. 问题特征(1)区间内的极值(最大值,最小值)(2)找当前数左(右)边第一个比当前数大(小)的数
3. 分析流程step1: 先利用普通栈(队列)给出解法step2: 删除冗余的元素,得到具有单调性的栈和队列step3: 优化枚举元素的O(n)的时间复杂度到O(1)
4. 代码模板1234567891011121314151617181920212223242526272829303132单调栈:for(int i = 0, j = x; i < n; i++){ //栈不空&&冗余元素性质 while(!is_empty() && check(a[front()], a[i])) pop(); //找到目标元素 if(!is_empty()){ xx } else { ...
【2022寒假精进训练-7】7-15 喊山
喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤。呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的。原来它是彝族先民用来求援呼救的“讯号”,慢慢地人们在生活实践中发现了它的实用价值,便把它作为一种交流工具世代传袭使用。(图文摘自:http://news.xrxxw.com/newsshow-8018.html)
一个山头呼喊的声音可以被临近的山头同时听到。题目假设每个山头最多有两个能听到它的临近山头。给定任意一个发出原始信号的山头,本题请你找出这个信号最远能传达到的地方。
输入格式:输入第一行给出3个正整数n、m和k,其中n(≤10000)是总的山头数(于是假设每个山头从1到n编号)。接下来的m行,每行给出2个不超过n的正整数,数字间用空格分开,分别代表可以听到彼此的两个山头的编号。这里保证每一对山头只被输入一次,不会有重复的关系输入。最后一行给出k(≤10)个不超过n的正整数,数字间用空格分开,代表需要查询的山头的编号。
输出格式:依次对于输入中的每个被查询的山头,在一行中输出其发出的呼喊能够连锁传达 ...
【2022寒假精进训练-7】7-11 深入虎穴
著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报。已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门。每一扇门背后或者是一个房间,或者又有很多条路,同样是每条路通向一扇门…… 他的手里有一张表格,是其他间谍帮他收集到的情报,他们记下了每扇门的编号,以及这扇门背后的每一条通路所到达的门的编号。007 发现不存在两条路通向同一扇门。
内线告诉他,情报就藏在迷宫的最深处。但是这个迷宫太大了,他需要你的帮助 —— 请编程帮他找出距离入口最远的那扇门。
输入格式:输入首先在一行中给出正整数 N(<105),是门的数量。最后 N 行,第 i 行(1≤i≤N)按以下格式描述编号为 i 的那扇门背后能通向的门:
1K D[1] D[2] ... D[K]
其中 K 是通道的数量,其后是每扇门的编号。
输出格式:在一行中输出距离入口最远的那扇门的编号。题目保证这样的结果是唯一的。
输入样例:1234567891011121314133 2 3 42 5 61 71 81 902 11 101 13001 1200
输出样例:112
思路求树中距离根节 ...
【2022寒假精进训练-7】7-12 清点代码库
上图转自新浪微博:“阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍。请设计一个程序,能够将代码库中所有功能重复的代码找出。各位大佬有啥想法,我当时就懵了,然后就挂了。。。”
这里我们把问题简化一下:首先假设两个功能模块如果接受同样的输入,总是给出同样的输出,则它们就是功能重复的;其次我们把每个模块的输出都简化为一个整数(在 int 范围内)。于是我们可以设计一系列输入,检查所有功能模块的对应输出,从而查出功能重复的代码。你的任务就是设计并实现这个简化问题的解决方案。
输入格式:输入在第一行中给出 2 个正整数,依次为 N(≤104)和 M(≤102),对应功能模块的个数和系列测试输入的个数。
随后 N 行,每行给出一个功能模块的 M 个对应输出,数字间以空格分隔。
输出格式:首先在第一行输出不同功能的个数 K。随后 K 行,每行给出具有这个功能的模块的个数,以及这个功能的对应输出。数字间以 1 个空格分隔,行首尾不得有多余空格。输出首先按模块个数非递增顺序,如果有并列,则按输出序列的递增序给出。
注:所谓数列 { A1, …, AM } 比 { ...
【2022寒假精进训练-7】7-13 特殊堆栈
堆栈是一种经典的后进先出的线性结构,相关的操作主要有“入栈”(在堆栈顶插入一个元素)和“出栈”(将栈顶元素返回并从堆栈中删除)。本题要求你实现另一个附加的操作:“取中值”——即返回所有堆栈中元素键值的中值。给定 N 个元素,如果 N 是偶数,则中值定义为第 N/2 小元;若是奇数,则为第 (N+1)/2 小元。
输入格式:输入的第一行是正整数 N(≤105)。随后 N 行,每行给出一句指令,为以下 3 种之一:
123Push keyPopPeekMedian
其中 key 是不超过 105 的正整数;Push 表示“入栈”;Pop 表示“出栈”;PeekMedian 表示“取中值”。
输出格式:对每个 Push 操作,将 key 插入堆栈,无需输出;对每个 Pop 或 PeekMedian 操作,在一行中输出相应的返回值。若操作非法,则对应输出 Invalid。
输入样例:12345678910111213141516171817PopPeekMedianPush 3PeekMedianPush 2PeekMedianPush 1PeekMedianPopPopPush 5Push ...