5/5
这场CF有毒啊!!好在不计rating(/▽╲)
题A Mishka and Game
题意:略
题解:略
题B Mishka and trip
题意:给你一个图,告诉你一开始围成一个环,然后每个点都有自己的权值,然后两个点的路径权值为这两个点的乘积,然后告诉你某些点是中心点,然后问你权值之和。
题解:这题有点意思,第一题太水了,反而觉得不太好。
(1)先算出对于那些中心点的所有权值,这样会重复,画图发现重了的地方就是多算了一次这些中心点形成的完全图,所以只要(2)减去这些中心点形成的完全图即可。(3)最后要加上那些不是中心点并且左边也不是中心点的点。
题C Chris and Road
题意:给你一个凸多边形,然后告诉你人在原点,最大速度为u,凸多边形的速度为v,可以碰到这个多边形的边,但是不能够进去内部,问你时间t。
题解:刚开始我看这道题没什么思路,div2第三题都不会做了,好弱~~
现在站在上帝视角,的确是div2第三题,如果一开始就往这个方向想的话。。。。
先假设一定要等到凸边型过去了才能过去,考虑凸边型的一个端点(a,b),假设这个点是最慢的点(不一定是最下边的点),那么这个点经历的时间是a / v,然后我们到达这个点的时间是b / u,显然我们要等到这个点过去了才能过去,所以你u再快也没卵用,u慢也没影响,因为等你过去了,它也已经过去了,所以我们做个时间差,a / v - b / u,这个时间差最大的时候就说明这个点是最慢的点,然后一定要等这个点过去了,后面一定可以以u的速度跑到终点(可以联系凸的性质),所以最后的答案是a / v - b / u + w / u;还有一种情况没说,就是假设我们在凸边型到达y轴之前就先过去了不就可以了,所以记录一个a / v - b / u最小的点,然后如果这个a / v - b / u >= 0就说明可以一直以u的速度前进。
题D Mishka and Interesting sum
题意:给你一串数,然后有q个询问,问你[l,r]出现偶数次数的数的异或和。
题解:通过这道题我学会了离线处理区间问题的姿势。假设预处理一个前缀和,显然只能够得到这个区间的奇数次数的数的异或和,如果有这个区间所有不同的数的异或和的话就可以异或起来得到偶数次数的异或和。处理的方法就是树状数组(当然也可以线段树)。先按照r排个序,然后先把数插入到树状数组,但是如果遇到之前出现过的数,那么就把那个位置的数删掉即可(仔细推敲一下还是可以的)。通过这样离线处理这个不重复的数还是很有效的(套路)。之前训练遇到一道题强制在线(用了分块或者kdtree),感觉这样积累套路还是不错的。
题E Mishka and Divisors
题意:给你n个数和k,让你从这n个数里面挑最少的数形成k的倍数,如果个数一样就使得数的和最小。
题解:dp(i,j)表示前i个数得到j的倍数的最小的个数,最后答案是dp(n,k)。这个k这么大,用Hash一下即可,比较简单的E题。