首页 > 编程语言 >历年CSP-J初赛真题解析 | 2019年CSP-J初赛完善程序(34-43)

历年CSP-J初赛真题解析 | 2019年CSP-J初赛完善程序(34-43)

时间:2024-11-10 17:49:42浏览次数:5  
标签:cnt 真题 int res 初赛 step ord 排序 CSP

学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。

附上汇总贴:历年CSP-J初赛真题解析 | 汇总_热爱编程的通信人的博客-CSDN博客


矩阵变幻

有一个奇幻的矩阵,在不停的变幻,其变幻方式为:数字0变成矩阵 [ 0 0 0 1 ] \begin{bmatrix} 0&0\\ 0&1\end{bmatrix} [00​01​],数字1变成矩阵 [ 1 1 1 0 ] \begin{bmatrix} 1&1\\ 1&0\end{bmatrix} [11​10​]

最初矩阵只有一个元素0,变幻n次后,矩阵会变成什么样?

例如,矩阵最初为[0];变幻1次后: [ 0 0 0 1 ] \begin{bmatrix} 0&0\\ 0&1\end{bmatrix} [00​01​];变幻2次后: [ 0 0 0 0 0 1 0 1 0 0 1 1 0 1 1 0 ] \begin{bmatrix} 0&0&0&0\\ 0&1&0&1\\ 0&0&1&1\\ 0&1&1&0\end{bmatrix} ​0000​0101​0011​0110​

输入一行一个不超过10个正整数n,输出变幻n次后的矩阵。试补全程序。

提示:"<<"表示二进制左移运算符,例如 ( 11 ) 2 < < 2 = ( 1100 ) 2 (11)_2<<2 = (1100)_2 (11)2​<<2=(1100)2​

#include <cstdio>
using namespace std;
int n;
const int max_size = 1 << 10;

int res[max_size][max_size];

void recursive(int x, int y, int n, int t) {
	if (n==0) {
		res[x][y] = __1__;
		return;
	}
	int step = 1 << (n-1);
	recursive(__2__, n-1, t);
	recursive(x, y+step, n-1, t);
	recursive(x+step, y, n-1, t);
	recursive(__3__; n-1, !t);
}

int main()
{
	scanf("%d", &n);
	recursive(0, 0, __4__);
	int size = __5__;
	for (int i=0; i<size; ++i) {
		for (int j=0; j<size; ++j)
			printf("%d", res[i][j]);
		put("");
	}
	return 0;
}

第34题

1处应该填( )。

A.n%2

B.0

C.t

D.1

【答案】:C

【解析】

填入res[x][y]的值,不可能全为0或全为1,只能为t

第35题

2处应该填( )。

A.x-step, y-step

B.x, y-step

C.x-step, y

D.x, y

【答案】:D

【解析】

左上角就是原来的坐标

第36题

3处应该填( )。

A.x-step, y-step

B.x+step, y+step

C.x-step, y

D.x, y-step

【答案】:B

【解析】

右下角左边,所以x+step,y+step

第37题

4处应该填( )。

A.n-1, n%2

B.n, 0

C.n, n%2

D.n-1, 0

【答案】:B

【解析】

可以带入n,0和n,1,观察结果发现n,0为正确答案

第38题

5处应该填( )。

A.1<<(n+1)

B.1<<n

C.n+1

D.1<<(n-1)

【答案】:B

【解析】

1的边长是2,2的边长是4,n的边长是 2 n 2^n 2n,即1<<n

计数排序

计数排序是一个广泛使用的排序方法。下面的程序使用双关键字计数排序,将n对10000以内的整数,从小到大排序。

例如有三对整数(3,4)、(2,4)、(3,3),那么排序之后应该是(2,4)、(3,3)、(3,4)。

输入第一行为n,接下来n行,第i行有两个数a[i]和b[],分别表示第i对正整数的第一关键字和第二关键字。

