信息学奥赛初赛天天练-53-CSP-J2019阅读程序2-模拟算法在数组中典型应用

PDF文档公众号回复关键字:20240802

在这里插入图片描述

2019 CSP-J 阅读程序2

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

假设输入的n和m都是正整数,x和y都是在[1, n]的范围内的整数,完成下面的判断题和选择题

01 #include<cstdio>
02 using namespace std;
03 int n, m;
04 int a[100], b[100];
05  
06 int main() {
07     scanf("%d%d", &n, &m);
08     for (int i = 1; i <= n; ++i)//对a和b数组的前n项置为0 
09         a[i] = b[i] = 0;
10     for (int i = 1; i <= m; ++i) {//录入m个x和y 
11         int x, y;
12         scanf("%d%d", &x, &y);
13         if (a[x] < y && b[y] < x) {//如果新录入x有相同的y比之前大,重新赋值,y也一样 
14             if (a[x] > 0)//x录入过相同的  
15                 b[a[x]] = 0;//对b数组对应a[x]对应值改为0,后续重新赋值 
16             if (b[y] > 0)//y录入过相同的  
17                 a[b[y]] = 0;//对a数组对应b[y]对应值改为0,后续重新赋值 
18             a[x] = y;//对x重新赋值 
19             b[y] = x;//对y重新赋值 
20         }
21     }
22     int ans = 0;//统计a和b数组为0的个数 
23     for (int i = 1; i <= n; ++i) {
24         if (a[i] == 0)
25             ++ans;
26         if (b[i] == 0)
27             ++ans;
28     }
29     printf("%d", ans);
30     return 0;
31 }

1 当m>0时,输出的值一定小于2n。( )

2 执行完第27行的"++ans"时,ans —定是偶数。( )

3 a[i]和b[i]不可能同时大于0。( )

4 右程序执行到第13行时,x总是小于y,那么第15行不会被执行。( )

5 若m个x两两不同,且m个y两两不同,则输出的值为( )

A 2n-2m

B 2n+2

C 2n-2

D 2n

6 若m个x两两不同,且m个y都相等,则输出的值为( )

A 2n-2

B 2n

C 2m

D 2n-2m

2 相关知识点

在信息学竞赛初赛中,模拟算法是一种常用的解题策略,尤其适合于处理逻辑复杂或难以直接推理的问题。以下是结合您提供的要点扩展的模拟算法解题技巧:

大致观察程序逻辑

在深入分析之前,先快速浏览整个程序,理解其大致结构和流程。

识别出主要的变量、函数和控制结构(如循环、条件语句)。

大胆猜测程序逻辑

基于观察到的结构,尝试推测程序的功能和每个部分可能的作用。

这种猜测不需要完全准确,但可以帮助你确定模拟的重点区域。

使用较小数模拟

为了简化计算和理解,可以从较小的输入值开始模拟程序的执行。

通过观察小输入值下的程序行为,可以逐步揭示其内部逻辑。

根据问题分析关键程序

仔细阅读题目描述,理解问题的核心要求。

将问题与程序代码对应起来,找出实现问题解决方案的关键部分。

重点关注这些关键部分的逻辑和变量变化。

此外,还有一些额外的模拟算法解题技巧:

细化模拟步骤:将复杂的程序逻辑分解为更小的步骤,逐步模拟每个步骤的执行过程和结果。

记录中间状态:在模拟过程中,记录所有相关变量的中间状态,以便于跟踪和调试。

验证模拟结果:在完成模拟后,使用题目给出的测试用例或自己设计的测试用例来验证模拟结果的正确性。

注意边界条件:特别关注程序处理边界输入或特殊情况的能力,这些往往是解题的关键所在。

通过综合运用这些技巧,选手可以更加高效地利用模拟算法解决信息学竞赛初赛中的难题

3 思路分析

1 当m>0时,输出的值一定小于2n。( T )

分析

08     for (int i = 1; i <= n; ++i)
09         a[i] = b[i] = 0;
x和y都是在[1, n]的范围内的整数,说明x和y对应的数组的值赋值为010     for (int i = 1; i <= m; ++i) {
11         int x, y;
12         scanf("%d%d", &x, &y);
13         if (a[x] < y && b[y] < x) {
14             if (a[x] > 0)
15                 b[a[x]] = 0;
16             if (b[y] > 0)
17                 a[b[y]] = 0;
18             a[x] = y;
19             b[y] = x;
20         }
21     }
m>0 说明进入循环,并且a[x]=0 y>=1,a[y]=0 x>=1 必然存在a[x] = y;b[y] = x;
输出a数组和b数组为0的累加,如果都为0,累加和为2n,前面有不为0的,所以输出小于2n

2 执行完第27行的"++ans"时,ans —定是偶数。( F )

分析

