1.模拟题,直接模拟即可。
2.把所有大臣按a*b从小到大排序,高精度计算即可,注意除法的单精度版本其实不难写。。。没必要写高精除高精。
3.对每个i点维护nextA[i],nextB[i]表示i往后A的话去哪里,B的话去哪里。
这个可以用链表来计算,我们把所有数从小到大排序,然后串成一个链表。
从1到n每次找Hi在链表里的前后4个判断一下,然后把Hi从链表里删掉。
然后这样我们再用nextAB[i]表示i往后A走一次B走一次到哪里。
那么可以发现i->nextAB[i]形成了一颗树。
之后可以用树的算法做。
不过最简单的还是预处理next[i][j]表示i往后A和B都走了2^j次到哪里。
然后从大到小判2的每个次幂。
PS.求nextA[i]和nextB[i]的话。。。用C++的set是非常方便的。。。Pascal可能就有点囧了
2.把所有大臣按a*b从小到大排序,高精度计算即可,注意除法的单精度版本其实不难写。。。没必要写高精除高精。
3.对每个i点维护nextA[i],nextB[i]表示i往后A的话去哪里,B的话去哪里。
这个可以用链表来计算,我们把所有数从小到大排序,然后串成一个链表。
从1到n每次找Hi在链表里的前后4个判断一下,然后把Hi从链表里删掉。
然后这样我们再用nextAB[i]表示i往后A走一次B走一次到哪里。
那么可以发现i->nextAB[i]形成了一颗树。
之后可以用树的算法做。
不过最简单的还是预处理next[i][j]表示i往后A和B都走了2^j次到哪里。
然后从大到小判2的每个次幂。
PS.求nextA[i]和nextB[i]的话。。。用C++的set是非常方便的。。。Pascal可能就有点囧了
