青少年编程知识记录 codecoming

CSP-J2021年普及组复赛T3——网络连接

【题目描述】TCP/IP 协议是网络通信领域的一项重要协议。今天你的任务,就是尝试利用这个 协议,还原一个简化后的网络连接场景。在本问题中,计算机分为两大类:服务机(Server)和客户机(Client)。服务机 负责建立连接,客户机负责加入连接。需要进行网络连接的计算机共有 n 台,编号为 1 ∼ n ,这些机器将按编号递增的顺 序,依次发起一条建立连接或加入连接的操作。每台机器在尝试建立或加入连接时需要提供一个地址串。服务机提供的地址串表示 它尝试建立连接的地址,客户机提供的地址串表

标签: cspj2021

作者:亿万年的星光 分类:C++知识 浏览:

CSP-J2021年普及组复赛T4——小熊的果篮

【题目描述】    小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依 次用正整数 1、2、3、……、n 编号。连续排在一起的同一种水果称为一个“块”。小熊 要把这一排水果挑到若干个果篮里,具体方法是:每次都把每一个“块”中最左边的水 果同时挑出,组成一个果篮。重复这一操作,直至水果用完。注意,每次挑完一个果篮 后,“块”可能会发生变化。比如两个苹果“块”之间的唯一桔子被挑走后,两个苹果 “块”就变成了一个“块”。请帮小
作者:亿万年的星光 分类:C++知识 浏览:

CSP-J2021年普及组复赛T2——插入排序

【题目描述】

插入排序是一种非常常见且简单的排序算法。

小 Z 是一名大一的新生,今天 H 老 师刚刚在上课的时候讲了插入排序算法。 假设比较两个元素的时间为 O(1),则插入排序可以以 O(n 2 ) 的时间复杂度完成长 度为 n 的数组的排序。不妨假设这 n 个数字分别存储在 a1, a2, · · · , an 之中,则如下伪 代码给出了插入排序算法的一种最简单的实现方式: 

这下面是 C/C++ 的示范代码

for (int i = 1; i <= n; i++)  	for (int j = i; j>=2; j‐‐)  		if ( a[j] < a[j‐1] ) {  			int t = a[j‐1];  			a[j‐1] = a[j];  			a[j] = t;  		}

这下面是 Pascal 的示范代码

for i:=1 to n do  	for j:=i downto 2 do  	 if a[j]<a[j‐1] then   		begin   			t:=a[i];   			a[i]:=a[j];    			a[j]:=t;   		end;

为了帮助小 Z 更好的理解插入排序,小 Z 的老师 H 老师留下了这么一道家庭作业: 

H 老师给了一个长度为 n 的数组 a,数组下标从 1 开始,并且数组中的所有元素均 为非负整数。小 Z 需要支持在数组 a 上的 Q 次操作,操作共两种,参数分别如下: 

1 x v : 这是第一种操作,会将 a 的第 x 个元素,也就是 ax 的值,修改为 v。保证 1 ≤ x ≤ n, 1 ≤ v ≤ 109。注意这种操作会改变数组的元素, 修改得到的数组会被保留,也会影 响后续的操作。.

 2 x : 这是第二种操作,假设 H 老师按照上. 面. 的. 伪. 代. 码. 对 a 数组进行排序,你需要 告诉 H 老师原来 a 的第 x 个元素,也就是 ax,在排序后的新数组所处的位置。保证 1 ≤ x ≤ n。注意这种操作不会改变数组的元素,排序后的数组不会被保留,也不会影响后续的操作。

H 老师不喜欢过多的修改,所以他保证类型 1 的操作次数不超过 5000。 

小 Z 没有学过计算机竞赛,因此小 Z 并不会做这道题。他找到了你来帮助他解决 这个问题。

【输入格式】

从文件 sort.in 中读入数据。 

输入的第一行包含两个正整数 n, Q,表示数组长度和操作次数。保证 1 ≤ n ≤ 8, 000, 1 ≤ Q ≤ 2 × 105。 输入的第二行包含 n 个空格分隔的非负整数,其中第 i 个非负整数表示 ai。保证 1 ≤ ai ≤ 109。 接下来 Q 行,每行 2 ∼ 3 个正整数,表示一次操作,操作格式见题目描述。

【输出格式】

输出到文件 sort.out 中。 对于每一次类型为 2 的询问,输出一行一个正整数表示答案。

【样例1输入】

3 4  3 2 1  2 3  1 3 2  2 2  2

【样例1输出】

1  1  2

【样例1解释】

在修改操作之前,假设 H 老师进行了一次插入排序,则原序列的三个元素在排序 结束后所处的位置分别是 3, 2, 1。

在修改操作之前,假设 H 老师进行了一次插入排序,则原序列的三个元素在排序 结束后所处的位置分别是 3, 1, 2。 注意虽然此时 a2 = a3,但是我们不能将其视为相同的元素。

【数据范围】

对于所有测试数据,满足 1 ≤ n ≤ 8, 000, 1 ≤ Q ≤ 2×105, 1 ≤ x ≤ n, 1 ≤ v, ai ≤ 109。 

对于所有测试数据,保证在所有 Q 次操作中,至多有 5000 次操作属于类型一。 各测试点的附加限制及分值如下表所示。



作者:亿万年的星光 分类:C++知识 浏览:

CSP-J2021年普及组复赛T1——分糖果

【题目背景】

红太阳幼儿园的小朋友们开始分糖果啦!

【题目描述】

红太阳幼儿园有 n 个小朋友,你是其中之一。保证 n ≥ 2。 

有一天你在幼儿园的后花园里发现无穷多颗糖果,你打算拿一些糖果回去分给幼儿 园的小朋友们。 

