这个问题的核心是找到一个零食的子集(Tk的零食),其总价格 STk 在满足 STk≤S弟弟 的前提下,使得差值 S弟弟−STk 最小。
设所有零食的总价格为 S总=∑i=1nai。 因为所有零食必须被分配,所以有 STk+S弟弟=S总。 将此式代入条件1,得到 STk≤S总−STk,化简后为 2STk≤S总,即 STk≤S总/2。
同时,我们要最小化 S弟弟 - STk = (S总 - STk) - STk = S总 - 2STk。
Tk 和他的弟弟买了n种不同的零食(编号从1开始),每种零食各一个。给定整数m以及价格表{a1,a2,..,an},其中a1=m且对任意2≦i≦n有ai=ai−1×m。编号为i的零食价格为ai。
现在需要把全部零食在两人之间分配(每件零食必须属于其中一人)。Tk作为哥哥,希望自己拿到的零食总价格不超过弟弟零食的总价格;在满足上述条件下,Tk为了照顾弟弟的自尊心希望两人的总价格差尽可能小。请输出Tk最终拿到的零食编号(编号顺序任意)。
如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
每个测试文件均包含多组测试数据。第一行输入一个整数T(1≤T≤104)代表数据组数,每组测试数据描述如下:
在一行上输入两个整数,使用变量n、m(1≦n≦2×105;1≦m≦109)指代,分别表示零食种类数与 价格倍率。
除此之外,保证单个测试文件的n之和不超过2×105
对于每一组测试数据,新起一行输出:
当k=0时,第二行留空。
输入
2
1 2
5 1
输出
0
2
1 2
说明
当n=1,m=2时,价格为{2},若Tk拿走它将违反不超过条件,因此k=0;
当n=5,m=1时,价格全为1,选取编号1,2得到2的价格,弟弟得到剩余3的价格,可以证明不存在更优的方案。