22     int ans = 0;
23     for (int i = 1; i <= n; ++i) {
24         if (a[i] == 0)
25             ++ans;
26         if (b[i] == 0)
27             ++ans;
28     }
27行是b数组为0的累加统计,在for循环中累加,当25没累加时,27执行完就是奇数,可以尝试找出反例
n=10,m=1,x=2,y=4时
a和b数组如下图,当i=2时,25行ans没累加,此时27行ans累加后为3,不是偶数

3 a[i]和b[i]不可能同时大于0。( F )

分析

当输入的x和y相等时,a[i]和b[i]可能同时大于0
例如
n=10,m=1,x=2,y=2
a和b数组如下图,当i=2时,a[2]=2,b[2]=2

4 若程序执行到第13行时,x总是小于y,那么第15行不会被执行。( F )

分析

当x不变,y增加时可以找出反例
n=10 m=2
x=1 y=2
a[1]=2 b[2]=1
x=1 y=3
此时满足13行 a[1]>0 执行15行b[a[x]]=b[2]=0 清空b[2]对应的a的下标,后面重新赋值新的下标

5 若m个x两两不同,且m个y两两不同,则输出的值为( A )

A 2n-2m

B 2n+2

C 2n-2

D 2n

分析

m个x两两不同,且m个y两两不同,就会正常a中m个元素不为0,b中m个元素不为0
不为0的个数总共2*m个
数组a和b总共2n个元素
所以输出的ans为的元素为2*n-2*m

6 若m个x两两不同,且m个y都相等,则输出的值为( A )

A 2n-2

B 2n

C 2m

D 2n-2m

分析

如果y都相等,第1次 x ,y对a和b数组赋值后,第2次由于y不变,所以b[y]不变,所以a[b[y]]会被清0,a数组重新赋值,b[y]对应的值更新
所以每次更改后,a和b数组分别只有1个不为0的数
例如
n=10 m=2
x=2 y=1

再输入一对x y后
x=3 y=1

由此可知,无论输入多少个这样的数,最后a和b数组中只有2个不为0的数
所以ans=2n-2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/389574.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端Web-JavaScript(上)

要想让网页具备一定的交互效果&#xff0c;具有一定的动作行为&#xff0c;还得通过JavaScript来实现, 这门语言会让我们的页面能够和用户进行交互。 什么是JavaScript JavaScript&#xff08;简称&#xff1a;JS&#xff09; 是一门跨平台、面向对象的脚本语言&#xff0c;是…

【C++11】:右值引用移动语义完美转发

目录 前言一&#xff0c;左值引用和右值引用二&#xff0c;左值引用与右值引用比较三&#xff0c;探索引用的底层四&#xff0c;右值引用使用场景和意义4.1 解决返回值问题4.2 STL容器插入接口的改变 五&#xff0c;移动语义六&#xff0c;完美转发6.1 模板中的&& 万能…

产品经理如何快速掌握大模型技术,享受AI红利?

前言 随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;AI产品经理的角色变得越来越重要。尽管AI产品经理并不是一个新鲜的概念&#xff0c;但随着AI技术的迭代升级&#xff0c;这一角色的重要性得到了显著提升。 AI产品经理的演变 早期的AI产品可能并不会…

网络原理的TCP/IP

TCP/IP协议 1)应用层 应用层和应用程序直接相关,与程序员息息相关的一层协议,应用层协议,里面描述的内容,就是写的程序,通过网络具体按照啥样的方式来进行传输,不同的应用程序,就可以用不同的应用层协议,在实际开发的过程中,需要程序员自制应用层协议 应用层协议本质上就是对…

python: 多进程实例

1. 实例一 主进程跟子进程的通过两个队列实现全双工通信&#xff1b;如有需要主进程会提示窗口输入信息传输给子进程&#xff1b;如果子进程收到主进程的消息&#xff0c;会弹窗提示收到的消息&#xff1b;子进程弹窗提示进程即将结束&#xff1b; 详细代码如下 # -*- coding…

独立站+TikTok达人:自主营销与创意内容的完美结合

在全球电商市场迅猛发展的今天&#xff0c;独立站和TikTok达人的结合正在创造一种全新的电商营销模式。独立站作为电商平台&#xff0c;其自主性和灵活性为商家提供了广阔的发展空间&#xff1b;而TikTok达人凭借其独特的内容创作能力和庞大的粉丝基础&#xff0c;成为推动销售…

OpenStack;异构算力网络架构;算力服务与交易技术;服务编排与调度技术

目录 OpenStack 一、OpenStack概述 二、OpenStack的主要组件及功能 三、OpenStack的架构 四、OpenStack的应用场景 异构算力网络架构 算力服务与交易技术 服务编排与调度技术 OpenStack 是一个开源的云计算管理平台项目,由NASA(美国国家航空航天局)和Rackspace合作…

「AI绘画Stable Diffusion 零基础入门 」AI 绘画SD原理与工具介绍,万字详解新手入门必看!

