第四周
Cherry(cf)
链接:
https://codeforces.com/contest/1554/problem/A
思路:
刚开始又大又小的没看明白,但其实结果就是输出一个连续子数组里最大值和最小值的乘积最大值,其实没那么麻烦,只需要保证子数组长度为2,那么一定有一个最大和一个最小值,从头到尾遍历一遍即可
俺是一坨垃圾代码QWQ:
1 | int main() |
Cobb(cf)
链接:
https://codeforces.com/contest/1554/problem/B
思路:
他给了一个公式,要求输出整个数组中能够通过这个公式输出的最大值。观察这个公式,我们不难发现有四个分为两组的变量,一组是i*
j,另一组是k*
(ai|aj),我们需要前一组的值尽量大,后一组的值尽量小。前面一组,我们尽量保持i,j相间,这样能尽可能保证结果最大,而后面那一组,暴力就完了,n^2跑一下就妥了
俺是一坨垃圾代码QWQ:
1 | int main() |
PizzaForces(cf)
链接:
https://codeforces.com/contest/1555/problem/A
思路:
最小也得切6块,所以6块以下都需要15分钟,设分别需要小中大号披萨各a b c个,则可以得出一共需要6a+8b+10c=2(3a+4b+5c)块披萨,需要15a+20b+25c=5(3a+4b+5c)minutes,而需要的披萨数>=朋友数时才行,所以如果朋友是奇数的话还要多加一个黛苏珂来凑数,这样就能够刚好用最少的分钟数做出刚刚好的披萨,需要的分钟数自然就是x/2*5了!
1 | int main() |
Two Tables(cf)
链接:
https://codeforces.com/contest/1555/problem/B
思路:
分类讨论到极致,差点把自己整吐了,以后遇到这种题千万不要用脑子硬想,一定要动笔。大概说说思路,剩下的长度和宽度均不够的情况,肯定是不行的,输出-1,在剩下的高度或宽度够第二个矩形时,不需要移动。接下来分两种情况,如果宽度够,和宽度不够。宽度够的话,需不需要移动,需要移动宽的话,那不移动时的高度够不够……不说了,就这么疯狂分类讨论,别漏了就行,看代码。
1 | int main() |
Coin Rows(cf)
链接:
https://codeforces.com/contest/1555/problem/C
思路:
这应该是本场里最简单的题,竟然放在c的位置,可坑死我了,最后40s内才AC,不多说了,就一暴力前缀和贪心,因为是二维的,所以先手一定会有一个拐点,会把两条路线分为左下和右上两个部分,求他们两个的最大值,在求这些最大值里最小的,就是答案(代码不建议参考,刚开始想错了,最后一分钟紧急修改,因为是前缀和,所以根本不需要a,b数组,找最小值也不需要弄set里这么麻烦)
1 | int main() |
Gregor and Cryptography(cf)
链接:
https://codeforces.com/contest/1549/problem/A
思路:
对于所有的质数,对2除余一定等于1,对自己本身-1除余也一定等于一
1 | int main() |
Gregor and the Pawn Game(cf)
链接:
https://codeforces.com/contest/1549/problem/B
思路:
根据题目模拟,注意斜着走后的棋子的标记
1 | int main() |
Gregor and the Pawn Game(cf)
链接:
https://codeforces.com/contest/1549/problem/B
思路:
根据题目模拟,注意斜着走后的棋子的标记
1 | int main() |
Web of Lies(cf)
链接:
https://codeforces.com/contest/1549/problem/C
思路:
在每次查询后,朋友是会复活的,所以增删边是不对结果有影响的。通过题意可以看出,在一次查询过后,场上不再会有朋友关系,一定会留下来最大的。所以只需要维护一个数组,在建边时较小的那个之后一定会死,标记上。总的减去标记的就是答案
1 | int main() |