A题“发现后手必胜的 n 的二进制表达里只有偶数位可能为 1。”,这个可以加上证明吗,菜鸡列出后手必胜了也没有发现
Xiejiadong edited 5 年,6 月前
Monthly
变成了 Every Two Months
,说不定以后变成 Quarterly
了也说不定。# | Tag | Idea | Developer | Tester |
---|---|---|---|---|
A | 博弈 | cs2017 | Xiejiadong | Kilo_5723 10175101214 |
B | 贪心 | Xiejiadong | Xiejiadong | 10175101214 oxx1108 Grunt |
C | 签到 | Weaver_zhu | Weaver_zhu | 10175101214 oxx1108 |
D | 数学 | Kilo_5723 | Kilo_5723 | 10175101214 Grunt |
E | DP | Grunt | Grunt | 10175101214 Xiejiadong |
本题的模型是一个平等博弈的游戏。
题目中的 DAG 可以通过 SG 函数
把所有后手必胜的局面列举出来,发现后手必胜的
可以证明,所有符合这种性质的
10175101214 : 这题博弈和我以往做的不太一样,挺有意思的。
因为题目保证了不包含数字
较小的位数一定是
最小的数一定产生在位数为
分配的方案一定是,按照数字从大到小,依次分给当前可能最小的数。
当前可能最小的数的数量是会发生变化的,因为一旦当前所在位所分配的数字不同,就一定会产生大小的差异,也就是说,当前可能最小的数一定会越来越小。
还可以发现的是,最小的数,一定是一个数字从大到小的非降数字构成的,也就是相同的数字只可能在同一段出现(这个从上面贪心的策略可以得到)。
于是对于最小值,我们模拟贪心的过程,每一个数字一次性放入,对于取模的结果,可以预处理得到。
Xiejiadong : 我和验题人都没有考虑到大力预处理暴力就能过的问题。所以变成了纯·签到题。如果加上在线修改,就能卡掉他们了吧。
因为受到的伤害是固定的,所以问题不在于哪个时机 Cuber QQ 打出最后一击,而是是否能在每次外界攻击前配合之前的攻击打死小兵,我们只需要在这次攻击结算前一秒打出最后一击就行了。
而要求第一下最晚,就恰好是从
然后就是从小到大枚举每次攻击前一秒,看看是否可以给出最后一击,然后更新答案。注意时间可能相等,需要一次处理完所有
oxx1108 : 感觉这题的坑,挖的有些许生硬。
Xiejiadong : 这题的题面进行了无数次的修正,希望最终版本没问题吧。
我们只关心鸭子是否分布在一个半圆中,所以鸭子离圆心的距离不重要。我们可以假设鸭子都落在圆周上。
如果所有的鸭子分布在同一个半圆中,那么让鸭子面朝圆心,所有的鸭子一定都在某一只鸭子的右手边。
令所有鸭子都在第
答案是肯定的。可以证明
因此,
更多解法,可以查阅知乎。
Grunt : 这题知乎上有答案。
Kilo_5723 : 当时是看到了
Xiejiadong : 能自己完整做出来的人,估计不是很多吧。
by 10175101214
考虑在每次插入一个数后维护若干桶( Bucket )。
每个桶记录一下信息:
当前值
剩下需要考虑的位置
每个桶支持操作:
计算最大的可能值
考虑插入
1、插入
curval:0
j:31
flag=false
num:9
10
2、插入
3、插入
1、插入过程:如果插入一个数桶没有满则直接插入,若需要桶分裂,假设分离了
2、查询过程:动态维护
与解法一大同小异,但是时间复杂度相差一个
首先考虑离线的版本:
可以用广为人知的 SOS DP解决。
具体做法是将去重后的插入按操作顺序存为数组
对于每个询问,从高到低逐位确定答案的那一位是否可以为
再考虑一个暴力的做法:
维护一个数组
考虑如何优化暴力的复杂度:
观察到冗余的操作主要在于
最后的问题是按什么样的顺序枚举子集,这个可以参照SOS DP的方法。
具体可以参考上图中的枚举顺序。
最后我们得到了一个化离线为在线的神奇做法, 时间复杂度为
这个打表以后,很容易发现的规律吧。
好吧,我也是最后几分钟打的表,也没看多久,早知道多找找规律了QAQ