大家好&#xff0c;我是设计师阿威 AI 绘画原理 想要入门 AI 绘画&#xff0c;首先需要了解它的原理是什么样的。 其实很早就已经有人基于深度学习模型展开了对图像生成的研究了&#xff0c;但在那时&#xff0c;生成的图像分辨率和内容都非常抽象。 直到近两年&#xff0c…

C++必修:STL之vector的模拟实现

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 为了让我们更加深入理解vector&#xff0c;接下来我们将模拟实现一个简易版的vect…

二叉树链式结构的实现(递归的暴力美学!!)

前言 Hello,小伙伴们。你们的作者菌又回来了&#xff0c;前些时间我们刚学习完二叉树的顺序结构&#xff0c;今天我们就趁热打铁&#xff0c;继续我们二叉树链式结构的学习。我们上期有提到&#xff0c;二叉树的的底层结构可以选为数组和链表&#xff0c;顺序结构我们选用的数…

将YOLOv8模型从PyTorch的.pt格式转换为OpenVINO支持的IR格式

OpenVINO是Open Visual Inference & Neural Network Optimization工具包的缩写&#xff0c;是一个用于优化和部署AI推理模型的综合工具包。OpenVINO支持CPU、GPU和NPU设备。 OpenVINO的优势: (1).性能&#xff1a;OpenVINO利用英特尔CPU、集成和独立GPU以及FPGA的强大功能提…

PHP学习:PHP基础

以.php作为后缀结尾的文件&#xff0c;由服务器解析和运行的语言。 一、语法 PHP 脚本可以放在文档中的任何位置。 PHP 脚本以 <?php 开始&#xff0c;以 ?> 结束。 <!DOCTYPE html> <html> <body><h1>My first PHP page</h1><?php …

3千米以上音视频键鼠延长解决方案:KVM光纤延长器

KVM光纤延长器​​​​​​​是什么&#xff1f; KVM光纤延长器是一种使用光纤来传输键盘、视频和鼠标&#xff08;KVM&#xff09;信号的设备&#xff0c;由发送端和接收端组成&#xff0c;一般成对使用。它可以让用户在远离电脑的地方如同在本地一样方便快捷的操作电脑。 KV…

mysql数据库基础语法(未完)

数据库的超级用户是root 一、注释 &#xff08;1&#xff09;“-- ”减号减号空格 注意不要省略空格 &#xff08;2&#xff09;“#” 井号 二、数据库操作 1、创建 CREATE DATABASE [IF NOT EXISTS] <数据库名> [CHARACTER SET utf8] 2、删除 DROP DATABASE …

MySQL —— 初始数据库

数据库概念 在学习数据库之前&#xff0c;大家保存数据要么是在程序运行期间&#xff0c;例如&#xff1a;在学习编程语言的时候&#xff0c;大家写过的管理系统&#xff0c;运用一些简单的数据结构&#xff08;例如顺序表&#xff09;来组织数据&#xff0c;可是程序一旦结束…

硬盘数据丢失不再怕,四大恢复工具帮你轻松逆转局面!

硬盘故障、误删文件、病毒攻击等原因导致数据丢失的情况时有发生。面对这种情况&#xff0c;如何高效、快速地进行硬盘数据恢复呢&#xff1f;接下来几款好用的数据恢复软件推荐给大家。 一、福昕数据恢复&#xff1a;全方位恢复&#xff0c;让数据无遗漏 链接&#xff1a;ww…

Windows(Win10、Win11)本地部署开源大模型保姆级教程

目录 前言1.安装ollama2.安装大模型3.安装HyperV4.安装Docker5.安装聊天界面6.总结 点我去AIGIS公众号查看本文 本期教程用到的所有安装包已上传到百度网盘 链接&#xff1a;https://pan.baidu.com/s/1j281UcOF6gnOaumQP5XprA 提取码&#xff1a;wzw7 前言 最近开源大模型可谓闹…

观测器控制仿真案例详解(s-function函数)

目录 一、弹簧-质量-阻尼系统1. 系统状态空间方程2. 观测器状态空间方程 二、仿真(Simulink s-function函数)1. 搭建Simulink仿真模型2. s-function函数代码3. 仿真效果 控制理论–观测器设计 一、弹簧-质量-阻尼系统 系统参数&#xff1a; m 1 , K 1 , B 0.5 m 1\,, K 1…

【前端面试题】后端一次性返回10w条数据,该如何渲染?

后端一次返回 10w 条数据&#xff0c;本身这种技术方案设计就不合理。 问题分析&#xff1a; JS 支持处理10w 条数据&#xff0c;但 DOM 一次渲染 10w 条数据&#xff0c;可能会卡顿&#xff0c;所以需想办法减少 DOM 渲染 若非要实现&#xff0c;则可以考虑以下两种方案 自…