8.12模拟赛总结

赛中

8.30am 开始比赛

9.00am 看了第一题,没想到正解,打完第一题的暴力

9.00am ~ 10.00am 看第二题,想到单调栈做法,飞快写完

10.00am~11.00am 看第三和第四题,先把第4题的 暴力写了,想第三题

11.00am~12.00am 想第三题,想到正解的迪杰斯特拉做法

12.00am 结束比赛

赛中比分

emm,有点炸了

共40分。。。

题解

第一题

1.  01串

题目ID:22808必做题文件操作100分

最新提交:

时间限制: 1000ms

空间限制: 1048576kB

输入文件名: string.in

输出文件名: string.out

题目描述

给定一个01串(即只有’0’和’1’的字符串)。问有多少个子串满足0的数量是1的数量的平方?

输入格式

一行一个01串。

输出格式

输出一行答案。

样例

Input 1

010001

Output 1

4

样例解释

分别是(1,2),(1,6),(2,3),(5,6)

数据范围

对于60%的数据,字符串长度不超过1000
对于100%的数据,字符串长度不超过300000

代码解释

  1. 前缀和数组pre0[i] 和 pre1[i] 分别存储前 i 个字符中0和1的累计数量。
  2. 哈希表统计:使用 defaultdict 来记录每个 val = pre0[j] - pre1[j]² 的出现次数。初始时,val=0 出现一次,对应空子串的情况。
  3. 遍历计算:对于每个位置 j,计算当前 val 并查询哈希表中该值的出现次数,累加到结果 res 中。然后将当前 val 的出现次数加1,更新哈希表。
  4. 输出结果:最终结果 res 即为所有满足条件的子串数量。

这种方法通过数学转换和哈希表优化,将时间复杂度从 O(n²) 降低到 O(n),适用于大规模数据输入。

第二题

2.  风神之诗

题目ID:4639必做题100分

时间限制: 2000ms

空间限制: 524288kB

题目描述

image.png

输入格式

image.png


unsigned sd ; int rd (){ return ( sd^=sd <<13,sd^=sd >>17,sd^=sd<<5)%n+1;}

image.png

输出格式

image.png

样例

Input 1

10 6 402338762 9 1 15 24 19 42 26 42 88 54

Output 1

43

样例解释

image.png

数据范围

image.png

题解

这题是我喜欢(taoyan)的单调栈,主要思路是维护单调栈数组单调递增,然后再通过前缀和的方式优化单调栈的过程

注意:这里要维护下标而不是大小

第三题

3.  涛涛的避险策略

题目ID:19548必做题100分

最新提交:

20 分

时间限制: 2000ms

空间限制: 262144kB

题目背景

涛涛现在在名为 Asterisk 的异世界中,这里的一切都和星星有关。

题目描述

简单来说,Asterisk世界有 NN 个城市,编号为 1 的首都是重要的枢纽。每个城市蕴藏着不同价值的星能晶体。连接这些城市之间存在 MM 条通道,每条通道都有其能量不稳定性,以一个“断裂指数”来衡量。

为了确保首都与其他城市的稳定联络,并考虑到潜在的通道断裂风险,涛涛需要规划一张坚固的通道网络。这张网络必须能够连通所有城市(形成一棵树)。

对于涛涛选定的树中的每一条通道,一旦该通道断裂,将会导致一些城市与首都失去直接或间接的连接。这些失联的城市所蕴藏的星能晶体将无法输送至首都,造成能量损失。损失的大小等于所有失联城市的星能晶体价值之和。

涛涛希望选择一棵树,使得在该树中,每条通道断裂后造成的能量损失与该通道的断裂指数的乘积的总和 达到最小。

请你帮助涛涛在 Asterisk 世界中制定这个最优的避险策略,计算出这个最小的总和。

输入格式

第一行两个整数N,MN,M
第二行NN个整数,表示每个星之据点的星能晶体数量pipi
接下来MM行,每行3个整数x,y,wx,y,w,表示一条连结x,yx,y的断裂指数为ww的通道

