SRM 438

来源:互联网 发布:编程学习 编辑:程序博客网 时间:2024/04/29 13:27

这轮的三道题目比较有水准,充分反映了Tc的前沿水平。

 

D1 250p UnluckyIntervals

 

首先计算得到以下公式:

 

UnluckyNumber = ( K - LuckySet[left] ) * ( luckySet[right] - K ) - 1

 

然后建立pair < long long, int > 代表UnluckyNumber 和K。

 

由于题目要求只需要N个(N=100),因此对每个间隔枚举100个,排序,前N个就是解。

 

 

 

 D1 500p EndlessStringMachine

 

很好的一道分形题,在2区中酿成了32sub/0ac的灭团惨案。

 

首先要确定,当s超过一定数量时,后面的迭代没有任何意义:因为他们远远超出了max和min的值。不确定这点,此题根本无法完成……

 

由于max和min之间只有100个字符,可以考虑逐个求解。

 

分形题的关键是如何划分层次,从而从最外层确定到最内层。

 

如$xy$z,$=ab,s=3的例子

 

最终字符串为 

abxyabzxyabxyabzz

 

如何确定8位的y?(以开头a为0位)

 

我们可以在$前后分层 abxyabz | xy | abxyabz | z 。这是最外的第三层分割方案。abxyabz的长度可以预先算出F(2)=7,8 = 7 - 1 +2,因此落在$xy$z的2位。

 

假如是确定10位的b,同样观察abxyabz | xy | abxyabz | z。

 

最外层的第二个$从9位到15位,10 - 7 - 2 = 1因此进入下层递归函数,求abxyabz的1位。

 

 

 

 

 

 

 

原创粉丝点击