[NOIP模拟题][模拟][DP][乱搞]

T1

给定文本串A,模板串B,在A中从小到大找到B的每一个字符,输出最大字典序答案

刚看到这道题就想是不是KMP,然而这并不可以,然后我就一脸懵逼。敲完第二题回来才发现这是道傻逼题,倒叙扫描即可

T2

给定n*m 01串,奇数行0只能上下通过,且无价值,偶数行0的价值为连着一整块0的数量,求从第一行到最后一行最大价值

一眼DP无疑,f[i][j]表示i行j列最大价值,从上往下推即可。只是这里要加点优化,把偶数行连着的0预处理成一块,DP时将这一块整体DP

T3

给出N*M点阵,任意两点可以连成一条线段,询问长为W的线段数量

好神的一道题,一开始看20分可以暴力,但我怕出现精度误差,就不敢码,事后才发现完全可以不开根啊,直接算平方就行了。
下面是正解。首先横着和竖着的边是很好解决的,关键是怎么解决斜边。我们先从复杂度开始分析,10^3个询问,那么大概找斜边就是一个根号的复杂度
首先我们假设直角边a,b,b= sqrt(c2a2) =sqrt(c+a)(c-a),令d=gcd(c+a,c-a),再令A=(c-a)/d,B=(c+a)/d,那么A与B互质,由上式可知A*B是完全平方数,又因为互素,所以A与B均为完全平方数,令x*x=A,y*y=B,代入相加, x2 + y2 =2*c/d,d的范围为1-sqrt(2c),所以只需先枚举d,再每句x,即可算出解了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值