全国提高组 CSP-S 初赛模拟试题 (7)
一、单项选择题 (共15题,每题2分,共计30分;每题有且仅有一个正确选项)
1) 请选出以卜的能够被3整除的数( )。




查看答案
2) 运行一个计算机程序,必须将程序装入( )。




查看答案
3) 入栈顺序为{1,9,4,3,6}的序列的出栈序列不可能为( )。




查看答案
4) 以下IP地址一定指向本机的是()。




查看答案
5) 对于某算法的时间复杂度,若有:T(N)= 4T(N/2)+N^2log^2N, N=1 则该算法的时间复杂度为()。




查看答案
6) 以下排序算法不是基于比较的是( )。




查看答案
7) 一位女主人宴请5位男士和4位女士,该女主人让所有男士和女士(包含该女主人)围一张圆桌男女交替就坐的方法( )种。




查看答案
8) 群是包含一种运算与一个集合的结构。群满足封闭性,即集合中的任意两个元素在该运算的作用下仍属于该集合,据此推断,集合N与以下运算不可能构成群的是( )。




查看答案
9) 一棵树高为4的线段树,全少有( )个节点。




查看答案
10) 以下行为在C++98标准下不是未定义的是( )。




查看答案
11) 左图的先序遍历是( )。




查看答案
12) 复杂度分析中常用的O(N)与Q(N)各自代表了( )。




查看答案
13) 由四个不同的点构成的简单无向连通图的个数是()。




查看答案
14) $4^{116}$除以113的余数是( )。




查看答案
15) 对于节点数为n的树,以下说法正确的是( )。




查看答案
二、阅读程序 (程序输入不超过数组或字符串定义的范围;除特殊说明外,判断题1.5分,选择题3分,共计40分)
# include <iostream>
using namespace std;

int fastpow(int a,int b,int p) {
int ans=1;
a=a%p;
for(int i=0; i<=31; i++) {
if(b&(1<<i)) ans=ans*a%p;
a=a*a%p;
}
return ans;
}
int main() {
int a,b,p;
cin>>a>>b>>p;
cout<<fastpow(a, b,p);
return 0;
}
16) 有必要将第7行和第8行的a*a两侧添加括号。( )

查看答案
17) 交换第7行与第8行,答案不会改变。( )

查看答案
18) 缩小b的范围一定不会影响代码的正确性。(指在a,p任意给出时答案仍然正确,下同,且最多缩小至10)。( )

查看答案
19) 缩小p的范围一定不会影响代码的正确性。( )

查看答案
20) 若输入的a为4,b为7,则输出不可能为( )。




查看答案
21) 以下说法正确的是( )。




查看答案
#include<iostream>
using namespace std;

int main() {
int n, x; cin >> n>>x;
int a=0, b=0,c=0, na, nb, nc, ans=0;
for(int i=1; i<=n; i++) {
int now;cin>>now;
na = max(a+now, 0);
nb = max(max(a+now*x, b+now*x), 0);
nc = max(max(c+now, b+now), 0);
a= na,b= nb,c=nc;
ans=max(max(ans,a), max(b,c));
}
cout <<ans;
}
22) 一共需要输入n+3个数字。( )

查看答案
23) 这是一种朴素的未使用任何优化的动态规划算法。( )

查看答案
24) a表示前个数的最大连续子序列和。( )

查看答案
25) 在给定的输入范围下,使用int有可能会得到错误答案。( )

查看答案
26) 以下说法可能是此算法对应的题目的是( )




查看答案
27) 以下输入数据得到的结果最大的是( )




查看答案
# include<bits/stdc++.h>

using namespace std;
typedef long long int_t;

int_t dis[1<<18][18];

struct E {
int_t to,w;
E(int_t to, int_t w):to(to),w(w) {}
};

vector<E> G[20];

int_t dfs(int_t rt, int_t vised, int_t n) {
if(rt ==n-1) return 0;
if(dis[vised][rt]) return dis[vised][rt];
dis[vised][rt]=998244353;
for(E e : G[rt]) {
int_t to=e.to, w= e.w;
if((1<<to) & vised) continue;
dis[vised][rt]=max(dis[vised][rt],dfs(to,vised|(1<<to),n)+w);
}
return dis[vised][rt];
}

int main() {
int_t n,m; cin>> n>> m;
while(m--) {
int_t u,v,w;cin>>u>>v>> w;
G[u].push_back(E(v,w));
}
cout<<dfs(0,1,n);
}
28) 此代码可以在noip标准F编译。( )

查看答案
29) 此代码能处理重边与自环。( )

查看答案
30) 此算法可以被dijkstra 替代。( )

查看答案
31) 以下说法错误的是( )




查看答案
32) 若以左侧数据为输入数据,则答案为( )




查看答案
33) 此代码的时间复杂度为( )




