SCPC
简要总结
总的来说,这次的成绩还算令人满意。13道题拿到8个气球,最后还有一个绝杀,不错了。
唯一的遗憾就是F没做出来,lsw五分钟暴切,神。
按照做题顺序排序
做出来的题
A Chuanpai
题目大意
输入一个整数\(k\),求\(x+y=k\)方案数,\(x≤y≤6\)。
Sol
太水了,直接暴力枚举
K K-skip Permutation
题目大意
输入两个整数\(k,n\),构造一个\(n\)的排列,使得满足\(a_{i+1}-a_i==k\)的数量最大化。
Sol
还是水,直接\(1\)到\(k\)循环,每个循环里面不断加\(k\)循环即可
D Rock Paper Scissors
题目大意
两人玩石头剪子布,现给出每人每种总共出了多少次(保证加起来相同),求出一种出拳顺序下,\(B\)获胜减去\(A\)获胜的最大值。
Sol
依然水,能赢的都赢,然后更新一遍。接下来能平的都平,又更新一遍。最后减去输的即可。
令人裂开的是\(zyw\)写了一遍,\(WA\)了,我重构代码一遍,又\(WA\)了。让票池查错,
\("long\ long\)开了吗\("\)
......
H Nihongo wa Muzukashii Desu
题目大意
给定一大堆日语中动词词缀\(masu\)的转换法则,输入一系列词,让你输出转换后的词。
Sol
一堆\(if\)就完了,字符串要注意下标问题。
B Hotpot
题目大意
\(n\)个人按照一定的顺序不断循环一共进行\(m\)次操作。
这\(n\)个人都有一个对应的喜爱的食物(可重复),对于第\(i\)个人的操作,如果火锅里有他喜欢的食物,那他就会把它吃完并获得\(1\)快乐值,否则会把这种食物加入火锅。
初始时火锅是空的,问\(m\)次操作以后每个人的快乐值是多少?
\(m\)是\(10^9\)的范围;\(n\)是\(10^5\)的范围
Sol
进行\(2*n\)次操作的时候,火锅一定是空的
那就直接模拟\(+\)循环部分直接乘\(+\)特判剩余部分即可
M True Story
题目大意
\(n\)个人在离登机口\(x_0\)的地方,登机口将在\(p_0\)的时候关闭。
但是,有\(m\)次延误通知
第\(i\)次通知在\(t_i\)时公布,将关闭登机口的时间改为\(p_i\),数据保证\(t_i>t_{i-1}\;;\;p_i>p_{i-1}\)
第\(i\)个人有一个速度\(s_i\),当他估计自己赶不上飞机时他就会停在原地停止思考。反之则会行动去赶飞机
求最终有多少人能赶上飞机
Sol
一旦一个人开始行动,他一定能到达终点。
所以每次将关闭时间和通知时间求差取最大值即可。
然后比较一下加个统计就完事了。
此时\(zyw\)在吃他的早餐三明治,票池在吃他的蒜蓉面包,我直接处于两面包夹芝士。
L Spicy Restaurant
题目大意
给定一个有\(n\)个点\(m\)条边的无向图,每个点有一个点权\(w_i\),现在有\(q\)次询问,对于每次询问给定两个数\(p_i\)和\(a_i\)。
对于第\(i\)次询问,求出以\(p_i\)为源点,满足\(w_k≤a_i\)的所有点中的最短路长度。
\(1≤n,m≤10^5\ ,\ 1≤q≤5×10^5\)
\(1≤w_i,p_i,a_i≤100\)
Sol
前面水题水傻了,望着题干发神发了半天,此时票池在刚\(E\)题,\(zyw\)也在发神。
想了很多\(O(n^2)\)级别的算法,然而肯定都不行。
然后跑到窗子旁边清新空气下想了一会儿,想出来了。
因为\(w_i\)的值很小,所以枚举\(w\)的值搜索。
对于每次枚举先遍历所有的点,如果\(w_i≤w\),那么就将这个点加入队列,然后\(BFS\)即可。总时间复杂度\(O(w*(n+m))\)
这个时候午餐送过来了,双神又开始吃午餐,持续两面包夹芝士。
午餐质量挺高的,有从没见过的两块肉的桃李三明治、牛奶和水果,针不戳。
J Ants
题目大意
一根长为\(l_0=10^9+1\)的木头上有\(n\)只蚂蚁,对于每只蚂蚁给定\(a_i,d_i\),分别表示这只蚂蚁的初始位置和初始方向(\(d_i=0\)为左,\(d_i=1\)为右)。
木头的两端各有一块挡板,挡板有耐久度\(l,r\),表示左板蚂蚁撞\(l\)次会坏掉,右板蚂蚁撞\(r\)次会坏掉。
蚂蚁在撞到挡板或其他蚂蚁时都会调头,注意把挡板撞坏的那只蚂蚁也会调头。如果蚂蚁走到了已经被撞坏的挡板时,它就会离开木头。
每只蚂蚁的速度都是\(1\),求多久以后所有蚂蚁全部离开木头。
Sol
可以先看一下独木桥。
两只蚂蚁是完全相同的,所以相撞以后调头可以视为没有调头。
那么在经过\(2l_0\)的时间以后所有蚂蚁和初始状态一样,与\(B\)题相似,先暴力模拟一遍然后维护此期间挡板每次被撞的时间。
有一个重要的性质是当一块挡板被撞破,至多再过\(2l_0\)所有蚂蚁就会全部离开(撞坏那只蚂蚁跑完整根木头)
如果撞坏挡板的蚂蚁跑到另一端时挡板也坏了,那么它会直接掉下去。此时时长只需要加上\(l_0\)。
分别处理左右挡板被撞坏的时间\(t_l,t_r\),若\(abs(t_l-t_r)≤l_0\),那么\(ans=max(t_l,t_r)+l_0\)。否则\(ans=min(t_l,t_r)+2l_0\)(可以模拟一下帮助理解)。
于是这道题就\(O(n)\)处理完了,事实上如果用二分答案就会\(TLE\),出题人评讲时专门有提到。
这个题是在离结束还有\(11min\)的时候一遍过的,非常振奋士气。
出题人的标程怎么这么复杂,我直接暴踩好吧
差点就做出来的题
E Don't Really Like How The Story Ends
题目大意
给定一个有\(n\)个点,\(m\)条边的图,求出最少加多少条边才能使这个图的\(DFS\)序与标号相同。
Sol(不确定)
贪心,顺着从\(1\)号点开始搜索,如果第\(i\)个点出度不为\(0\)且不含\(i+1\)节点,那就\(ans++\)。很容易证明正确性。
F Direction Setting
题目大意
有\(n\)个点,\(m\)条未定向的边,,每一个点有一个给定权值\(a_i\),求一个定边方案,使得
最小。其中\(d_i\)表示该节点的入度。
Sol
正解是最小费用最大流,其实网络流的题精华就在于如何建边,板子基本一样(但是我都不会\kk)。
这道题就是一道很标准的二分图,一边是点集一边是边集,加上一个超级源点和超级汇点。
由于我写不来网络流,所以我写的是基于匈牙利算法思想的\(ljw\)算法。
思路是这样的:
还是按照匈牙利的思路,每次访问一个点时,如果还没到达它的容纳上限,那就把它再装一条边。如果已经满了,就暴力把每条存下来的边重新询问一边。
时间复杂度应该是\(O(n^2m)\),可惜就是锅了,至今没有调出来。
也许会但没看的题
I Monster Hunter
题目大意
一个骑士以固定的长度为\(n\)的伤害顺序循环地攻击\(m\)只怪物,每只怪物血量是\(h_i\),循环顺序中每次攻击伤害值是\(a_i\)(\(1≤a_i≤3\)),骑士每次可以选择攻击任何一只怪物。
现要求求出骑士至少花费多少次攻击才能击败所有怪物?
Sol
\(a_i\)的范围这么小,肯定是要特殊处理了。
如果\(1≤a_i≤2\),那就好办了,只需要把\(a_i=2\)的攻击尽量网剩余血量\(≥2\)的怪物上打即可。
把这个思想延伸到\(3\)的情况:其实在怪物血量\(≥6\)的时候,贪心策略和上面的是一样的。所以只需要先按照贪心把每只怪物都控制血量到\(6\)以下再特殊处理即可。
完全不会的题
C Triangle Pendant
计算几何??我题目没读懂,跳过。
G Hourly Coding Problem
一个负数应发的惨案
题目大意
给定一个长为\(n\)的序列和一个参数\(k\),要求出把这个序列划分成\(k\)个非空的部分,所有部分和的最大值的最小值是多少
\(-10^9≤a_i≤10^9\),输出的答案要求为所有符合的方案中字典序最大的那个。
Sol
如果保证数列中的数是非负的,那么就是一个非常简单的二分,甚至不需要优化。
然而没有这个条件,于是正解变成了前缀和值域线段树......
终于写完了,好耶!

浙公网安备 33010602011771号