2023年度第四届全国大学生算法设计与编程挑战赛(春季赛)

news2024/11/26 7:30:56

目录

  • 2023年度第四届全国大学生算法设计与编程挑战赛(春季赛)
    • 1、A
    • 2、Bx
    • 3、Cut
    • 4、Diff
    • 5、EchoN
    • 6、Farmer
    • 7、GcdGame
    • 8、HouseSub
    • 9、IMissYou!
    • 10、Jargonless

2023年度第四届全国大学生算法设计与编程挑战赛(春季赛)

1、A

题目描述

有一个长为n(1≤n≤1000) 的序列,序列上的元素两两不同。你需要用最少的操作步数翻转这个序列。

​ 每次操作你需要给出三个数 i,j,k(1≤ij<kn),交换序列中下标属于 [[i,j] 的元素与下标属于[j+1,k] 的元素。例如:对于长为 7 的序列 1,2,3,4,5,6,7,进行操作i*=2,j=4,*k=6 后序列会变为 1,5,6,2,3,4,7。

​ 给定 n,你需要输出最少的操作步数,并输出每一步的具体操作。保证对于所有输入的 n*,均存在至少一个有限步内的合法操作。

输入

一行,一个整数 n

3

输出

2
1 1 3
1 1 2

第一行一个非负整数 m,表示最少的操作步数。

接下来 m* 行,每行三个整数 i*,j,k,表示进行题目中描述的操作。

要求 1≤i,j,kn,ij<k

你的输出必须保证从上到下执行这 m* 次操作后,整个序列被翻转。

代码

#todo

2、Bx

题目描述

你有一个长度为 n* (2≤n≤106) 的 01 序列,你可以执行如下操作若干遍:

​ 每次操作可以选择一个正整数 i,满足 1≤ink+1,然后选中[i,i+k−1] 这个长度为k (2≤kn) 的区间,设这个区间当前的数的最大值为 x*,然后将这个区间中所有的数变成 x*。

​ 一个操作序列 i1,i2,⋯,im 是好的当且仅当依次进行这些操作后,整个序列的数都变成 1。

​ 你需要给出一个好的操作序列,使得这个操作序列的长度最小,且满足此情况下,操作序列的字典序最小。

输入

第一行一个整数 T(1≤T≤105),表示数据组数。

对于每组数据:第一行两个整数n*,*k。

第二行一个长度为 n 的01字符串,表示这个序列。数据保证序列中至少有一个 1和一个 0。

数据保证 ∑n≤106

2
5 3
00010
6 4
100001

输出

2
3 1
2
1 2

对于每组数据,输出两行:第一行一个整数 m,表示最短的操作次数。

第二行 m* 个整数,表示这个操作序列,中间用空格分隔开。

代码

#todo

3、Cut

题目描述

我们可以对数字进行一些有趣的游戏,比如,把数字全部切开又能变成多少?

你现在随意地写下了一个数字n (1≤n<1010),你现在可以任意多次从任意位置切开这个数字,随后将切开的数字加起来,得到一个结果。

你现在想知道所有可能的切法结果的和是多少。

输入

输入一行一个整数 n,表示一开始写下的数字。

125

输出

176

对于样例给出的数字 125125,有以下几种切法的可能:

  • 125
  • 1+25=26
  • 12+5=17
  • 1+2+5=8

故算式结果的和为 125+26+17+8=176。

代码

s = input()

li = []
lis = []
#简单的回溯
def dfs(s):
    if len(s) < 1:
        lis.append(li.copy())
        return
    if len(s) == 1:
        li.append(s)
        lis.append(li.copy())
        li.pop()
        return
    for i in range(1, len(s)+1):
        li.append(s[0:i])
        dfs(s[i:len(s)])
        li.pop()

dfs(s)
res = 0
for i in lis:
    for j in i:
        res += int(j)
print(res)

4、Diff

题目描述

作为一个居家小能手,你深知收纳之道。

​ 至少,同一种东西不要放在一起,因为同样的东西放在一起容易分不出来……。

​ 现在有n (1≤n≤1000) 个盒子,你现在有 k (2≤k≤1000) 种物品,每种物品的数量有无限个。你现在要在每个盒子里都放一个物品,同时,你不想相邻的位置上摆同样的东西。

​ 想请问有多少种摆放方式可以满足你的要求。

输入

输入一行两个整数 nk,表示盒子的数量和物品种类的数量。

3 2

输出

2

输出一行一个整数,表示方案数,数据保证答案在 int 范围内。

代码

n, m = map(int, input().split())

#简单的数学问题
res = 1
res *= m
for i in range(n-1):
    res *= (m-1)

print(res)

5、EchoN

题目描述

人类的本质是复读机,就是说,人类,人类的本质,是一些东西……人类的本质是什么?人类的本质是复读,人类的本质是复读机。

​ 给定一个字符串 S (∣S∣⩽106),如果其中某一个子串是 S 的前缀,那么我们就说存在一次复读。

​ 想请问一共有多少次复读。

输入

一行一个字符串 S

aaba

输出

6

一行一个整数,表示复读次数。

代码

s = input()

res = len(s)
for i in range(1, len(s)):
    start = 0
    while i<=len(s)-1 and s[i] == s[start]:
        res += 1
        i += 1
        start += 1
print(res)

6、Farmer

题目描述

不同的人对于不同的教育方法的接受程度是不一样的,不同的树对于不同的肥料的吸收程度也是不一样的。路边现在种着一排的树,作为新时代新青年的你当然有义务来做些什么,你的手里提着各式各样的化肥。“怎么样才能够成为一个优秀的农民呢?”年纪轻轻的你已经立下了成为农民的远大志向。“这些树,要好好施肥才能茁壮成长啊。”

​ 路边有 n (2⩽n⩽5×103) 棵树,编号从 1 到 n,其中第 i 棵树和第 i+1 棵树之间的距离是 Ai (1⩽Ai⩽109)。现在手上有 m (1⩽m⩽200) 袋肥料,对第 i棵树使用第 j 袋肥料可以获得 Bi,j(1⩽ Bi,j⩽109) 的收益。每一袋肥料只能用在一棵树上,但是一棵树可以用很多袋肥料。

​ 现在定义满意度为得到的收益减去走过的距离,即 ∑B−∑A,如果你可以从任何一棵树开始走,请问你能得到的最大满意度为多少?

需要注意:

​ 1. 你可以按照任意顺序使用化肥,可以先某棵树使用第1、3、5袋化肥,再前往另一棵树使用第2、4袋化肥

​ 2. 你可以在树与树之间任意走动,即可任意往返

输入

第一行两个整数 n*、m,表示树的数量和肥料的数量。

接下来一行n−1 个整数 A1,A2,…*An*−1,表示树之间的距离。

接下来 n* 行,每行 m* 个整数Bij,表示每袋肥料的收益。

3 4 
1 4
2 2 5 1
1 3 3 2
2 2 5 1

输出

11

输出一行一个整数,表示最大满意度。

代码

#todo

7、GcdGame

题目描述

有一个长为n* (1≤n≤105)的正整数序列,第i个数为ai (2≤ai≤108)。你在这个序列上进行q* (1≤q≤105)轮单人游戏,每轮游戏之间相互独立。

​ 在一轮游戏中,你有两个棋子,初始放在序列的第x个位置和第y个位置(1≤x,yn);棋子有权值,初始分别为axay*。你的目标是让这两个棋子上的权值不互质。每一步,你可以选择一枚棋子,将其移动到序列上相邻的一个位置,即从第i个位置移动到第i−1或第i+1个位置,同时这个棋子上的权值会乘上ai*−1或ai*+1。注意,第11个位置只能移动到第22个位置,第n个位置只能移动到第n*−1个位置。

​ 对于这q*轮游戏,请输出每轮游戏达成目标的最小操作步数。

输入

第一行,两个正整数n*,*q,分别表示序列长度和询问次数。

第二行,n个正整数,第i个数表示ai的值。

接下来q行,每行两个正整数x,y,表示一轮游戏的初始状态。

6 4
2 9 5 7 4 3
4 1
2 6
3 4
5 2 

输出

1
0
1
1

q行,每行一个整数,第i行的整数表示第i次询问的答案。

代码

#todo

8、HouseSub

题目描述

一个图称之为“房子”当且仅当这个图是这样的:

img

有一个 n* (5≤n≤105) 个点 m* (5≤m≤105) 条边的无向图,小L想找到 55 个不同的点,并满足这 55 个点能构成一个房子。但对于这 55 个点,下方的四元环必须是“纯四元环”。也就是说,不能出现以下几种情况:

img

需要注意的是,以下情况是合法的,因为下方的四元环不相邻的两个点对间没有边相连:

img

具体地,设这 55 个互不相同的点为u1,u2,u3,u4,u5,小L 想找到满足 u1<u2 且(u1,u2),(u1,u3),(u2,u3),(u1,u4),(u4,u5),(u5,u2) 间有边相连,但 (u1,u5) 和(u2,u4) 间不存在边相连的,(u1,u2,u3,u4,u5) 五元组的方案数。

输入

第一行一个整数 T,表示数据组数。

对于每组数据:第一行两个整数n*,m ,表示无向图的点数和边数。

第2∼(m+1) 行,每行两个整数 x*,y(1≤x,yn,x\=*y),表示无向图中的一条边。

保证无向图不存在重边或自环。保证 1≤∑n,∑m≤105

5 6
1 2
1 3
2 3
1 4
4 5
2 5

输出

1

一行一个整数,表示方案数对 998244353998244353 取模后的结果。

代码

#todo

9、IMissYou!

题目描述

作为一个离家千里的大学生,夜深时你总会思念你的家人。

​ 为了科学研究深夜思念的规律,你记录了这一周内每天的思念值ai (∣ai∣≤100),你想知道这一周内你有多思念家人。如果你的思念值之和严格大于0,则代表思念家人,反之则不思念。

​ 在思念时请输出’IMissYou!‘,并给出总思念值,反之则单独输出’OvO’。(输出时均不包含单引号)。

输入

第一行七个正整数 ai,意义如上所述。

5 5 5 5 5 -2 -2

输出

IMissYou!
21

一行或两行,表示答案。

代码

li = input().split()

sum1 = 0
for i in li:
    sum1 += int(i)

if sum1 > 0:
    print('IMissYou!')
    print(sum1)
else:
    print('OvO')

10、Jargonless

题目描述

很多人一些话翻来覆去说得没有任何营养,有用信息就一点点……如果可以不用废话文学,请不要使用废话文学。

​ 给定一个原始文本字符串 S* (∣S∣≤3×105) 和一个有用信息字符串 T (∣T∣≤200),现在可以对 S* 进行精简操作,具体来说,就是可以将 S 的开头和结尾分别去掉一段,使得剩下的字符串 ′S′ 中包含有有用信息 T*。

​ 请问有多少种精简 S 的方式?

​ 注意:′S′包含T指的是T*是′S′的子序列,如’aacbac’包含’abc’。

输入

第一行一个字符串 S*,表示原始的文本。

第二行一个字符串 T*,表示有用的信息。

abcabcabc
cba

输出

9

输出一行一个整数,表示精简 S 的方案数。

代码

s = input()
t = input()

def conTains(s, t):
    index1 = 0
    for i in s:
        if index1 <len(t) and t[index1] == i:
            index1 += 1
    if index1 == len(t):
        return True
    else:
        return False

res = 0
l = 0
r = 0

while conTains(s[l:], t):
    r = 1
    res += 1
    while conTains(s[l:len(s) - r], t):
        # print(f'left:{l}, right:{r}')
        res += 1
        r += 1
    l += 1

print(res)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/608267.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++初阶】C/C++内存管理(没有对象的都进来看看吧~)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

2023 华为 Datacom-HCIE 真题题库 08/12--含解析

单项选择 1.[试题编号&#xff1a;190385] &#xff08;单选题&#xff09;以下关于BGP/MPLSIPVPN路由交互的描述&#xff0c;错误的是哪一项? A、PE与CE之间交互的是IPv4路由信息 B、出口PE可以通过BGP、IGP或静态路由的方式向远端CE发送IPv4路由 C、入口PE将从CE接收到的I…

ODOO随笔(二)—— Odoo16的主题样式变更

1 登陆界面的修改 系统默认的登陆界面&#xff0c;有更改odoo logo和去除“管理数据库”、“由Odoo提供支持”两个需求。 &#xff08;1&#xff09;更改odoo logo 系统管理员登陆后&#xff0c;选择菜单栏&#xff1a;设置——公司——管理公司 点击相机图标&#xff0c;上传…

Round#13 web专项部分wp

flask?jwt? 忘记密码处有secretkey 然后就是伪造session了,这里猜一下要什么 最后应该是_is_admin有用,我没细看,当时平台卡麻了 指正:改_user_id为1 ez_factors 注意到可以拼接命令,但是执行的回显只有数字 那么可以考虑读取后用od命令来转8进制读取 flask?jwt?(hard) …

2023.5.30 深信服 c++ 一面

深信服&#xff0c;c一面小记 导语面试内容重点问题解析弱引用弱在哪里&#xff1f;手撕memcpy水壶倒水问题 导语 最近开始面试&#xff0c;记录一下面试经历。   应该是会给我发感谢信的吧~我也是真的菜。工作的原因其实也没时间准备&#xff0c;最近工作还是挺忙的。另外一…

【云原生docker】

容器化越来越受欢迎&#xff0c;因为容器是&#xff1a; ●灵活&#xff1a;即使是最复杂的应用也可以集装箱化。 ●轻量级&#xff1a;容器利用并共享主机内核。 ●可互换&#xff1a;可以即时部署更新和升级。 ●便携式&#xff1a;可以在本地构建&#xff0c;部署到云&#…

LVGL学习(2):图片的转换和显示

我们在设计UI的过程中可能需要显示一些图片&#xff0c;本篇文章将介绍如何转换并显示一个固定的图片到lv_img中。 文章目录 1 图片转换1.1 GUI Guider1.2 在线转换 2 图片的显示 1 图片转换 和之前我写的一篇字体转换的文章一样&#xff1a;LVGL学习(1)&#xff1a;中文字体…

基于牛顿拉夫逊的配电网潮流计算研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

C++语法(23)-- 模拟实现unordered_set和unordered_map

C语法&#xff08;22&#xff09;---- 哈希表的闭散列和开散列_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130436178?spm1001.2014.3001.5501 1.重写HashTable 由于此时我们的实现与map跟set差不多&#xff0c;所以需要进行调整 1.重写节点…

html5前端学习

HTML5基本骨架 html标签 定义HTML文档&#xff0c;浏览器看到后就明白这个是HTML文档&#xff0c;所以其他元素要包裹在它里面&#xff0c;标签限定了文档的开始点和结束点。 <!DOCTYPE html> <html> </html> head标签 head标签用于定义文档的头部&…

实验篇(7.2) 05. 通过浏览器访问远端内网服务器 (SSL) ❀ 远程访问

【简介】直接将内网服务器映射成公网IP&#xff0c;可以方便的从任何地方访问服务器的指定端口&#xff0c;但是这种方式下&#xff0c;服务器是公开且暴露的。那有没有即方便、又比较安全的远程访问服务器的方法呢&#xff1f;我们来看看SSL VPN的Web模式。 SSL VPN介绍 从概念…

波司登云原生微服务治理探索

作者&#xff1a;曾孟琪&#xff08;山猎&#xff09; 背景 波司登创始于1976年&#xff0c;专注于羽绒服的研发、设计、制作&#xff0c;是全球知名的羽绒服生产商。波司登用一系列世人瞩目的辉煌成绩证明了自己的实力&#xff1a;连续26年全国销量领先&#xff0c;连续22年…

4种事务隔离级别 3种异常现象 死锁

4种事务隔离级别 & 3种异常现象 4种事务隔离级别和3种异常现象 事务隔离级别是指多个并发事务之间相互隔离的程度&#xff0c;用于控制事务对数据库的读取和写入操作的可见性和影响范围。在关系数据库管理系统&#xff08;RDBMS&#xff09;中&#xff0c;常见的事务隔离…

70. 爬楼梯解题思路

文章目录 题目解题思路 题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1 阶 …

【原创】用 VisualGLM 进行AIGC多模识别和内容生成

最近几个月&#xff0c;整个AI行业的LLM&#xff08;大语言模型&#xff09;蓬勃发展&#xff0c;除了过去传统的纯文字的多模态能力的视觉语言模型&#xff0c;如 GPT-4&#xff0c;ImageBind等表现令人印象深刻。 ChatGLM-6B是中文用户使用非常舒服的一个开源中文LLM。2023年…

Nginx的Rewrite的运用

Rewrite 一、常用的Nginx正则表达式二、lication三、rewrite$request_uri&#xff1a;包含请求参数的原始URI&#xff0c;不包含主机名&#xff0c;如&#xff1a;http://www.kgc.com/abc/bbs/index.html?a1&b2 中的 /abc/bbs/index.php?a1&b2 $uri&#xff1a;这个变…

chatgpt赋能python:Python去除重复字符并排序

Python去除重复字符并排序 在日常编程工作中&#xff0c;我们常常需要对列表或字符串中的重复字符进行去除&#xff0c;并将剩余字符进行排序。Python是一门非常适合进行此类操作的语言&#xff0c;其内置的数据结构和函数可以让我们轻松应对这一需求。 介绍 当我们需要对一…

【六一】【海思SS528】GPIO寄存器操作 - 使能GPIO管脚输出高、低电平

目录 一、概述二、配置复用控制寄存器&#xff0c;使能GPIO功能三、配置GPIO_DIR寄存器&#xff0c;选择输出四、配置GPIO_DATA寄存器&#xff0c;输出高电平五、测试 一、概述 这篇文章根据海思SS528芯片提供的《22AP30 H.265编解码处理器用户指南.pdf》文档(文档路径&#xf…

MIT6.042学习笔记(一)——强归纳法,数论(1)

如果学生在学校里学习的结果是使自己什么也不会创造&#xff0c;那他的一生永远是模仿和抄袭。——列夫托尔斯泰 文章目录 引言强归纳法例题&#xff1a;拆积木游戏证明 数论&#xff08;第一节&#xff09;整除运算例题&#xff1a;取水证明 公约数例题证明 Eucild算法 引言 …

C语言-static的用法

1、static 关键字 C 语言中 static 关键字修饰变量和函数。 static有三种不同的用法&#xff1a; 1.修饰局部变量&#xff1b; 2.修饰全局变量&#xff1b; 3.修饰函数 局部变量:当函数第一被调用&#xff0c;函数中的静态局部变量被初始化&#xff0c;再次调用这个函数&…