
上海计算机学会月赛丙组
上海计算机学会月赛丙组
长春高老师信奥工作室
专注中小学生C++编程和竞赛,有相关问题可以给我私信。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
上海市计算机学会竞赛平台丙组比赛目录及题解持续更新中
持续更新中。。。原创 2023-12-09 10:32:15 · 10301 阅读 · 0 评论 -
上海计算机学会2025年6月月赛C++丙组T5 砝码整理
题目要求将砝码按质量从小到大排序,每次可以选定区间进行排序,花费为该区间最大值与最小值的差。要求找出最小总花费。通过分析,最优策略是将数组分成若干段,每段排序后的最大值与原始排序后的对应位置相等。具体实现时,先对数组排序,然后遍历原数组,维护当前段的最大值和最小值,当遇到排序后的最大值时就分段计算花费。时间复杂度为O(n log n),适用于n≤2×10^5的情况。原创 2025-08-04 21:37:08 · 990 阅读 · 0 评论 -
上海计算机学会2025年6月月赛C++丙组T4 前缀逻辑值
该题目要求计算前缀逻辑表达式的值。表达式由0(false)、1(true)和逻辑运算符(&、|、^)组成,采用前缀表示法。解题思路是递归处理表达式:遇到运算符则递归计算两个操作数,遇到0/1直接返回对应布尔值。示例代码使用全局索引x跟踪当前处理位置,通过递归调用实现运算。时间复杂度为O(n),适用于大规模输入(最长2×10^5字符)。原创 2025-08-04 21:22:26 · 265 阅读 · 0 评论 -
上海计算机学会2025年6月月赛C++丙组T3 前缀不等
摘要 题目要求将一个互不相同的整数序列重新排列,使得所有前缀和都不等于给定的x值,且字典序最小。解法是先将序列升序排列以保证最小字典序,然后检查前缀和是否等于x。如果出现等于x的情况,就交换当前元素与下一个元素来破坏该前缀和。若整个序列的和恰好为x,则无解。时间复杂度为O(n log n),适用于n≤1000的数据规模。示例输入输出验证了该方法的正确性。原创 2025-08-04 21:18:38 · 250 阅读 · 0 评论 -
上海计算机学会2025年6月月赛C++丙组T2 跳房子
摘要:题目描述小象玩简化版跳房子游戏,有n个格子,每个格子标注数字a_i。小象从第1格开始,每次跳到i+a_i位置,若正好到达第n格则获胜,否则失败。给出n和数组a,判断小象能否获胜。通过模拟跳跃过程,若最终位置等于n输出"Win",否则输出"Lose"。时间复杂度为O(n),适合处理n≤10^5的数据规模。原创 2025-08-04 21:07:31 · 403 阅读 · 0 评论 -
上海计算机学会2025年6月月赛C++丙组T1 小象喝水
摘要:题目给出五个杯子(100ml、250ml、500ml、1000ml、2000ml),要求根据输入的水量n(n≤2000),选择能装下n的最小杯子。通过简单的条件判断即可解决:若n≤100选100ml,n≤250选250ml,n≤500选500ml,n≤1000选1000ml,否则选2000ml。这是一个典型的分支结构应用问题。原创 2025-08-04 20:59:45 · 313 阅读 · 0 评论 -
上海计算机学会2025年7月月赛C++丙组T5 面包
这是一道关于面包货架整理的动态规划问题。给定n个货架,每个货架上有不同数量的蛋糕、甜甜圈和羊角面包,要求通过最少移动次数使每个货架只保留一种面包或为空。采用动态规划方法,状态dp[i][j]表示处理前i个货架后,已存在面包类型组合j(用3位二进制表示)时的最小移动次数。通过状态转移,每次选择将当前货架转化为某一种面包类型,并累加需要移动的其他面包数量。最终答案即为处理完所有货架后三种面包类型都存在时的最小移动次数(dp[n][7])。算法时间复杂度为O(n)。原创 2025-08-03 21:41:09 · 726 阅读 · 0 评论 -
上海计算机学会2025年7月月赛C++丙组T3 棋盘距离求和
摘要:题目要求计算n个点两两之间的切比雪夫距离之和。通过将坐标转换为u=x+y和v=x-y,将问题转化为曼哈顿距离求解。算法对转换后的坐标进行排序并利用前缀和优化,最终将u和v的距离和相加后除以2得到结果。该方法有效降低了计算复杂度,适用于大规模数据(n≤200,000)。原创 2025-08-03 21:27:03 · 328 阅读 · 0 评论 -
上海计算机学会2025年7月月赛C++丙组T4 染色
摘要 题目要求统计将数组中两个不同元素染红后,红蓝两组元素和奇偶性相同的染色方案数。关键在于奇偶性的组合计算:当奇数数量为奇数或数组长度为1时无解;否则方案数为C(奇,2)+C(偶,2)+奇×偶的组合数。时间复杂度为O(n)。原创 2025-08-03 21:24:54 · 396 阅读 · 0 评论 -
上海计算机学会2025年7月月赛C++丙组T2 游戏
题目描述了一群人进行游戏,每位玩家的得分都是不同的非负整数。给出N条信息,每条信息表示得分第A_i高的玩家分数为B_i。要求计算出游戏中最多可能有多少名玩家。 解题关键在于观察到最多玩家数等于所有A_i+B_i的最小值。例如样例输入1中4+7=11,2+9=11,6+2=8,取最小值8得到正确答案。因此解决方案是遍历所有给定的(A_i,B_i)对,计算它们的和并取最小值作为结果。 算法时间复杂度为O(N)每组数据,适用于大规模输入。原创 2025-08-03 19:26:07 · 368 阅读 · 0 评论 -
上海计算机学会2025年7月月赛C++丙组T1 十六进制
题目要求将0-255范围内的十进制整数转换为两位十六进制数。提供两种解法:第一种直接使用printf函数按十六进制格式输出;第二种通过数学运算分别计算高低位,再转换为相应字符。输出格式要求两位数,不足补零。两种方法均能正确实现转换,第一种更简洁,第二种更直观地展示了转换过程。原创 2025-08-03 19:17:36 · 323 阅读 · 0 评论 -
上海计算机学会2025年5月月赛C++丙组T1 打包购买
Alice需要购买10个面包,面包店提供两种规格:2个面包x元和4个面包y元。目标是找到购买10个面包的最小总花费。通过比较两种规格的单价,选择单价较低的规格进行购买。如果4个包装的单价低于2个包装,则购买两个4个包装和一个2个包装;否则,购买五个2个包装。代码通过判断y与2x的关系,输出相应的最小花费。原创 2025-05-24 20:29:09 · 1040 阅读 · 0 评论 -
上海计算机学会2025年5月月赛C++丙组T2 手机充电
Bob的手机电量每分钟在充电时增加2%,不充电时减少3%。他需要将电量调整到恰好50%,且电量必须保持在0%到100%之间。对于每组输入的电量n,计算达到50%所需的最少时间。如果n大于50,通过放电和充电的组合来调整;如果n小于50,通过充电和放电的组合来调整。具体实现见代码,通过计算差值和调整步骤得出结果。原创 2025-05-24 20:28:44 · 824 阅读 · 0 评论 -
上海计算机学会2025年5月月赛C++丙组T3 稳定区间
Carol 有一个长度为 $n$ 的数组 $a$,定义函数 $f(l,r)=\sum_{i=l}^{r-1}(a_i-a_{i+1})$。如果 $f(l,r)\neq (a_r-a_l)$,则称子区间 $[l,r]$ 是不稳定的。Carol 想知道数组 $a$ 中有多少个子区间是不稳定的。通过观察发现,稳定区间的两端数字必须相等。因此,可以先计算稳定区间的数量,然后用总区间数减去稳定区间数,得到不稳定区间的数量。总区间数为 $n(n-1)/2$,稳定区间数可以通过统计数组中相同数字的出现次数来计算。具体实原创 2025-05-24 20:28:26 · 1075 阅读 · 0 评论 -
上海计算机学会2025年5月月赛C++丙组T4 投掷骰子
Dave 喜欢用骰子猜选择题,骰子上的数字1和4的点数为红色,其他为黑色。他提出一个问题:是否可以通过投掷三个骰子,使得所有朝上的面中,红色点数之和为A,黑色点数之和为B?输入包含多组数据,每组数据给出A和B,要求判断是否存在满足条件的骰子组合。可以通过深度优先搜索或枚举所有可能的骰子组合来解决问题,时间复杂度为O(666)。对于每组数据,若存在满足条件的组合,则输出YES,否则输出NO。原创 2025-05-24 20:27:54 · 741 阅读 · 0 评论 -
上海计算机学会2025年5月月赛C++丙组T5 相等数组
时间限制:1000 ms内存限制:256 MBEve 有一个长度为 nnn 的数组 aaa 以及一个常数 m≥2m\ge 2m≥2,他知道对于任意的 1≤i≤n1\leq i\leq n1≤i≤n,都有 2≤ai≤m2\leq a_i\leq m2≤ai≤m。Eve 觉得数组里一定要有全部相等的元素,所以他想通过以下操作把数组里的元素变得全部相等:请帮助 Eve 求出最少操作多少次能够使得数组里元素全部相等,如果无论多少次操作都不能达成目标,则输出 −1-1−1。第一行一个整数 TTT 表示数组组数,对原创 2025-05-24 20:27:12 · 1386 阅读 · 0 评论 -
第六届上海市青少年算法竞赛网络赛(青年组)T4 连续的零(二)
时间限制:1000 ms内存限制:256 MB给定一个 序列 b1b2…bnb_1b_2\dots b_nb1b2…bn, 的意思就是这个数列里只有 与 。我们可以将序列里不超过 kkk 个 改成 ,请问修改后序列里最多能有多少个连续的零?样例输出解析双指针法,详见代码:原创 2025-03-31 22:49:27 · 1631 阅读 · 0 评论 -
第六届上海市青少年算法竞赛网络赛(青年组)T3文件排序
时间限制:1000 ms内存限制:256 MB有 nnn 份文件需要安置在磁带上,第 iii 份文件的长度为 aia_iai,它会被访问 cic_ici 次。当要访问一份文件时,要从磁带上最靠前的文件开始,顺序找到这份文件为止,单次访问的时间就是经过的文件的总长度之和。你需要在磁带上安排文件的放置顺序,使得所有文件累计访问时间的总和最小。例如假设磁盘的布局是在第 333 份文件之前还放置了第 111 与第 555 份文件,则样例输出样例解释:文件4 → 文件2 → 文件1 → 文件3 → 文件5原创 2025-03-31 22:32:09 · 1120 阅读 · 0 评论 -
第六届上海市青少年算法竞赛网络赛(青年组)T2平方的和
时间限制:1000 ms内存限制:256 MB给定 nnn 个整数 a1,a2,⋯ ,ana_1, a_2, \cdots, a_na1,a2,⋯,an,请求出两两数字和的平方的和,也就是∑1≤i<j≤n(ai+aj)2\sum_{1\leq i < j\leq n}(a_i+a_j)^21≤i<j≤n∑(ai+aj)2由于这个数字比较大,输出答案模 1,000,000,0071,000,000,0071,000,000,007 的余数。样例输出样例解释:33+44+5*5利用平方和展开原创 2025-03-31 22:20:22 · 840 阅读 · 0 评论 -
第六届上海市青少年算法竞赛网络赛(青年组) T1 上升字符串
给定一个全部由大写英文字符组成的字符串,请判断它是否是一个上升字符串。所谓上升字符串就是字母不断变大,比如。原创 2025-03-31 21:36:08 · 673 阅读 · 0 评论 -
上海计算机学会2025年2月月赛C++丙组T1电话号码
在 A 国,一个有效的电话号码并不是 11 位,而是由 5 位无前导 0 的数字组成的,例如 12345,22222,90000 都是有效的电话号码,但 1234,01234,123456 都不是有效的电话号码。样例解释:在第一组数据中,Alice 总共存下了 123*123=15129 元,这符合电话号码的定义;Alice 每天都存下 x 元钱,坚持了 n 天,请问她存下的总钱数是不是一个有效的 A 国电话号码?对于 100% 的数据,1≤T≤100,1≤n,x≤1000。一行两个正整数 n,x。原创 2025-02-22 09:46:21 · 361 阅读 · 0 评论 -
上海计算机学会2025年2月月赛C++丙组T2新二进制
进一步地,Bob 认为一个区间 [l,r] 满足 1≤l≤r≤n 是正的,当且仅当其代表值 bl×2l−1+bl+1×2l+⋯+br×2r−1>0,区间 [l,r] 是负的则表示代表值 <0。样例解释:对于第三组数据,区间 [1,1],[1,2],[2,2] 的代表值分别为 1,-1,-2,则A=1,B=2,|A-B|=1。对于 100% 的数据,1≤T≤10^5,1≤n≤10^5,∑n≤3×10^5,bi=1 或 bi=−1。对于 60% 的数据,1≤T≤10,1≤n≤1000。第一行一个整数 n。原创 2025-02-22 09:45:56 · 502 阅读 · 0 评论 -
上海计算机学会2025年2月月赛C++丙组T3区间求和
面对这个发现,他提出了一个新的问题:给定序列 a1∼n 与 q 次询问,每次询问给出 l,r,如果可以在执行询问前任意次交换 a 中两个元素的位置得到 a1∼n′,对于 100% 的数据,1≤T≤10^4,1≤n,∑n≤2×10^5,1≤q,∑q≤2×10^5,1≤ai≤10^5,1≤l≤r≤n。对于 60% 的数据,1≤T≤10,1≤n,q≤1000。一次询问的答案指的是 al∼r′ 的和。对于 30% 的数据,1≤T≤10,1≤n,q≤10。内存限制: 512 Mb时间限制: 1000 ms。原创 2025-02-22 09:45:30 · 460 阅读 · 0 评论 -
上海计算机学会2025年2月月赛C++丙组T4数阵交换
Alice 每天都希望看到不同的优美的数阵,所以请算出通过任意次(可以是 0 次)交换一列中的两个数字,能造出多少个不同的优美的数阵。对于 100% 的数据,1≤T≤10^4,2≤n≤4×10^5,∑n≤4×10^5,1≤pi,j≤n,p1,p2 分别构成 1∼n 的排列。如果想要交换完的两个行元素都是1到n的全排列,那么交换的数字就必须全部相同,对于 60% 的数据,1≤T≤10,2≤n≤1000。内存限制: 512 Mb时间限制: 1000 ms。对于 30% 的数据,1≤T≤10,2≤n≤18。原创 2025-02-22 09:44:58 · 576 阅读 · 0 评论 -
上海计算机学会2025年2月月赛C++丙组T5子矩阵和
他可以据此构造一个 n×n 的矩阵,其中位于第 i 行第 j 列的元素值等于 S 中第 i 个字符与第 j 个字符所对应数字的乘积。例如,若 S 的第 3 位是 5,第 7 位是 2,则矩阵中 (3,7) 位置(第三行第七列)的元素为 5×2=10。符合题意的子矩阵为 [(2,1),(3,1)] 与 [(1,2),(1,3)](用矩阵的左上角和右下角坐标表示矩阵)。分析可知,子矩阵和,为行的区间和乘以列的区间和,则可以求出所有区间和,找到t的因数,再求子矩阵数量。对于 30% 的数据,∣S∣≤50。原创 2025-02-22 09:44:16 · 773 阅读 · 0 评论 -
上海计算机学会2025年1月月赛C++丙组T1水瓶灌水
Alice用三个整数B1,B2,B3来表示水瓶的灌水情况,B1=1表示第一个水瓶被灌满了水,B1=0则表示第一个水瓶是空的。Alice有三个水瓶,如果有至少两个瓶子都是空的,那么Alice就会把它们灌满水,但如果只有至多一个瓶子是空的,Alice什么也不会做。对于第一组数据,三个水瓶都是空的,满足至少两个水瓶为空,所以输出Waterfillingtime。对于第二组数据,三个水瓶都是满的,没有至少两个水瓶为空,所以输出Notnow。对每组数据,输出一行。原创 2025-01-27 09:10:59 · 407 阅读 · 0 评论 -
上海计算机学会2025年1月月赛C++丙组T5分块序列
Eve发现,并不是所有序列都能被合理地分块,比如[1,4,3]没有合理的分块方案,于是他转而想知道,如果可以对这个序列进行一些改动,能不能得到合法的分块方案呢?对于100%的数据,1≤T≤10^4,1≤n≤2×10^5,1≤ai≤10^6,∑n≤2×10^5。对于每组数据,第一行一个整数n表示序列长度,第二行n个整数a1∼n表示序列。对于60%的数据,1≤n,∑n≤2×10^5,1≤ai≤100。对于30%的数据,1≤n,∑n≤20,1≤ai≤20。原创 2025-01-27 09:14:06 · 821 阅读 · 0 评论 -
上海计算机学会2025年1月月赛C++丙组T4草莓分组
对于100%的数据,1≤T≤100,1≤n,k≤2×10^5,1≤ai≤10^9,∑n≤2×10^5。Diana喜欢最甜甜甜甜的小草莓,她有n种类型的草莓,第i种有ai颗。一颗草莓只能放进至多一个草莓礼盒,当然也可以不放进礼盒留给Diana独自享用。Diana想要用这些草莓制作成草莓礼盒,每个草莓礼盒里都有恰好k颗。对于30%的数据,n≤1000,k≤2,ai≤10。内存限制:256Mb时间限制:1000ms。对于60%的数据,k≤2。原创 2025-01-27 09:13:23 · 914 阅读 · 3 评论 -
上海计算机学会2025年1月月赛C++丙组T3小球涂色
解析:第一个小球有k种颜色可选,第二个小球有k-1种颜色可选,第k个小球只有一种颜色可选,第k+1个到第n个小球都只有一种颜色可选。换言之,如果1≤i,j≤n,∣j−i∣<k,第i个小球和第j个小球不能涂相同的颜色。两种涂色方案是不同的,当且仅当存在一个1≤i≤n,使得第i个小球的颜色在两种涂色方案中不同。有n个小球排成一行,依次从1到n编号,你需要用k种颜色给它们涂色。对于100%的数据,1≤T≤20,1≤n,k≤10^5。对于30%的数据,n≤k≤10。原创 2025-01-27 09:12:27 · 542 阅读 · 0 评论 -
上海计算机学会2025年1月月赛C++丙组T2音乐播放
某天,Bob想听语言为L的歌,他希望选出恰好k张唱片,这些唱片中的音乐都是语言为L的,并且它们的总时长越长越好。对于100%的数据,1≤T≤200,1≤k≤n≤1000,1≤L≤5,1≤mi≤100,1≤li≤5。对于第一组数据,有1,3两首语言为2的音乐,时长分别为5,7,则选择时长为7的可以达到目标。对于每组数据,如果能选出k张符合要求的唱片,输出一行一个整数表示最大总时长,否则输出一行。对于30%的数据,L=li=1,mi=1。原创 2025-01-27 09:11:47 · 284 阅读 · 0 评论 -
上海计算机学会2020年10月月赛C++丙组T5小球的颜色
给定n个数字a1,a2,…我们需要更改一些数字,使得最后数字种类不超过k种,请问最少需要更改多少数字。内存限制:256Mb时间限制:1000ms。将颜色为5的小球改成2即可。原创 2025-01-20 11:17:57 · 462 阅读 · 0 评论 -
上海计算机学会2020年10月月赛C++丙组T4预定货物
受天气和心情影响,学习用品的进价和售价都在不断改变,具体而言,暑假一共有n天,其中第i天订购一套学习用品的进价是ai,第ii天转手卖掉一套学习用品的售价是bi。由于订货路途也会费时,如果小爱在第i天订购了学习用品,那么她只能在第i+1天到第n天中的任何一天进行出售。对于100%的数据,保证1≤n≤2,000,000,1≤ai,bi≤1,000,000。第二行包含n个正整数,其中第i个数ai表示第ii天订购一套学习用品的进价。内存限制:256Mb时间限制:1000ms。原创 2025-01-20 11:07:46 · 370 阅读 · 0 评论 -
上海计算机学会2020年10月月赛C++丙组T2手机充电
小爱有m个充电宝,其中第i个充电宝的型号为ti,剩余电量为ai%。他按给定顺序使用充电宝,当一个充电宝的电量耗尽时,会选择换一个充电宝接着使用。已知市面上一共有n种型号的充电宝,其中型号为i的充电宝中每1%的电量可以使小爱的手机继续使用xi秒。输出共一行,一个整数,表示小爱的手机还能继续使用的时间。所以用上所有的充电宝能够使手机继续使用50000秒。小爱在野外游玩时,手机没电了,幸好,他带了一些充电宝。内存限制:256Mb时间限制:1000ms。原创 2025-01-20 10:30:01 · 379 阅读 · 0 评论 -
上海计算机学会2020年10月月赛C++丙组T1时间格式
一段时间总计n秒。请将这段时间转换成以小时、分钟和秒组成的时间格式,中间以冒号。内存限制:256Mb时间限制:1000ms。例如n=10000,输出。原创 2025-01-20 10:11:13 · 263 阅读 · 0 评论 -
上海计算机学会2024年12月月赛C++丙组T5查找 404
对于 100% 的数据,1≤T≤10^5,1≤n≤10^5,1≤∑n≤10^6,S 中仅包含。由于这个数字可能非常大,你需要其输出模 10^9+7 的结果。对于 60% 的数据,1≤T≤100,1≤n,∑n≤100。对于 30% 的数据,1≤T≤10,1≤n,∑n≤10。内存限制: 256 Mb时间限制: 1000 ms。Eve 有一个字符串 S,该字符串仅由字符。对于每组数据,输出一行一个整数表示答案。第一行一个整数 n 表示 S 的长度。,其中分别有 1,2,0,0 个。子序列,共 3 个。原创 2024-12-13 08:00:00 · 664 阅读 · 0 评论 -
上海计算机学会2024年12月月赛C++丙组T4找子序列
换言之,他想知道是否存在一个下标序列 i1∼k(k≥1),满足 1≤i1原创 2024-12-13 08:00:00 · 567 阅读 · 0 评论 -
上海计算机学会2024年12月月赛C++丙组T3充电问题
能量计算公式为功率乘以时间,例如,如果一个插座的功率是 3 瓦,充电时间为 3 小时,则电瓶车能够存储的能量为 3×3=9 瓦时。对于 100% 的数据,1≤T≤10^5,1≤∑n,∑m,h,ai,bi≤10^5。对于每组数据,输出一行一个整数,表示在 h 小时后所有电瓶车所存储的最大总能量。在第一组数据中,使用第二个插座给唯一的车充电,2 小时充了 80 瓦时的电。对于 60% 的数据,1≤∑n,∑m,h,ai,bi≤10^3。对于 30% 的数据,1≤∑n,∑m,h,ai,bi≤10。原创 2024-12-13 08:00:00 · 463 阅读 · 0 评论 -
上海计算机学会2024年12月月赛C++丙组T2最长连签
请你找出 Bob 和 Bella 中谁的最长连续签到天数更长,或者报告他们的最长连续签到天数相同。在第一组数据中,Bob 在第 1,2,3 天连续签到,最长连签天数是 3;Bella 在第 2,3,4,5 天连续签到,最长连签天数是 4,所以输出 Bella。对于 100% 的数据,1≤T≤10^5,1≤∑n≤10^5,0≤ai,bi≤10^9,其中 ∑n 表示单个测试点里所有 n 的和。对于 60% 的数据,1≤∑n≤10001≤∑n≤1000。对于 30% 的数据,1≤∑n≤101≤∑n≤10。原创 2024-12-13 08:00:00 · 435 阅读 · 1 评论 -
上海计算机学会2024年12月月赛C++丙组T1你画我猜
Alice 和她的一些朋友计划组队参加一个“你画我猜”活动,规则里写着“这次活动需要 6∼8 人组队“。Alice 的队伍一共有 n 个人,他们可以参加这次活动吗?内存限制: 512 Mb时间限制: 1000 ms。对于 100% 的数据,1≤n≤10。输入一行一个正整数 n。如果能参加,输出一行。原创 2024-12-13 08:00:00 · 301 阅读 · 0 评论 -
上海计算机学会2024年11月月赛C++丙组T5线段数
对于 100% 的数据,3≤n≤10^5,1≤ai≤10^9。Eve 希望最终数组中任意三个相邻元素之和都是 3 的倍数。内存限制: 512 Mb时间限制: 1000 ms。1+3+5=9,是 3 的倍数,不需要操作。第二行 n 个整数 a1,⋯,an。对于 60% 的数据,3≤n≤1000。请求出需要达成目标所需的最小操作次数。对 i=4,7,10 分别操作一次。对于 30% 的数据,3≤n≤5。一行一个整数表示答案。第一行一个整数 n。原创 2024-11-09 08:00:00 · 527 阅读 · 1 评论