目录
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