CSP-J 初赛模拟卷一

CSP-J 第一轮精品原创定心卷(一)

(考试时间:120分钟)

一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项)

  1. 下面哪种语言为弱类型语言? ( )
    A.Java
    B.C
    C.C++
    D.JavaScript

  2. 1979 年 8 月 1 日是星期三,请问在 2030 年的 8 月 1 日是星期几?( )
    A.星期一
    B.星期二
    C.星期三
    D.星期四

  3. ENIAC 作为世界上第一台通用计算机,诞生于( )年?
    A.1945
    B.1946
    C.1949
    D.1952

  4. 八进制数 73.6 对应的二进制数是( )
    A.111101.11
    B.111011.11
    C.110111.11
    D.110111.01

  5. 有 N 个点的强连通图最少要几条有向边( )
    A.N-1
    B.N
    C.n+1
    D.N(N ? 1)

  6. 已知前序遍历 ACDEFGB,中序遍历为 DFECABG,后序遍历为( )
    A.FEDCBGA
    B.DFECBGA
    C.FEDBGCA
    D.FEDBCGA

  7. 以下哪个设备为输入设备( )
    A.扫描仪
    B.打印机
    C.投影仪
    D.显示器

  8. 树根高度设为 1,100 个结点的树最大的高度和最小的高度的差是多少( )
    A.50
    B.92
    C.93
    D.99

  9. 考虑一个有 n 个元素的排列,若一个排列中所有的元素都不在自己原来的位
    置上,那么这样 的排列就称为原排列的一个错排 。求 5 个元素的错排数( )
    A.41
    B.42
    C.43
    D.44

  10. 先有字符串 s=“abababbaa”,有多少不同的子串( )
    A.29
    B.30
    C.31
    D.32

  11. 关于网络技术的说法,错误的是( )
    A.LAN 是局域网,学校机房里用的是 LAN。
    B.无线网络中数据通信不需要介质。
    C.网络协议是实现不同网络之间正确通信的基础
    D.移动终端之间不仅仅只能通过移动通信网络进行通信。

  12. 有 1 个队列,队首到队尾的元素依次为 8 ,3 ,2 ,9 ,5。约定: T 操作是指队列中 1 个元素 出队后再入队, Q 操作是指队列中 1 个元素出队。则经过 TTTQTTQ 系列操作后,队列中队 首到队尾的元素依次为( )
    A.2 ,9 ,5
    B.2 ,5 ,8
    C.5 ,8 ,2
    D.8 ,3 ,2

  13. 定义如下函数:

1 int rf(n) {
2   if (n<3) return;
3   return rf(n-1)+rf(n-3);
4 }

执行语句 v=rf(5),函数 rf 被调用的次数是()
          A.11
          B.5
          C.7
          D.15

  1. 下列关于信息编码的说法,正确的是( )
    A.十进制数 36 转换为二进制数后,该二进制数中 1 的个数为 4
    B.二进制整数最右边增加 1 位后,奇偶性不会发生变化
    C.某字符的 ASCII 码十六进制表示为 74,在计算机中存储为二进制编码 01110100
    D.扫描文字稿生成只有黑、白两种颜色的图像,每个像素至少用两位二进制数编码
    15.将帧频为 10fps,时长为 12 秒,总数为 120 的 Fash 动画作品导出为未经压缩的无声 AVI 视频文件,其参数为 1024*768 像素、24 位真彩色,则该视频文件的存储容量约为( )
    A.270MB
    B.216MB
    C.31.64GB
    D.2.1GB

二、阅读程序(程序输入不超过数组或字符串定义的 范围;判断题正确填 T ,错误填 F ;除特殊说明外,判断题 2.5 分,选择题 3 分,共计 40 分)

#include<bits/stdc++.h>
using namespace std;
int ans=0;

int f(int n) {
	int a = 1,b = 2,c = 3,x = 1;
	for(int i = 1; i <= n; ++i) {
		x = a ^ b ^ x;
		a = -~a;
		b = ~-b + 2;
		c = -(c ^ -1) + 1;
	}
	return ((x ^ c) >> 1) + (x & c);
}
int main() {
	int n,ans=(10101 >> 2) & 1;
	cin>>n;
	for(int i = 1; i <= n; ++i) {
		ans = ans + f(i);
		cout<<ans;
		return 0;
}

判断题
(1)程序的复杂度为 n2。( )
(2)该程序输入为 0 时,输出为 0 。( )
(3)把函数中 b = 2 改成 b = 1 时,答案不会发生变化。( )
(4)c 的值是奇数。( )
(5)当 n 是奇数时,答案是偶数( )

单项选择题
(6)当输入为 6 时,输出为( )。
          A.21
          B.43
          C.55
          D.61

#include<bits/stdc++.h>
using namespace std;
int n,m,a[1010][1010],Map[1010][1010],sum,vis[1010][1010];
int dx[]= {1,-1,0,0,1,1,-1,-1};
int dy[]= {0,0,1,-1,-1,1,-1,1};
int anss=0;
void dfs(int x,int y) {
	anss++;
	vis[x][y]=1;
	for(int i=0; i<=7; i++) {
		int tx=x+dx[i],ty=y+dy[i];
		if(Map[tx][ty]==0&&vis[tx][ty]==0&&tx>0&&tx<=n&&ty>0&&ty<=m)dfs(tx,ty);
	}
}
void paint(int x,int y) {
	Map[x][y]=9;
	for(int i=0; i<=7; i++)if(Map[x+dx[i]][y+dy[i]]!=9)Map[x+dx[i]][y+dy[i]]++;
}
bool check(int x,int y) {
	for(int i=0; i<=7; i++)if(Map[x+dx[i]][y+dy[i]]==0)return false;
	return true;
}
void solve() {
	anss=0;
	scanf("%d%d",&n,&m);
	for(int i=0; i<=m+1; i++)Map[0][i]=Map[n+1][i]=1;
	for(int i=0; i<=n+1; i++)Map[i][0]=Map[i][m+1]=1;
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++) {
			scanf("%d",&a[i][j]);
			if(a[i][j]==1)
				paint(i,j);
		}
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++)
			if(Map[i][j]==0&&vis[i][j]==0) {
				sum++;
				dfs(i,j);
			} else {
				if(Map[i][j]!=9&&check(i,j))
					anss++,sum++;
			}
	printf("%d\n",sum+anss);
}
int main() {
	int T;
	cin>>T;
	while(T--) {
		solve();
	}
}

判断题
(1)anss=n*m 一直成立。( )
(2)T 大于 1 时,2 组同样的数据结果可能一样。( )
单项选择题
(3)输入为以下内容时,输出结果为( )
1
5 5
1 0 0 0 1
0 0 0 1 0
0 0 0 0 1
0 0 0 0 0
1 0 0 0 1
         A.10
         B.13
         C.15
         D.17

(4)输入为以下内容时,输出结果为()
1
9 9
0 0 0 1 1 0 0 0 0
1 0 0 1 0 0 0 1 1
1 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
1 1 1 0 0 0 1 0 1
         A.43
         B.47
         C.49
         D.51

判断题
(1)输入为 30000 时,代码运行时间不会超过 1s 。( )
(2)去除 if(n==1) return 0;行,会影响输出的结果。( )
(3)将 fc[prime[j]*i]=prime[j];改成 fc[prime[j]*i]+=prime[j];后,phi 数组是单调增的,但是 fc 数组不是。( )
单项选择题
(4)输入为 10 时,输出为( )
         A. 40
         B. 56
         C. 60
         D. 64
(5)在执行完 ans(100) 后,fc[1],fc[2],fc[3]…fc[100] 中有( )个等于 2。
         A. 5
         B. 15
         C. 25
         D. 50

三、完善程序 (单项选择题,每小题 3 分,共计 30 分)

在一个数轴上有 n 条线段,现要选取其中 k 条线段使得这 k 条线段两两没有重合部分,问最大的 k 为多少。

#include<bits/stdc++.h>
using namespace std;
struct q {
	int l,r;
} game[1000005];
bool cmp(q a,q b) {
	if(a.r!=b.r);;
}
int f[1000005];
int i,n,temp;
int main() {
	scanf("%d",&n);
	for(i=1; i<=n; i++)
		scanf("%d%d",&game[i].l,&game[i].r);
	sort(game+1,game+1+n,cmp);
	for(i=1; i<=n; i++) {
		while()
			temp=;
		f[i]=;
	}
	printf("%d\n",f[n]);
	return 0;
}

1.①处应填 ( )
         A. return a.r<b.r;
         B. return a.r<b.l;
         C. return a.l<b.r;
         D. return 0;

2.②处应填 ( )
         A. return a.l<b.l;
         B. return a.r<b.r;
         C. return a.r<b.l;
         D. return a.l<b.r;

3.③处应填 ( )
         A. game[temp+1].r<=game[i].l
         B. game[temp+1].r<=game[i].r
         C. game[temp].r<=game[i].l
         D. game[temp].r<=game[i].r

4.④处应填 ( )
         A. ~-temp
         B. temp++
         C. ++temp
         D. temp<<1