从小到大排序后输出。数据范围 1 ≤ n ≤ 1 0 7 , 1 ≤ a [ i ] , b [ i ] ≤ 1 0 4 1\le n\le 10^7, 1\le a[i],b[i]\le 10^4 1≤n≤107,1≤a[i],b[i]≤104

提示:应先对第二关键字排序, 再对第一关键字排序。数组ord[]存储第二关键字排序的结果, 数组res[]存储双关键字排序的结果。

#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 10000000;
const int maxs = 10000;

int n;
unsigned a[maxn], b[maxn], res[maxn], ord[maxn];
unsigned cnt[maxs+1];

int main()
{
	scanf("%d", &n);
	for (int i=0; i<n; ++i)
		scanf("%d%d", &a[i], &b[i]);
	memset(cnt, 0, sizeof(cnt));
	for (int i=0; i<n; ++i)
		__1__;  // 利用cnt数组统计数量
	for (int i=0; i<maxs; ++i)
		cnt[i+1] += cnt[i];
	for (int i=0; i<n; ++i)
		__2__;  // 记录初步排序结果
	memset(cnt, 0, sizeof(cnt));
	for (int i=0; i<n; ++i)
		__3__;  // 利用cnt数组统计数量
	for (int i=0; i<maxs; ++i)
		cnt[i+1] += cnt[i];
	for (int i=n-1; i>=0; --i)
		__4__;  // 记录最终排序结果
	for (int i=0; i<n; ++i)
		printf("%d %d\n", __5__);
	return 0;
}

第39题

1处应该填( )。

A.++cnt[i]

B.++cnt[b[i]]

C.++cnt[a[i] * max + b[i]]

D.++cnt[a[i]]

【答案】:B

【解析】

因为要先对第二关键字(b[i])排序,所以选B

第40题

2处应该填( )。

A.ord[–cnt[a[i]]] = i

B.ord[–cnt[b[i]]] = a[i]

C.ord[–cnt[a[i]]] = b[i]

D.ord[–cnt[b[i]]] = i

【答案】:D

【解析】

第20行是为了计算cnt[b[i]]的前缀和,即每个b[i]数字的排名,所以A、C错误

ord[x]记录第x名所对应的下标

第41题

3处应该填( )。

A.++cnt[b[i]]

B.++cnt[a[i] * maxs + b[i]]

C.++cnt[a[i]]

D.++cnt[i]

【答案】:C

【解析】

统计第1关键字,所以选C

第42题

4处应该填( )。

A.res[–cnt[a[ord[i]]]] = ord[i]

B.res[–cnt[b[ord[i]]]] = ord[i]

C.res[–cnt[b[i]]] = ord[i]

D.res[–cnt[a[i]]] = ord[i]

【答案】:A

【解析】

这题的排序思路:十位数相同的个位数大的先放,在对应的十位数区间从后向前放

第28行之前ord[]={21,31,11,32,122,22}

倒序查找ord[5]为22,a[22]为2,cnt[2]为4,先–cnt[2]得3,然后res[3]=ord[5]=22,即把22放到res数组中下标为3的位置。

依此类推,最后res[]={11,12,21,22,31,32}

第43题

5处应该填( )。

A.a[i], b[i]

B.a[res[i]], b[res[i]]

C.a[ord[res[i]]], b[ord[res[i]]]

D.a[res[ord[i]]], b[res[ord[i]]]

【答案】:B

【解析】

res[i]记录第i个数的在原序列的位置。且a、b数组内容必然成对输出,下标必须一致,也可以简单猜测选B

标签:cnt,真题,int,res,初赛,step,ord,排序,CSP
From: https://blog.csdn.net/guolianggsta/article/details/143475691

