T1:直接计算
T2:枚举法
T3:因为一共得人数不超过100000,所以我们可以用一个队列存储来访人得国籍,然后记录下每一船的尾指针。在求一个ans时,把所有的与当前时间相差86400秒以上的船去掉,当前船加上就行了。
T4:这题要先化简公式后可得出:
设CD之间的距离为i,则AB之间的距离为2i,BC之间的距离为6i+k(k>0)。
85分做法:
首先存储每一个魔法值有多少个魔法道具,设为w[i]。
然后枚举ABC三个数的位置,算出D,判断是否符合条件,符合则保存下来,保存方法如下:
ans[A][1]+=(w[B]*w[C]*w[D]);
ans[B][2]+=(w[A]*w[C]*w[D]);
以此类推。
100做法:
我们只需枚举i,A,就可以求出ans[A],ans[B]。我们只要知道i和A,就可以求出B,那么C,D有多少种可能呢?只是我们后缀和解决。设s[l]表示但长度为i时l到n之间CD的对数,则s[l]=s[l+1]+w[l]*w[l+i]。那我们设A的值为j,则ans[A][1]+=(w[B]*s[j+i*8+1])。因为C的最小值是A+i*8+1。ans[B]+=(w[A]*s[j+i*8+1])。
求CD的做法跟AB一样,只不过要用前缀和。