5.⑤处应填 ( )
         A. min(f[i-1],f[temp]);
         B. min(f[i-1],f[temp]+1);
         C. max(f[i-1],f[temp]);
         D. max(f[i-1],f[temp]+1);

  1. (次短路)给定一张有权图,如何求某两点之间的倒数第二短的路径?
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000007
struct edge {
	int x,y,w;
} dd[maxn];
struct hh {
	int nex,to,dis;
} t[maxn];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q1;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q2;
int n,m,cnt=0,ans,mi;
int vis[maxn],d1[maxn],d2[maxn],head[maxn];
inline int read() {
	char kr=0;
	char ls;
	for(; ls> '9' ||ls< '0'; kr=ls,ls=getchar());
	int xs=0;
	for(; ls>= '0'&&ls<= '9'; ls=getchar()) {
		xs=xs*10+ls-48;
	}
	if(kr== '-') xs=0-xs;
	return xs;
}
inline void add(int nex,int to,int w) {;
	t[cnt].to=to;
	t[cnt].dis=w;
	head[nex]=cnt;
}
inline void dijkstra_first(int ww) {
	memset(d1,0x3f3f3f3f,sizeof(d1));
	memset(vis,0,sizeof(vis));
	q1.push(make_pair(0,ww));
	d1[ww]=0;
	while(!q1.empty()) {
		int u=q1.top().second;
		q1.pop();
		if(vis[u]) continue;
		vis[u]=1;
		for(int v=head[u]; v; v=t[v].nex) {
			if(d1[t[v].to]>d1[u]+t[v].dis&&!vis[t[v].to]) {
				d1[t[v].to]=d1[u]+t[v].dis;
				q1.push(make_pair(d1[t[v].to],t[v].to));
			}
		}
	}
}
inline void dijkstra_second(int ww) {
	memset(d2,0x3f3f3f3f,sizeof(d2));
	memset(vis,0,sizeof(vis));
	q2.push(make_pair(0,ww));
	d2[ww]=0;
	while(!q2.empty()) {
		int u=q2.top().second;
		q2.pop();
		if(vis[u]) continue;
		vis[u]=1;
		for(int v=head[u]; v; v=t[v].nex) {
			if(d2[t[v].to]>d2[u]+t[v].dis&&!vis[t[v].to]) {
				d2[t[v].to]=d2[u]+t[v].dis;
				q2.push(make_pair(d2[t[v].to],t[v].to));
			}
		}
	}
}
void init() {
	n=read();
	m=read();
	ans=999999;
	mi=999999;
	for(int i=1; i<=m; ++i) {
		dd[i].x=read();
		dd[i].y=read();
		dd[i].w=read();
		add(dd[i].x,dd[i].y,dd[i].w);;
	}
}
void solve() {
	dijkstra_first(1);
	dijkstra_second(n);
	int minn=d1[n];
	for(int i=1; i<=m; i++) {
		int x=dd[i].x,y=dd[i].y;
		if(d1[x]+d2[y]>d1[y]+d2[x]) swap(x,y);
		int s=d1[x]+d2[y];
		if(s+dd[i].w==minn) continue;
		ans=min(ans,s+dd[i].w);
	}
	for(int i=1; i<=m; i++) {
		int x=dd[i].x,y=dd[i].y;
		if() swap(x,y);
		if() continue;
		mi=min(mi,dd[i].w);
	}
	ans=;
}
void print() {
	printf("%d\n",ans);
	return;
}
int main() {
	init();
	solve();
	print();
	return 0;
}

1.①处应填 ( )
         A. t[++cnt].nex=head[nex];
         B. t[1+cnt].nex=head[nex];
         C. t[++cnt].nex=head[++nex];
         D. t[++cnt].nex=head[1+nex];
2.②处应填 ( )
         A. add(dd[i].x,dd[i].y,-dd[i].w);
         B. add(dd[i].y,dd[i].x,-dd[i].w);
         C. add(dd[i].x,dd[i].y,dd[i].w);
         D. add(dd[i].y,dd[i].x,dd[i].w);
3.③处应填 ( )
         A. d1[y]+d2[x]>d1[x]+d2[y]
         B. d1[x]+d2[y]>d1[y]+d2[x]
         C. d1[x]+d2[y]<d1[y]+d2[x]
         D. d1[y]+d2[x]<d1[x]+d2[y]
4.④处应填 ( )
         A. d1[y]+d2[x]+dd[i].w != minn
         B. d1[x]+d2[y]+dd[i].w != minn
         C. d1[y]+d2[x]+dd[i].w == minn
         D. d1[x]+d2[y]+dd[i].w == minn
5.⑤处应填 ( )
         A. min(ans,minn)
         B. min(ans,minn+mi)
         C. min(ans,minn+mi * 2)
         D. max(ans,minn)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值