相关文章

  • CSP-2024游记
    考前把这个看一遍:考场策略应该是,10min解压+读题+建文件夹,先打暴力,别被一道题卡死(!!就比如去年的J组T1)别死磕,别死磕,别死磕尤其早上的J组只有3.5h,一定要注意时间分配。相信自己,心态不要炸,当成正常的模拟赛对待。如果非常慌可以选择深呼吸或者先打自己会的分。下考前5min反复......
  • 真题练习44-Word字处理-全国计算机等级考试一级计算机基础及MS Office应用考试【汪老
    第44组请根据题目要求,完成下列操作:在考生文件夹下,打开文档WORD.DOCX,按照要求完成下列操作并以该文件名(WORD.DOCX)保存文档。1.将标题段(“模型变量构建”)的文本效果设置为内置样式“渐变填充–灰色”,并修改其阴影效果为“透视/左上”、阴影颜色为蓝色(标准色);将标题段文字设置为......
  • 真题练习45-PowerPoint演示文稿-全国计算机等级考试一级计算机基础及MS Office应用考
    第45组1.新建演示文稿yswg.pptx,共4张幻灯片,每张幻灯片的页脚插入与其幻灯片编号相同的数字,例如第四张幻灯片,页脚内容为“4”。2.为整个演示文稿应用“丝状”主题,放映方式为“观众自行浏览(窗口)”。按各幻灯片页脚内容从大到小重排幻灯片的顺序。3.第一张幻灯片版式为“标题幻灯......
  • 2024 AH CSP-S 迷惑行为大赏
    洛谷专栏阅读:https://www.luogu.com.cn/article/0atx674s一、概述观前提示:本届CSP-S安徽省整活相较于其他省份不是那么“群英荟萃”,观看前请不要小零食(?)本届CSP-S安徽共有1013人参赛,其中有效准考证号源文件夹共有1006个,7人因为种种原因最终没有留下任何参赛痕迹,让我们为他们致哀......
  • Day13 备战CCF-CSP练习
    Day13题目描述题目分析大模拟,用栈储存每一个多项式,最后根据导数的加法原则依次求导相加,注意取模。C++代码#pragmaGCCoptimize(3,"Ofast","inline")#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=100010,MOD=1e9+7;string......
  • 蓝桥杯每日真题 - 第7天
    题目:(爬山)题目描述(X届C&C++B组X题)解题思路:前缀和构造:为了高效地计算子数组的和,我们可以先构造前缀和数组a,其中a[i]表示从第1个元素到第i个元素的和。这样,对于任意区间[i,j]的子数组和,可以通过a[j]-a[i-1]快速得到。枚举所有区间和:用双重循环枚举所有可......
  • 2024 CSP-J/S 游记
    前言暑假和开学后一直在考模拟赛,前前后后考了有四十多场,这应该比我以前三年考过的模拟赛数量加起来还多了,所以这个赛季还是希望能考好一点的(虽然模拟赛考的很烂)。印象最清晰的是一场S组模拟赛把CDQ分治加斜率优化dp放在了T1。很多大数据结构T4也是之前没有见过的码量(......
  • 2024CSP_S2游记
    markdown和Latex就不修了,太麻烦了,将就看吧从S1到S2今年NFLSHC初三10个复赛,于是还给了初一和六年级8个,去年初三只有4个,进步了由于去年J组320应该够了,所以今年没考J,不去浪费J组国一名额,攒功德2024.9.23上午做操排队时被人踩了,由于自带的脆皮属性导致骨折,悲剧,带伤集训+出战CSP-S......
  • 【软考】系统架构设计师-2015年下半年下午论文真题及答案
    全国计算机技术与软件专业技术资格(水平)考试高级系统架构设计师2015年下半年下午试卷 论文试题一 论应用服务器基础软件应用服务器是在当今基于互联网的企业级应用迅速发展,电子商务应用出现并快速膨胀的需求下产生的一种新技术。在分布式、多层结构及基于组件和......
  • 【软考】系统架构设计师-2016年下半年上午综合知识真题及答案
    全国计算机技术与软件专业技术资格(水平)考试高级系统架构设计师2016年下半年上午试卷 综合知识试题一 在嵌入式系统的存储部件中,存取速度最快的是( )。A.内存  B.寄存器组  C.Flash  D. Cache试题二 实时操作系统(RTOS)内核与应用程序之间的接口称......