Codeforces #470

B组只做了T2、T3、T4和T5。

T2:倒退一下即可,先把x2分解质因数,然后枚举可能的x1(x2-p+1~x2),然后再到推出x0即可。

T3:二分一下每一堆雪会在第几天完全融化。设第i堆雪会在第j天完全融化,那么这堆雪对第i~j-1天的贡献就是他们的t,对第j天的贡献就是减掉这几天以后剩余的量,那么我们可以用一颗线段树还维护一下每一天被贡献了多少次,最后答案就是t乘被贡献次数加剩余量的贡献。实际上用差分做更加简单。

T4:裸的trie。

T5:首先推几个性质:

1、B->AC->AAB->AAAC->C

     C->AB->AAC->AAAB->B(这说明B与C是等价的、下面只讨论B)

2、B->AC->AB->BCB->BBB(这说明一个B可以多变出两个B)

3、A->BC->BB(这说明一个A可以变成两个B)

4、AB->AAC->AAB->AAAC->AAAB->B(这说明无论B前有多少个A,他们都可以被消掉)

由上述结论我们可以知道在B前的A对结果是没有影响的,我们只需考虑后缀的A。

而后缀的A不能变多,只能三个三个地消掉,所以SA要大于等于TA。

接着,前面的B只能增多不能减少,而且只能两个两个地增加,包括A也只能变成两个B。所以要有SB<=TB且(TB-SB)%2=0。

然后,我们便可以开始分类讨论了。

首先SB<=TB&&(TB-SB)%2==0这是一定的条件。

然后,1、若SB==TB,那么后面的A就不能化成B了,只能三个三个地消,直至相等,也就是(SA-TA)%3==0.

2、若SB!=TB

  (1)若SB==0,则后面必有一个A要化成两个B,以便前面的B继续分裂,那么就要求SA>TA。

  (2)若SB>0,则表示前面的B有自我分裂能力,那么只需SA>=TA即可。


总结:这题的关键就是要发现上面的性质,然后后面的分类讨论就较简单了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值