飞道的博客

2020CSP初赛试题答案解析

812人阅读  评论(0)

目录

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)。

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个单位体积。

此时               

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


转载:https://blog.csdn.net/zsjzliziyang/article/details/109060410
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场