2016.08.11【初中部 NOIP提高组 一试】模拟赛B

17 篇文章 0 订阅
16 篇文章 0 订阅

第一次做B组的题目,果然难度不是一个级别的...


C组的题目是有可能可以考场做出,即使没做出,知道方法后也是较容易实现的...

而B组,以我现在的水平....不想说,对不起教我的人了....智商太低是不能一下子弥补的....


T1:给出一个数h,求出等式h=x*y+x+y中的x,y有多少种可能.

很明显

h=x*y+x+y

可以变成

    h=x*(y+1)+y

=  h=(x+1)*(y+1)-1

=  h+1=(x+1)*(y+1).


所以,我们只需分解h+1的质因数,通过等式

p=p1^q1*p2^q2*p3^q3....*pn^qn

(p1是第一个分解质因数的数,q1第一个分解质因数的数的个数)

可得p的因数个数为(q1+1)*(q2+1)*(q3+1)*....*(qn+1).


枚举质因数大概只需要1500个左右,如果最后枚举完质因数后还需要继续分解的话,则直接将答案*2即可(因为z[1500]*z[1500]已经大于10^9了)



T2:

一道区间DP的题目.


设f[i,j]表示区间i~j能压缩成的最短字符串,当有多个最短字符串时则只保存一个,d[i,j]则是存要多少个最短字符串.


我们把f[i,j]分成

f[i,k] f[k+1,j]两个状态.


则当f[i,k]=f[k+1,j]的时候,我们直接把f[i,j]赋值为其中的一个值,并把d[i,j]更新成d[i,k]+d[k+1,j]的和.


当不等的时候,我们则判断,把f[i,k]展开的最优值(的确有两种“展开”方式,一种是直接展,一种是用数字表示的展开)与f[k+1,j]展开的最优值相比,如果两者的最优值小于f[i,j]的最优值的话则更新f[i,j],并把d[i,j]赋值为1.


最后输出f[i,j]的最优展开方法即可.


(这道题细节很多,可能是我实现的没有技巧,导致很多细节地方出错,打了3000多b才A了..而别人0_0...)


T3:

对于输入的mi ai(1<=i<=n)

设上一次的值为mi-1,ai-1

我们总共需要进行n-1次“调整”,求出最后的答案.

我们需求出一个数mod mi=ai,

则也可表示为

mi-1*k+ai-1 mod mi=ai(这是因为我们必须在保证x 也能mod mi-1=ai-1)这个k是我们需要枚举的,很明显范围在cm(mi,mi-1)(cm表示公倍数)


超出和这个范围,则表示mod mi=ai是无解的.


然后cm(mi,mi-1)则可以更新为mi的值..

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值