—— | 期望 | 实际 |
---|---|---|
A | 100 | 100 |
B | 100 | 100 |
C | 100 | 100 |
D | 100 | 100 |
E | 100 | 100 |
F | 100 | 100 |
G | 0 | 0 |
H | 100 | 90 |
sum | 700 | 690 |
水题都过不了嘤嘤嘤
A 方程f(x)的根
签到题,二分解方程+直接 \(O(1)\) 输出
B 骨牌
啊~晃得第一眼以为是内道数位dp,仔细一看发现\(O(n)\)的dp,就很快切掉了,不过后来听旁边大佬说是斐波那契数列,瞬间醒悟
C 大神排队
解题思路
- 首先吧,很容易联想到另一道更离谱的题————国王游戏。相似点在于都是左右手,且都要排队,与前缀有关,
但这道要更简单 - 然后,就考虑按照国王游戏,尝试着交换 \(i\) 与 \(i+1\) 的位置,看能否让答案更优。
- 设 \(i\) 的精神摧毁值为 \(kill[i]\) ,抵抗值为 \(life[i]\) 那么便可以转化为比较 $\ \sum_{j=1}^{i-1}(kill[j])+\max(-life[i],kill[i]-life[i+1])\ $ 与 $\ \sum_{j=1}^{i-1}(kill[j])+\max(-life[i+1],kill[i+1]-life[i]) \ $
- 我们再稍微调整一下,可以得到,若 $ \max(life[i+1],kill[i]+life[i])>\max(life[i],kill[i+1]+life[i+1]) $ 便可以进行交换
- 其实吧,到这里就已经可以做了,我就是这么做的,
而且A了
bool cmp(u2003 x,u2003 y){
return max(x.life+x.kill,y.life)<max(y.life+y.kill,x.life);
}
-
但是,我们要精益求精,看看标答怎么进一步推导:首先,易证 \(life[i]<life[i]+kill[i]\) ,若有 \(life[i+1]>kill[i]+life[i]\) 则有 \(life[i]<kill[i+1]+life[i+1]\) ,则会满足 \(kill[i]+life[i]<kill[i+1]+life[i+1]\) 那么可以轻易推导出
(这里写不下)比较 \(kill[i]+life[i]\) 与 \(kill[i+1]+life[i+1]\)
7.over
D 新约瑟夫问题
\(O(n+ \log n)\) 解决
先约瑟夫从末状态推到n,然后再不断往下减
E 开心的金明
01背包水题
F 奇怪的电梯
BFS,搜就完事了
G 团伙
PS.时间不够,题还是简单
1.初见:woc带权并查集
2.仔细一看,直接分别处理不就行了,反正并查集可以不管环之类的
3.友好关系建并查集,敌对关系先建图,后面再儿子的儿子和自己扔进同一个并查集,最后看有多少个并查集就行。时间复杂度 \(O(n^2)\)
H 遭遇战
模拟,两个同步就行,坑点:判别先输入的为横坐标还是纵坐标;以及要判断是否起点就在同一处!!!(10分的教训)