特别鸣谢secret大神教会了我T3
T1简单的区间
跟原来的某道题思路一样,dfs+启发式合并
T2简单的玄学
ans=((2^n*m)-(2^n)-m+1)*((2^n)-m+2)...(2^n))/(2^(n*m))
30分算法:
暴力枚举1到m并按照式子计算
70分算法:
分母上只有2这个质因子,考虑对分子里的2进行提取,之后快速幂对1e6+3取模即可
时间复杂度O(m*log2(m))
100分算法:
通过上面的式子可以发现m很大的时候分子对p取模便成了0,所以可以直接break。
(注意break会导致分母里的2没有被减够,所以要预处理减了多少个,而不是在for循环中减)
T3简单的填数
二元组(x,y)代表当前位置填x,且一共填了y个。
贪心策略:让每个元素尽量只出现2次
用up[i],dn[i]存储上述二元组,表示当前位置能控制的范围
up[i].y代表填这个数能向前取同样的数的最大长度,dn则反之。
把序列扫一边便可以求出a[n],之后再反着扫一边求出一组解即可。