输出格式

一行一个整数,表示所求的最小的和

样例

Input 1

5 7 10 5 8 3 7 1 2 2 1 4 1 1 5 4 2 3 2 2 5 1 3 5 3 4 5 1

Output 1

59

样例解释

选择通道[1,2,2],[1,4,1],[2,3,2],[4,5,1]
如果删除通道[1,2,2],能量损失为13,乘积为26
如果删除通道[1,4,1],能量损失为10,乘积为10
如果删除通道[2,3,2],能量损失为8,乘积为16
如果删除通道[4,5,1],能量损失为7,乘积为7
总和为59

数据范围

数据nmpiwi
1-5≤10≤10≤10≤10≤10≤10≤10≤10
6-10≤200≤200≤1000≤1000≤50≤50≤1000≤1000
11-20≤5000≤5000≤2∗104≤2∗104≤200≤200≤20000≤20000
21-25≤105≤105≤3∗105≤3∗105≤1000≤1000≤106≤106

题解

这题一看要维护边权就想到要用迪杰斯特拉,然后最后把答案乘上点的权值,直接拿下

第四题

4.  买物品

题目ID:4372必做题100分

时间限制: 1500ms

空间限制: 524288kB

题目描述

一天 sx 经过一家商店,他看中了 nn 个物品,在某些强大的力量的帮助下,sx 获得了如下优惠:每个物品价格均为 11 ,如果选择两个相邻的物品,会优惠 11 元,但同一个物品不能被同时选择两次。 由于 sx 手头上的钱只有 mm 块钱,因此对于某些物品,sx 可能不买。现在 sx 想知道对于所有的 k∈[0,m]k∈[0,m],购买的价格恰好为 kk 的方案数,答案对 998244353998244353 取模。

不同方案的定义:设用方式1购买的单个物品的集合为 S1S1,方式2的 物品对 集合为 S2S2,在价格为 kk 的情况下,两种方案对应的集合 S1S1 或 S2S2 至少有一者不同。

输入格式

第一行一个正整数 QQ,表示数据的组数。
接下来 QQ 行两个正整数 nn, mm
注意:测试点包含多组数据

输出格式

一共 QQ 行,每行 m+1m+1 个整数,第 kk 个整数表示当购买的价钱恰好为 kk 时的方案数。

样例

Input 1

3 2 2 3 3 10 10

Output 1

1 3 1 1 5 5 1 1 19 145 575 1289 1683 1289 575 145 19 1

样例解释

约定解释中一对大括号表示一组数据,一对小括号表示一起买。
对于第二个样例:
K=0:Ø
K=1:{1}, {2}, {3}, {(1,2)}, {(2,3)}
K=2:{1,2}, {1,3}, {2,3}, {1,(2,3)}, {(1,2),3}
K=3:{1,2,3}

数据范围

对于 20%20% 的数据 n≤20n≤20
对于 50%50% 的数据 ∑n≤103∑n≤103
对于 100%100% 的数据 2≤n≤1092≤n≤109, ∑m≤103∑m≤103,Q≤5Q≤5

题解

这题用的是动态规划定义 ( dp[i][j] ) 表示前 ( i ) 个物品中,花费恰好 ( j ) 元的方案数。由于相邻物品可以选择成对购买,需要考虑是否选择当前物品以及是否与前一个物品成对购买。

  1. 不选第 ( i ) 个物品:方案数为 ( dp[i-1][j] )。
  2. 单独选第 ( i ) 个物品:方案数为 ( dp[i-1][j-1] )。
  3. 与第 ( i-1 ) 个物品成对购买(方案数为 ( dp[i-2][j-1] )。

因此,状态转移方程为:  dp[i][j] = dp[i-1][j] + dp[i-1][j-1] + dp[i-2][j-1] 

总结

这次比赛可谓是本蒟蒻太菜了。。。没有想到很多题目的正解,下次继续努力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值