查看答案
三、完善程序 (单选题,每题3分,共计30分)
(贪心)你用过QQ吗?在QQ群里,管理员可以禁言用户。
在Boboniu的QQ群里,小D每天都开Boboniu的玩笑。
小D会在群里待n天,Boboniu的心情是m。在第i天,如果小D没被禁言,他会开一个严重程度为ai的玩笑;如果开的玩笑严重程度大于m,他就会被Boboniu禁言d天,也就是说,在第i+1,i+2,...,min(i+d,n)天,他都会被禁言。
你可以将序列a重排,求开的所有玩笑的严重程度之和的最大值。
[输入]
第一行是n,d,m,之后一行n个整数ai。
1 ≤d≤n≤=10^5,0≤m≤10^9 ,0≤a≤10^9。
提示:贪心。
试补全程序。
# include <bits/stdc++.h>
using namespace std;

const int MAXN= 1e5 + 5;

int big[MAXN], small[MAXN], sum[MAXN];
int p1=1,p2=1;
int n,m,k,x;

int main() {
cin>> n>> m>> k;
for(int i=1; i<=n; i++) {
cin>>x;
if(x <= k) {
___(1)___;
} else {
big[p2++]=x;
}
}
sort(small+1, small+1+ p1,greater<int>());
sort(big+ 1, big+1 + p2, greater<int>());
for(int i=1; i<=p1; i++) {
___(2)___;
}
int ans= sum[p1], cur = 0;
for(int i=1; i<= p2; i++) {
cur+= ___(3)___;
int days =___(4)___+1;
if(days>n) {
break;
}
int left = min(n-days, p1);
ans=max(ans,___(5)___);
}
cout<< ans<< endl;
return 0;
}
34) ⑴处应填( )




查看答案
35) ⑵处应填( )




查看答案
36) ⑶处应填( )




查看答案
37) ⑷处应填( )




查看答案
38) ⑸处应填( )




查看答案
(动态规划)小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3...进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在且仅存在条通路(通路指连接两个元件的导线序列)。

在电路板上存在一个特殊的元件称为“激发器”。当激发器工作后,产生一个激励电流,通过导线传向每一个它所连接的节点,而中间节点接收到激励电流后,得到信息,件将该激励电流传向与它连接并且尚未接收到激励电流的节点。最终激励电流将到达一些“终止节点”接收激励电流之后不再转发的节点。

激励电流在导线上的传播是需要花费时间的,对于每条边e,激励电流通过它需要的时间为te,而节点接收到激励电流后的转发可以认为是在瞬间完成的。现在这块电路板要求每一个“终止节点”同时得到激励电路--即保持时态同步。 由于当前的构造并不符合时态同步的要求,故需要改变连接线的构造。目前小Q有一个道具,使用一次该道具,可以使得激励电流通过某条连接导线的时间增加一个单位。请同小Q最少使用多少次道具才可使得所有的“终止节点”时态同步?
输入第一行包含一个正整数N( 1≤n≤5*10^5),表示电路板中节点的个数。
输入第二行包含一个整数S,为该电路板的激发器的编号。
接下来N-1行,每行三个整数a,b,t。表示该条导线连接节点a与节点b,且激励电流通过这条导线需要t(1≤t≤10^6)个单位时间。
提示:动态规划,代码中的read函数调用时会从输入读入一个整数, for(X a: B)会枚举类型X的变量集合B中的每个元素。
试补全程序。

#include<bits/stdc++.h>
using namespace std;

typedef long long int_t;

int read() {
int_t x=0,w=1; char ch=0;
while(!isdigit(ch)) {ch = getchar();if(ch =='-')w=-1;}
while(isdigit(ch)) x=___(1)___, ch=getchar();
return x;
}

struct E {
int_t to,w;
E(int_t to0, int_t w0) {to=to0; w=w0;}
};

int_t ans;
vector<E> G[501000];

int_t dfs(int_t rt, int_t fa) {
int_t ret=0,cnt=0;
for(E e: G[rt]) if(e.to != fa) {
int_t res = dfs(e.to, rt)+ e.w;
if (___(4)___) ans+=cnt*(res-ret),___(3)___,cnt++;
else ___(2)___, cnt++;
}
return ret;
}

int main() {
int_t n =read(), s = read();
for(int_t i=1; i<n; i++) {
int_t u = read(), v = read(), w = read();
G[u].emplace_back(v, w);
G[v].emplace_back(u, w);
}
___(5)___
cout << ans;
return 0 ;
}
39) ⑴处应填( )




查看答案
40) ⑵处应填( )




查看答案
41) ⑶处应填( )




查看答案
42) ⑷处应填( )




查看答案
43) ⑸处应填( )




查看答案
增值服务权益

1. 试题参考答案和解析查看;
2. 试卷模拟测试;
3. 随机组题测试;
4. 试卷PDF文件下载;
5. 赠送等值学豆;

  订阅  
学员服务
教研服务

小鹏STEM教研服务系统是面向教师的一站式教研、教学和知识管理系统。
订阅服务后,所有题目均可无限制查看和服务。

  详情