由于你只是个平平无奇的幼儿园小朋友,所以你的体力有限,至多只能拿 R 块糖 回去。 

但是拿的太少不够分的,所以你至少要拿 L 块糖回去。保证 n ≤ L ≤ R。 

也就是说,如果你拿了 k 块糖,那么你需要保证 L ≤ k ≤ R。 

如果你拿了 k 块糖,你将把这 k 块糖放到篮子里,并要求大家按照如下方案分糖 果:只要篮子里有不. 少. 于. n 块糖果,幼儿园的所有 n 个小朋友(包括你自己)都从篮子 中拿走恰. 好. 一块糖,直到篮子里的糖数量少. 于. n 块。此时篮子里剩余的糖果均归你所有 ——这些糖果是作. 为. 你. 搬. 糖. 果. 的. 奖. 励. 。 

作为幼儿园高质量小朋友,你希望让作. 为. 你. 搬. 糖. 果. 的. 奖. 励. 的糖果数量(而. 不. 是. 你. 最. 后. 获. 得. 的. 总. 糖. 果. 数. 量!. )尽可能多;因此你需要写一个程序,依次输入 n, L, R,并输出 出你最多能获得多少作. 为. 你. 搬. 糖. 果. 的. 奖. 励. 的糖果数量。

【输入格式】

从文件 candy.in 中读入数据。 

输入一行,包含三个正整数 n, L, R,分别表示小朋友的个数、糖果数量的下界和上 界。

【输出格式】



输出到文件 candy.out 中。 

输出一行一个整数,表示你最多能获得的作. 为. 你. 搬. 糖. 果. 的. 奖. 励. 的糖果数量。

【样例1输入】

7 16 23

【样例1输出】

6

【样例1解释】

拿 k = 20 块糖放入篮子里。 

篮子里现在糖果数 20 ≥ n = 7,因此所有小朋友获得一块糖;

篮子里现在糖果数变成 13 ≥ n = 7,因此所有小朋友获得一块糖; 

篮子里现在糖果数变成 6 < n = 7,因此这 6 块糖是作. 为. 你. 搬. 糖. 果. 的. 奖. 励. 。 

容易发现,你获得的作. 为. 你. 搬. 糖. 果. 的. 奖. 励. 的糖果数量不可能超过 6 块(不然,篮子 里的糖果数量最后仍然不少于 n,需要继续每个小朋友拿一块),因此答案是 6。

【样例2输入】

10 14 18

【样例2输出】

8

【样例2解释】

容易发现,当你拿的糖数量 k 满足 14 = L ≤ k ≤ R = 18 时,所有小朋友获得一块 糖后,剩下的 k − 10 块糖总是作. 为. 你. 搬. 糖. 果. 的. 奖. 励. 的糖果数量,因此拿 k = 18 块是最 优解,答案是 8。

【数据范围】

测试点n<=R<=R-L<=
1255
251010
3103103103
4105105105
51031090
6103109103
7105109105
8109109109
9

109109109
10109109109

对于所有数据,保证 2 ≤ n ≤ L ≤ R ≤ 109。

作者:亿万年的星光 分类:复赛 浏览:

【C++图形化编程】flappy bird(2)—游戏逻辑与完善

0.前言    上一篇中,我们简单完成了flappy的图像导入和基本架构。这一篇文章中,我们继续完善。1.游戏逻辑这个游戏的简单逻辑就是:(1)初始状态(游戏一开始),小鸟就一直往下落,如果落地,则游戏结束            意为:小鸟的坐标会一直变化(往下),如果坐标到游戏边框的底部(高度),则游戏结束  (2) 
作者:亿万年的星光 分类:趣味小程序 浏览:

【C++图形化编程】小游戏——打砖块(1)

0.前言这篇文章我们尝试创建一个打砖块的小游戏。1.游戏框架根据我们前面做的一些游戏的框架,这个小游戏的框架也可以分为下面这样的框架。int main() { startup();  // 数据初始化 while (1)  //  游戏循环执行 { clean();  // 把之前绘制的内容取消 updateWithoutInput(); 
作者:亿万年的星光 分类:C++知识 浏览:

【C++图形化编程】flappy bird(1)—基础框架及图形图像

0.前言    前面一篇文章,我们简单介绍了鼠标的一些操作, 这篇文章,我们还是一个实战教程,flappy bird的小游戏。1.导入背景和音乐    一个小游戏,一般会有正常的背景和音乐,这个小游戏也是,所以我们先下载这个小游戏需要的背景和音乐。下载链接:https://box356.lanzoui.com/iTibzw7bgvc下载解压后就可以看到下面的内容,这就是我们要用的图片素材。有两个声音文件,其余都是图像文件。首先说一下,如

【C++图形化编程】鼠标函数及鼠标画板

0.前言这篇文章简单介绍一下利用鼠标画图的程序#include<graphics.h> #include<conio.h> int main(){ initgraph(640,480); MOUSEMSG m;  //定义鼠标消息 while(1){ //获取一条消息 m=GetMouseMsg(); if(m.uMsg==WM_MOUSEMOVE){ putpixel(m.x,m.y,WH
作者:亿万年的星光 分类:C++知识 浏览:

C++小项目——实时钟表

0.前言在很多游戏中,我们要使用时间,这个时间一个是系统当前的时间,一个是服务器给你的时间。这篇文章我们尝试做一个模拟时钟。效果图如下1.任务分解1.首先我们尝试使用easyx来画一个。基本框架如下:#include<graphics.h> #include<conio.h> #define High 480  //画布高 #define Width 640  //画布宽度 i
作者:亿万年的星光 分类:C++知识 浏览: