A. Vanya and Cubes
思路:累加计算叠到每个高度至少需要多少方块,然后找最后一个满足的即可。
#include
#include
#include
B. Vanya and Lanterns
思路:想都没想敲了个二分。。结果T了。。正解是先排序,然后算相邻两个灯距离/2和首尾灯到边界的最大值,直接输出最大值即可。
#include
#include
#include
C. Vanya and Exams
思路:贪心。优先写性价比最高的,注意不要溢出分数上限就行了。
#include
#include
#include
D. Vanya and Computer Game
思路:居然是判断谁补的刀。。先是算出了一个差不多打死的时刻,然后去模拟。。结果超时了。应该这样做,把两个人的攻击间隔改为y秒A一刀和x秒A一刀,攻击频率没有改变,整型好处理。。然后把他们同时A出第一刀的时刻(其实就是最小公倍数)前的所有攻击和是谁A的都按时间顺序存在数组里。这样他们同时出刀以后,出刀顺序还是那个序列。最后把血量取模,检查最后一刀是谁A的就行。
关于"Both"的判断,有两种情况,一是最后剩2滴血;同时出刀,二是最后剩一滴血,同时出刀。只要检查A死那刀的前后各一刀即可判断出来。
#include
#include
#include
#include
E. Vanya and Field
思路:gcd(dx,n)=1和gcd(dy,n)=1告诉我们,按这个向量,可以循环取n个点。然后把所有的点分为n类就行了,具体是x=0,y=i时循环能取到的点,分到i类,i取0~n-1。我的分类方法是,求dx关于模n的逆元(其实总复杂度没有减小,暴力就可以),然后据此算出x增加1时,y的增量。然后打表算出第0类(x=0,y=0能循环到的点)在x取不同值时,y的取值,据此就可以给所有点分类了。最后就是统计哪类点最多,随便找一个该类的点输出即可。
#include
#include
#include
#include