随笔 - 18  文章 - 0  评论 - 2  阅读 - 404

Codeforces Round 898 (Div. 4)

这是我的vp,不是正真的contest.

 

A: 不想多说,读者应该可以做到的!!!

 

B: 让g=product(移除掉0的a):

如果有多过1个0答案肯定是0。

如果只是有1个0答案就是g。

没有0,答案就是max(g/a[i]*(a[i]+1)) 任何 i。

 

C: 没有仔细想那个profit的formula. 手打表,sum就可以了。

 

D:就是双指针, 如果两个指针的插值大过k:

那把左指针移去右指针那里然后答案加1

 

E: 小小二分,竟敢班门弄斧!!!!

看一个值y可以不可以就是每个h[i]<y, s+=(y-h[i])

然后看s<=x

 

F: 又是双指针!!!

就是当我们两个指针的位置一样时要特判。然后。。。就没有了

 

G: 啊这题蛮好的。 注意到 AAABAA 换时:

AAABAA->AABCAA,这里就右边就是废了然后左边可以做连锁反应

所以我们的决策点就是在每个B要左还是右?然后能加的值就是多少个连续的1

那么就是dp[i][左/右], 具体的转移方式就是:

l[i]为左边有多少个连续的1,r[i]则是右边。

dp[i][0]=max(dp[i-1][1],dp[i-1][0]+l[i]) 如果上一个拿了右边,现在就拿不到了

dp[i][1]=max(dp[i-1][1],dp[i-1][0])+r[i] 上一个不管什么方向,我现在往右上一个B管不到我了

答案就是max(dp[m][0],dp[m][1]) m=在字串里有多少个B

 

H:又到了我最喜欢的图论题

n个边代表说这是一个有cycle的图。 B能赢的方式就是去到cycle里。

那么我们就需要看如果A在B去到cycle的路途中那么答案就是NO

那么现在A要堵住B不让他去到cycle里,那么唯一的方式就是A去到cycle(让A进入cycle的节点称为topA)里,然后从那里最小路径去到B到达cycle的节点(topB)

如果A->topA+topA->topB的时间<=B去到topB的时间:答案就是NO

要不然就是YES

我的代码里用了一点https://codeforces.com/contest/1872/problem/F的删除叶子的技巧, 有想看看的可以去看看xd

 

做完啦!!!挺educational的题单(?)

posted on   yl_neo  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示