部分参照 SDNU_ACM_ICPC_2020_Winter_Practice_2nd【解题报告】– The__Flash。
欢迎评论提问, 纠错
文章篇幅较长, 请参考右侧文章目录食用。
专题链接: SDNU_ACM_ICPC_2020_Winter_Practice_2nd
A HDU 1559 【The__Flash】的矩阵
1. 题目大意
给你一个m×n
的整数矩阵,在上面找一个x×y
的子矩阵,使子矩阵中所有元素的和最大。
2. 分析
一开始我以为是最大子矩阵和, 做了几个题回来发现就是个二维前缀和.
3. AC代码
|
|
B HDU 3790 【The__Flash】的疑惑
1. 题目大意
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
2. 分析
就是个最短路, 需要维护两个东西, 最短距离和花费.
3. AC代码
|
|
C CodeForces 670C 【The__Flash】的电影
1. 题目大意
有n个人, 每个人只会一种语言, 然后有m场电影, 电影的声音和字幕是两种不同的语言, 问 选择哪一场电影, 使得能听懂的人最多, 如果能听懂的一样多, 那么就使能看懂的人最多, 如果听懂的和看懂的都一样多, 输出其中任何一场电影都行。
2. 分析
比较直观的想法, 统计每个语言会的人数, 遍历m场电影, 选择能听懂的最大的, 如果能听懂的一样多, 选择能看懂的最大的。(由于数据太大进行离散化处理)
我当时没直接离散化,偷懒用的map, wa了两次,最后 还是用map, set卡过了(*^▽^*)
下面贴离散化的做法
3. AC代码
|
|
4. 后继
打算写一篇关于 unique 用法的博客, 写完了回来补上。
D UVA 10305 【The__Flash】的排序
1. 题目大意
拓扑排序裸题
2. 分析
拓扑排序裸题
3. AC代码
|
|
E HDU 4578 【The__Flash】的操作
1. 题目大意
裸线段树, 就是有些许麻烦。4个操作
|
|
2. 分析
两种做法, 先说第一种也是通俗易懂的一种但是代码写起来很抓狂。。。
3个lazy数组, 3个存值数组
|
|
难弄的是add[i] 的 二、三次方和 怎么求。酱紫
|
|
然后就是快乐了写代码时间了, 记得注意取余(因为取余我debug了2小时+ o(╥﹏╥)o
)
第二种, 只用一个lazy数组, 太妙了, 它是以区间里的数是否相等作为lazy数组
|
|
3. AC代码
第一种方法
|
|
第二种方法
|
|
4. 后继
- 线段树要开4倍空间, 为什么
- 传lazy数组时, 不仅值要更新, lazy数组也要更新
- update, build操作完, 别忘了pushup
- uodate操作更新lazy数组时, 别忘了更新值。
- 左子树的区间长度
(len - (len >> 1))
>= 右子树的区间长度(len >> 1)
F CodeForces 797B 【The__Flash】的序列
1. 题目大意
给你一个序列, 找出一个子序列, 使得其和为奇数且最大。
2. 分析
先求出最大和, 也就是把大于0的数都加起来, 如果是奇数就输出, 如果是偶数就减去绝对值最小的奇数。
3. AC代码
|
|
G CodeForces 1223B 【The__Flash】的水题
1. 题目大意
字符串可以进行这样一个操作, 将相邻的字符(a , b)变成(a, a)或者 (b, b)
可以进行任意次这种操作
2. 分析
进行任意次操作后, 字符串里的字符就全一样了, 所以只需要判断两个字符串中是否有相同的字符即可。
把第一个字符串所有字符塞到set<char>
里, 然后遍历第二个字符串, 看看能不能从里面找出一样的。
3. AC代码
|
|
H CodeForces 960B 【The__Flash】的赠予
1. 题目大意
给你两个序列a, b, 定义E = (ai - bi) ^ 2 | i : 1 - n
, 每一次操作可以使序列中的某个数加1或者减1, 问对序列a进行k1次操作, b进行k2次操作后E的最小值。
2. 分析
每一次操作就是使 |ai - bi|
的值减小1, 因为要求最小值, 所以对|ai - bi|
的值越大的 操作 越值得。 例如: 对9 减1后, 实际减小的值为 9 ^ 2 - 8 ^ 2 = 17
, 对8 减1后, 实际减小的值为 8 ^ 2 - 7 ^ 2 = 15
, 可见对|ai - bi|
的值越大的 操作 越值得。
然后就是把|ai - bi|
塞进优先队列里, 每次取top 对其减一, 执行k1 + k2次即可。
3. AC代码
|
|
4. 后继
- 会爆ll, 前面
* 1ll
。
I SCU 4444 【The__Flash】的旅行
1. 题目大意
n个城市(1 - n)
, 有n * (n - 1) / 2
条路, 其中有m条路权值为a(具体哪m条已给出), 剩下的权值为b, 无向图, 问城市1到城市n的最短路。
2. 分析
打比赛的时候想的有点多, 其中有一个情况没想出来,o(╥﹏╥)o
肯定要分为 a <= b
和 a > b
当a <= b
时, 如果dis[1][n] == a, 那就是a。 否则跑a的最短路dis[1][n], 答案就是min(dis[1][n], b)
。
当a > b
时, 如果dis[1][n] == b , 那就是b。
否则, 判断m条a边是不是把 城市1 或 城市n 堵上, 换句话说, 判断城市1 或者城市n所连的所有边是不是都是权值为a的边, 如果 城市1 或者城市n全是, 那么答案就是a, 因为 如果被全堵上, 走两条边的话, 其中一条边肯定是a边, 那就不如直接走1-n了。 如果都没被堵上, 答案就是走一条a边和走2条b边的最小值 min(a, 2 * b)
。
如果不会自定义优先队列优先级, 请戳 优先队列定义优先级的方法
3. AC代码
|
|
J HDU 1556 【The__Flash】的球球
1. 题目大意
中文题, qaq
N个气球排成一排,从左到右依次编号为1,2,3….N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽”牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?
2. 分析
差分模板题。
3. AC代码
|
|
K POJ 2018 【The__Flash】的牛牛
1. 题目大意
给你一个长为n(n <= 1e5
)的序列, 求其长度至少为F区间, 其平均值*1000的最大值。
2. 分析
一开始以为是dp, 然后没思路qaq
二分答案qaq, tql
没想到居然是二分答案, qaq。
关键是如何以更小的时间判断二分出来的值 (mid)是不是符合要求的,也就是 判断 长度至少为F的区间的平均值, 有没有大于mid的。
先说二分, 我要求最大的满足条件的数, 所以就是从后向前查询。 从后向前详情请点击 二分总结
然后如何判断呢, 那就把区间都减去mid, 就变成找一段区间[l, r], 使 sum[r] - sum[l - 1] >= 0
, 这样记录 sum[l - 1]的最小值即可。
还有一种做法, 请参考 POJ2018 Best Cow Fences (二分答案+类前缀和)
3. AC代码
第一种做法
|
|
第二种做法
|
|
4. 后继
- 知道如何在O(n)求 长度至少为k的 区间和的最大值
L CodeForces 621B 【The__Flash】的鲨鲨
1. 题目大意
1000 * 1000 的网格中, 处于对角线上的鲨鲨会互相打架, 求有对少对鲨鲨会打架。
2. 分析
画图可分析, 处于对角线上的鲨鲨满足 x + y = t (0<= t <= 2000)
或者满足 x - y = t (-1000 <= t <= 1000)
, 分别用两个数组储存在每一条对角线上的个数, 然后n * (n - 1) / 2
计算即可, 注意x - y
的范围, 可以化成 x - y + 1000 = t (0 <= t <= 2000)
, 因为这个我re了两次QAQ
3. AC代码
|
|
4. 后继
- 注意数组下标是不是负数
o(╥﹏╥)o
M Gym 102222H 【The__Flash】的达拉崩吧斑得贝迪卜多比鲁翁
1. 题目大意
|
|
2. 分析
显而易见, 贪心, 但是当时没会用理解的思维推理, 而是臆测, 不过差一点(很多)就猜对了QAQ
最优情况肯定是把一只怪兽打到死。先只考虑攻击两只怪兽的优先级问题。
设t[i] 是把第i只怪兽打死需要的次数, sum是所有怪兽的总攻击力和
先进攻第一只 所受的攻击 是 sum * t[1] + (sum - atk[1]) * t[2]
先进攻第二只 所受的攻击 是 sum * t[2] + (sum - atk[2]) * t[1]
如果要先攻击第二只
|
|
所以按照 atk[i] / t[i]
排序就行。
那么怎么求把第i只怪兽打死需要的次数呢, 二分次数就行了。
|
|
4. 后继
常见贪心证明手段:
- 临项交换:
证明在任何局面下,任何对局部最优策略的微小改变都会造成整体结果变差,经常用于以“排序”为贪心策略的证明.
- 范围缩放:
证明任何对局面最优策略作用范围的拓展都不会造成整体结果变差.
- 决策包容性:
证明在任意局面下,作出局部最优决策以后,在问题状态空间中的可达集合包含了作出其他任何决策后的可达集合。换言之,这个局部最优策略提供的可能性包含其他所有策略提供的可能性.
反证法
数学归纳法
例题:
恰似你一低头的温柔,较弱水莲花不胜寒风的娇羞, 我的心为你悸动不休。 --mingfuyan
千万不要图快——如果没有足够的时间用来实践, 那么学得快, 忘得也快。