2024年ICPC贵州省赛题解

少于 1 分钟阅读时长

发布时间:

2024贵州省赛题解

A. 破解住宿信息

简单判断。输入字符串含空格,整行输入。

string s;
getline(cin,s);
int sum=0,x;
x=s.find("GZU");
while(x!=-1){
    sum++;
    x=s.find("GZU",x+1);
}
if(sum==0) cout<<"yezhulin";
else if(sum%2) cout<<"heshangpo";
else cout<<"qingrenpo";

B. 小帅的车费

分层图最短路模板题。直接建立 k+1 层图,层与层间依次用打折后的边权相连。跑一遍 Dijkstra 即可。

C. 细胞的合并

数据量为 \(2000^2=4e6\),暴力枚举细胞是否相连,相连就并查集加入。

D. 还在排队的人

双端队列的模拟,使用 deque 直接秒。

E. 打怪兽

二分 + 尺取法。二分 damage,在 check 函数中计算所需最少次数。维护一段数组存放造成伤害的下标,如果某造成伤害下标对当前第 i 处造成不了伤害,左指针前移。

F. 关灯

暴力枚举最大长度 len。每次操作使 \([i,i+k-1]\) 内的数都减一,利用差分数组实现。需要考虑负数取模的影响。

G. 小帅的骰子

模拟两次投出来的结果,然后判断满足条件的可能结果有多少种,求最大公因数约分即可。

H. 粉刷匠小帅

线段树,待学习。

I. 寻找宝藏数

数位 DP。先利用质数筛预处理出所有 4 位合数。设 \(dp[N][i][j][k]\) 表示最高位为 i、次高位为 j、第三位为 k 的 N 位宝藏数的个数。时间复杂度 \(O(n*10^4)\)。

J. 数字游戏

设删掉一个数字及其生成的所有数字所需要的次数的奇偶性为 f[x]。通过打表观察到只有 f[1]=1,其余为 0。所以只需要统计数字 1 的个数的奇偶性即可。

K. 最好的好朋友活动

若 a[i] 是负数,则在 b 数组中找一个最小的负数,负负得正则乘积最大;反之正数找最大正数。时间复杂度 \(O(max(n,m))\)。

L. GZU的建筑

字典树 + 树上启发式合并(dsu on tree),待学习。

M. 递增的鸭鸭

离散化 + DP + 组合计数。DP 状态:\(dp[j]\) = 前 j 只鸭子的合法方案数。遍历所有离散段,在每个段上使用隔板法(C(n+r-l, n))更新状态。

N. 乐乐爱购物

莫比乌斯反演,待学习。

发表评论