原题链接 http://codeforces.com/problemset/problem/103/C
多多和果果准备决斗。多多找到一把左轮手枪,它有一个由n个弹孔组成的旋转圆筒,能够精确地容纳k颗子弹,现在男孩们有机会一劳永逸地解决这个问题。
多多想从具有n个子弹插槽中选择任意k个弹槽,并将子弹放进去。多多旋转左轮手枪的圆柱体,n个子弹槽位移都是等概率的。比赛开始,两个男孩轮流上场。
多多先开始:他把枪对准自己的头开枪。如果扳机前没有子弹,枪管会移动一个位置,武器会交给果果,让他做出同样的动作。游戏继续进行,直到有人中枪,幸存者就是赢家。
多多不想输,所以他必须为子弹选择弹孔,以尽量减少其自身的损失。在所有可能的变体中,他想选择字典最小的一个,其中一个空的插槽在字典上比一个有子弹的插槽小。 确切地说,拥有n个子弹槽的圆柱体可以只装k颗子弹,这n个子弹
槽可以表示为n个字符的字符串。其中有k个是“X”(有子弹),其他的是“."(没有子弹)。
如果一枪没有造成任何人死亡,子弹移动,那么字符串就会向左移动。所以第一个字符变成最后一个,第二个字符变成第一个,依此类推。
求让自己存活几率最大的装弹方式
下字典序最小的那一种字符串。 也就是说如果两个序列概率一样那么尽量选X靠后的,最后有p个询问,当询问到 i 输出 i 的状态 Xi 表示有子弹,反之没有 。