【LGR-(-15) 】SCP 2022 第一轮(初赛 J 组)模拟 题解

前言

模拟赛链接
部分题目没写解析,开学了,在肝作业,咕一下。

正文

单选

1

在这里插入图片描述
选C,考察进制转换。

2

在这里插入图片描述
选D。∨是或,∧是与,﹁是非。

3

在这里插入图片描述
选A。首先排除C、D。然后128MB的栈空间很大,不会发生爆栈。但这个数据量不写记忆化是肯定会TLE的。

4

在这里插入图片描述
选B。首先先把树画出来,然后后缀表达式的顺序是左右根。
在这里插入图片描述

5

在这里插入图片描述
选A。 4 × 60 × 10 × 2048 × 152 × 32 8 × 1024 × 1024 × 1024 \frac{4\times60\times10\times2048\times152\times32}{8\times1024\times1024\times1024} 8×1024×1024×10244×60×10×2048×152×32,算出来约等于21。

6

在这里插入图片描述
选C,左右根。

7

在这里插入图片描述
选B。相当于是这五个点最多连成的10条线中选1~10根,把算出来的加起来,也就是 C 10 1 + C 10 2 + . . . + C 10 10 C^{1}_{10}+C^{2}_{10}+...+C^{10}_{10} C101+C102+...+C1010,结果为1024。

8

在这里插入图片描述
选D,栈是先进后出,模拟一下即可。

9

在这里插入图片描述
选B。第一枚为1的有6+5+4+3+2+1=21种结果,以此类推,一共21+15+10+6+3+1=56种结果。

10

在这里插入图片描述
选D。基础知识。

11

在这里插入图片描述
选A。插入O( N 2 N^{2} N2),希尔O( N 1.3 N^{1.3} N1.3),归并和快排O( N l o g N NlogN NlogN)。

12

在这里插入图片描述
选B。选择排序一下。

13

在这里插入图片描述
选C。

14

在这里插入图片描述
选D。strlen要整成char才可以用。

15

在这里插入图片描述
选B。非常幸运,我前几天才看了一个视频叫“CCF走过60年之NOI”,2022-60=1962。好耶!

阅读

1 #include <iostream>
2 using namespace std;
3 const int MAXN = 1000050;
4 int n, a[MAXN], a1[MAXN], b[MAXN], lim;
5 void solve1() {
6 	for (int i = 1; i <= n; i++)
7 		b[a[i]]++; //①
8 	for (int i = 1; i <= lim; i++) {
9 		if (b[i]) //②
10 			cout << i << " ";
11 	}
12 	cout << endl;
13 }
14 void solve2() {
15 	int cnt = 0, flag;
16 	for (int i = 1; i <= n; i++) {
17 		flag = false;
18 	for (int j = 1; j <= n - 1; j++) {
19 		if (a[j] > a[j + 1]) {
20 			swap(a[j], a[j + 1]);
21 			cnt++;
22 			flag = true;
23 		}
24 	}
25 	//if (flag==false)
26 	// break;
27 }
28 	for (int i = 1; i <= n; i++)
29 		cout << a[i] << " ";
30 	cout << endl;
31 }
32 int main() {
33 	cin >> n;
34 	for (int i = 1; i <= n; i++) {
35 		cin >> a[i];
36 		a1[i] = a[i]; //③
37 		lim = max(a[i], lim); //④
38 	}
39 	solve1();
40 	for (int i = 1; i <= n; i++)
41 	a[i] = a1[i];
42 	solve2();
43 	return 0;
44 }

1)
在这里插入图片描述
F,应该是冒泡排序。
2)
在这里插入图片描述
T,没毛病。
3)
在这里插入图片描述
F,应该是7。
4)
在这里插入图片描述
T,剪了个枝,只要以及排好序就不运行了,加不加都是排好序的结果。
5)
在这里插入图片描述
选C,solve1对于相同的数只会输出1次,但solve2会把所以数都输出。C中有相同的数,所以结果不同。

6)
在这里插入图片描述
选B,加个循环,有几个输出几个,就一样了。

1 #include <cstdio>
2 #include <cstring>
3 
4 const int maxn = 1003;
5 
6 int type, n, m;
7 char s[maxn], t[maxn];
8 
9 int main() {
10 	scanf("%d %s %s", &type, t, s);
11 	n = strlen(s); m = strlen(t);
12 	if (type < 2) {
13 		for (int i = 0; i < m; ++i) s[i] = t[i];
14 	} else if (type == 2) {
15 		strcpy(s, t);
16 		// 提示:如果此时调用 printf("%s\n", s),则本次输出结果为整个 t 字符串和换行,没有其他字符。
17 	} else {
18 		for (int i = 0; i < m; i += 4) {
19 			unsigned int code = 0, pos = i;
20 			for (int j = 1; pos < i+4; j*=100, ++pos) {
21 				if (pos == m) break;
22 				code += t[pos] * j;
23 			}
24 			pos = i;
25 			while (code != 0) {
26 				s[pos++] = code % 100;
27 				code /= 100;
28 			}
29		}
30 	}
31 	for (int i = 0; i < n; ++i) printf("%c", s[i]);
32 	printf("\n");
33 }

在这里插入图片描述

1)
在这里插入图片描述
选F,第12行的<显然不能改。

2)
在这里插入图片描述
选T,手动模拟。

3)
在这里插入图片描述
选F,同样模拟一下即可。

4)
在这里插入图片描述
选T,code上来就对于0说明t[pos]都是0,所以没影响。

5)
在这里插入图片描述

选B。if里是O( M 2 M^{2} M2),输出是O( N N N),不知道哪一个大,所以就相加起来。

6)
在这里插入图片描述
选C,1是直接替换,3要%100。其中只有C选项的 e e eASCII超过了100。

答案:在这里插入图片描述
暂时咕咕咕一下,懒(

完善

1

裸的01背包。

1)
在这里插入图片描述
选B,m记录背包最大容量。

2)
在这里插入图片描述
选C,0元可以。

3)
在这里插入图片描述
选D,01背包所以倒着循环,就是个背包模板。

4)
在这里插入图片描述
选C,只要自己目前有可能或选了a[i]有可能,就是可以支付。
5)
在这里插入图片描述
选B,有的话就++。

2

在这里插入图片描述
选A。
在这里插入图片描述
选C,观察后面可以看出从0到n-1。

在这里插入图片描述
选D。
在这里插入图片描述
选B。感谢提醒。
在这里插入图片描述
选C,a[j]不是加的话就是减,else里显然是给sum减去a[j]。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值