2020CSP初赛试题答案解析

目录

1.CSP-J试题(C++A卷 )

2.CSP-J答案(C++A卷)

3.CSP-J试题(C++B卷 )

4.CSP-J答案(C++B卷)

5.CSP-S试题(C++A卷 )

 6.CSP-S答案(C++A卷)

7.CSP-S试题(C++B卷 )

8.CSP-S答案(C++B卷)

9.CSP-S解析


1.CSP-J试题(C++A卷 )

2.CSP-J答案(C++A卷)

3.CSP-J试题(C++B卷 )

 

 

4.CSP-J答案(C++B卷)

5.CSP-S试题(C++A卷 )

 

 

 6.CSP-S答案(C++A卷)

7.CSP-S试题(C++B卷 )

 

 

 

 

8.CSP-S答案(C++B卷)

9.CSP-S解析

a.选择题

不用多说了吧,最后一题上网查查克劳德·艾尔伍德·香农

b.阅读程序

T1

找出一大一小的数的按位或运算后的最大值。

n可以等于1000;当所有d[ i ]相等时ans=-1;当只枚举i后面的数时会少枚举在i之前的比i大的数,例如一个降序排列序列;不等于包含小于,答案不变。

或的最大值不可能大于127

两个偶数二进制下最低为为0,输出才能为偶数。

T2

用快排的思想找第k小的数。

x范围[L,R];while结束后当L!=R时 d[ a ]=d[ b ],L=R时d[ a ]!=d[ b ]但是d[ b ]一定没有问题;

平均时间复杂度的计算,不是很懂。

最好情况,a-L==k时就退出,O(n);最坏情况下第一层执行n次,第二层执行n-1次,....O(n^2)。

T(n)=n+\sum_{x=1}^{n}\frac{T(x)+T(n-x)}{2}

T3

给你两个字符串st0、st1和k ,有如下操作:

1.将st0的0~m位的字符整体右移一位,超出的一分放到左边;

2.将st0的m~len-1位的字符整体左移一位,超出的一个移到右边;

问从st0变成st1的最少步数。

原程序用双向bfs实现。

最坏时间复杂度为O(  ( N! )^2  )

两个倒序的字符串无论如何通过上述操作都不能互相转化。

68手动模拟一下即可。

c.完善程序

T1

贪心。

注意int不能直接整除,要交叉相乘后比较。

当curV+v[i]>B时,v[ i ]这个物品只能被分成B-curV个单位体积。

此时a=\frac{B-curV}{v[i]}               ans=curW+a*w[i]=curW+\frac{(B-curV)*w[i]}{v[i]}=\frac{curW*v[i]+(B-curV)*w[i]}{v[i]}

T2

经典的平衡规划

x^=x&(x^(x-1))就是lowbit,手动模拟一下可以发现。

x为a的高8为,x=a>>8

设f[ x ][ y ]表示当前新加入的数高8位为x,以之前某一个后8位为y的数为序列结尾的最大价值。

先转移,v =max  {  f[ x ][ z ] +w( y^z ) },初值当然为0。

更新时用 v+(  w( x^z )<<8  ) 去更新 f[ z ][ y ]即可。

 

详解网址:https://live.polyv.cn/watch/1946668

  • 61
    点赞
  • 372
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值