备战CAIP——PTA甲级刷题

news2024/11/16 1:15:13

目录

    • 引入
    • 2023年 真题
    • 1001 A+B Format (20 分) 小数字相加再格式化输出
    • 1002 A+B for Polynomials (25 分) 多项式相加
    • 1003 Emergency 救援最短路径和最大救援部队

引入

2023睿抗 RoboCom机器人开发者大赛CAIP编程设计赛道编程技能赛
考察知识点
https://mp.weixin.qq.com/s/lXp5axGqtSeA4eXrcU7vEA
往年真题:https://pintia.cn/market/tag/1447465711671738368
PAT甲级题解:https://blog.csdn.net/a617976080/article/details/89676670

2023年 真题

第一题 AC了

#include<bits/stdc++.h>
using namespace std;
int g[5];
int gg[5];
int n;

int main(){
	cin>>n;
	int a,b;
	while(n--){
		cin>>a>>b;
		if(a==0){
			g[b]++;
		}else gg[b]++;		
	}
	int f = 0;
	if((g[1]>gg[1])||(g[1]==gg[1]&&g[2]>gg[2])||(g[1]==gg[1]&&g[2]==gg[2]&&g[3]>gg[3])) f=1;
		cout<<g[1]<<" "<<g[2]<<" "<<g[3]<<'\n';
		cout<<gg[1]<<" "<<gg[2]<<" "<<gg[3]<<'\n';
	if(f){
		cout<<"The first win!";
	}else{
		cout<<"The second win!";
	}
	return 0;
} 

第二题 就拿了8/15分

#include<bits/stdc++.h>
using namespace std;
int n,m;
struct cu{
	string s;
	string den;
}cu[1010],en[1010];
int main(){
//	string s1 = "Milk";
//	string s2 = "Milk";
	cin>>n>>m;
	for(int i = 0; i <n; i++){
		cin>>cu[i].s>>cu[i].den ;
	}
	int cnt = n;
	for(int i = 0 ; i < n;i++){
		for(int j = 0 ; j < n;j++){
			cu[cnt].s  = cu[i].s + cu[j].s;
			cu[cnt].den   = cu[i].den  + cu[j].den;
//			cout<<i<<" "<<j<<" "<<cu[i].s<<" "<<cu[i].den <<" "<<cu[j].s<<" "<<cu[j].den <<endl;
//			cout<<cu[cnt].s <<" "<<cu[cnt].den <<endl;
			cnt++;
		}
	}
	for(int i = 0; i < m; i++){
		int f = 0;
		cin>>en[i].s;
		
		for(int j = 0; j < cnt; j++){
			if(en[i].s==cu[j].s){
				en[i].den = cu[j].den ; f=1;
			} 
		}
		
		if(f) f = 0;
		else en[i].den = "D";
	}
	for(int i =0 ; i < m; i++){
		cout<<en[i].den<<'\n';
	}
	return 0;
}

三题略微变态
4、深搜 没搜出来 不想看了 0分

#include<bits/stdc++.h>
using namespace std;
struct node{
	string a;
	int sua;
	string b;
	int sub;
	bool stu;	
}tu[1010];
int n,cnt=0;
int ans[1010];
void dfs(int x){
	//这一层的推论能前一层连上,但不和第一个互异 
		cnt++;
		ans[cnt] = x;			
		if(tu[1].a == tu[x].b &&tu[1].sua != tu[x].sub){
			for(int i = 1; i < cnt+1; i++){
				cout<<tu[ans[i]].a<<" "<<tu[ans[i]].sua<<" "<<tu[ans[i]].b<<" "<<tu[ans[i]].sub<<" "<<"="; 
			}
			cout<<tu[1].a<<" "<<tu[1].sua<<" "<<tu[cnt].b<<" "<<tu[cnt].sub<<endl;
			return;
		}
	for(int i = 1; i < n+1; i++){
		if(tu[x+1].a == tu[x].b&&tu[x+1].sua==tu[x].sub&&tu[i].stu==0){
			cnt++;
			ans[cnt] = x;  tu[i].stu=1;
			dfs(x+1);
			cnt--;
			ans[cnt] = 0;  tu[i].stu=0;
		}
	}
	return;
}
int main(){
	cin>>n;
	for(int i = 1; i < n+1; i++)		cin>>tu[i].a >>tu[i].sua >>tu[i].b >>tu[i].sub;
	tu[1].stu  =1;
	dfs(1);
	
	return 0;
}

本科组

  • 线性表:静态链表、堆栈、队列
  • 树:遍历、搜索树、完全二叉树等
  • 图:基本性质、最短距离、最大流/最小割,强连通分支、最近公共祖先、最小生成树、欧拉序列等
  • 排序(贪心)+查找(二分、哈希)
  • 经典算法(搜索剪枝、动态规划等)
  • 具备较强的问题抽象和建模能力,能实现对复杂实际问题的模拟求解

1001 A+B Format (20 分) 小数字相加再格式化输出

Sample Input:
-1000000 9
Sample Output:
-999,991
题目大意:
计算a+b,−106 ≤a,b≤106,结果按照西方的那种写数字的方式输出,从三个数一个逗号那种。
考点:
格式控制输出
思路1:
首先考虑到的肯定是把a+b的结果通过取模和取余操作存入结果数组ans中,再格式化输出。这里面就涉及到特殊值的讨论问题,即“,”放置的位置和“-”。还好时OI可以通过多组数据的测试,不断完善分类判断的逻辑和范围准确性,但是其实浪费时间。
首先结果大于零,等于零和小于零,其次要判断数组长度,若n为1,输出时没有“,”,也不用0展位满3。结果数组的最有一位,也是没有逗号。
优化:其实大于零,小于零,等于零可以一个判断就行了,只要判断是否小于零,小于零就多输出一个“-”。

#include<bits/stdc++.h>
using namespace std;
long long a,b,c,res;
long long ans[10]={0};
int main(){
    cin>>a>>b;
    c = a + b;
    res = c;
    int n;
//    cout<<"c: "<<c<<'\n';
    if(c>0){
        //存结果
        for(n = 0; res != 0; n++){
        	ans[n]= res%1000;
        	res = res/1000;
		} 
		//输出
		for(int i = n-1;i >= 0;i--){
			if(i==n-1&&n==1) printf("%d",ans[n-1]);
			else if(i==n-1&&n!=1) printf("%d,",ans[n-1]);
			else if(i==0&&n!=1)printf("%03d",ans[i]);
			else printf("%03d,",ans[i]);
		}
    }else if (c<0){
        res = -c;
        for( n = 0; res != 0; n++){
        	ans[n]= res%1000;
        	res = res/1000;
		} 
        cout<<"-";
		for(int i = n-1;i >= 0;i--){
			if(i==n-1&&n==1) printf("%d",ans[n-1]);
			else if(i==n-1&&n!=1) printf("%d,",ans[n-1]);
			else if(i==0&&n!=1)printf("%03d",ans[i]);
			else printf("%03d,",ans[i]);
		}
    }else cout<<0; 
    return 0;
}

思路2:
数据范围不大,可以先计算一下边界值[-2000000,2000000],然后得到一个很通用的输出方式:

#include<bits/stdc++.h>
using namespace std;
int main(){
	long long n,m;
	cin>>n>>m;
	long long sum = n+m;
	if(sum<0){
		cout<<"-"; sum *= -1;
	} 
	if(sum<1000){
		cout<<sum;
	}else if(sum>=1000&&sum<1000000) {
		printf("%d,%03d",sum/1000,sum%1000);	 
	}else if(sum>=1000000){
		printf("%d,%03d,%03d",sum/1000000,(sum%1000000)/1000,sum%1000);
	}
	return 0;
} 

思路3:
字符串的长度来判断,什么时候需要输出“,”。把值当正数看待(也可以不,前面加一位,不影响),从前往后输出,当数到的数和整体长度对3取模的值相等,就该输出“,”了,同时要注意排除末尾不用输出“,”。
优势:代码量少,熟练了以后会加快编码速度。

#include<bits/stdc++.h>
using namespace std;
long long a,b,c;
int main(){
	cin>>a>>b;
	c = a + b; 
	if(c<0){	c = -c;	cout<<"-"; } 

	string s = to_string(c);
	int len = s.size();
	//cout<<"s: "<<len<<endl;
	int t = len %3;
	for(int i = 0; i < len; i++){
		cout<<s[i];
		if((i+1)%3==t&&i!=len-1) cout<<",";
	}
	return 0;
}

注:一题多解,思路门儿清。
用三种存储方式都(int,数组,string)
%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
%0md 用0来补空格

1002 A+B for Polynomials (25 分) 多项式相加

Sample Input:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output:
3 2 1.5 1 2.9 0 3.2
题目大意:
两个多项式相加,每一行第一个数表示多项式的非零项个数,后面跟着非零项,第一个是阶数,第二个是系数。最后以相同的格式输出相加后的多项式,保留小数点后1位。
思路:
首先吐槽!这题的数据范围给的乱七八糟,导致我最开始数组开小了,段错误。
小细节,也蛮费时间的:
1、输入的时候可能会被吞。
2、数据类型问题会导致答案不正确
3、数组范围
4、结果保留一位小数。浮点数的保留一位小数!!!
思路就是数组模拟多项式的加法,记录求得的多项式的项数和最高次幂就行。读入的时候,将系数存到对应幂上,便于两多项式相加。

#include<bits/stdc++.h>
using namespace std;
double a[1005],b[1005]; //系数 
int ea[1005],eb[1005];//幂 
double ans[1005];
int main(){
    int na,nb,k;
    cin>>na;
	for(int i = 0; i <na ;i++){
		cin>>ea[i];
		int t = ea[i]; 
		cin>>a[t];  //按照对应幂去存系数 
	}
	scanf("%d",&nb); 
	for(int i = 0; i < nb; i++){
		cin>>eb[i];
		int t = eb[i]; 
		cin>>b[t];  //按照对应幂去存系数 
	}
	k = ea[0] > eb[0] ? ea[0]:eb[0];//最高次幂 
	int  n = 0;
	for(int i = 0; i <= k; i++){
		ans[i] = a[i] + b[i];
		//cout<<"i: "<<i<<" "<<a[i]<<" "<<b[i]<<" "<<ans[i]<<endl;
		if(ans[i]!=0) n++;
	}
	cout<<n;
	for(int i = k; i >= 0; i--){
		if(ans[i]) printf(" %d %.1f",i,ans[i]);
	}
	return 0;
}

1003 Emergency 救援最短路径和最大救援部队

首先来一张最短路算法,知识结构图。
在这里插入图片描述
稠密图用邻接矩阵存图,稀疏图一般用邻接表存图,节约空间。稠密图用朴素迪杰斯特拉,稀疏图图用堆优化迪杰斯特拉。多源,指要求多个起点到终点的最短路。

我们这个题,显然是单源。求一个点到另一个点的最短路,可以是用求一个点到其他所有点的最短路来找出 s 到 t 的最短路。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

靶机渗透之SICKOS: 1.1(解法2)

SICKOS: 1.1 靶机渗透测试是否存在shellshock构造payload获取bash权限切换shell构造pythonpayload&#xff0c;放置到py定时任务中开始监听py文件 靶机渗透 sudo nikto -h 192.168.133.139 -useproxy http://192.168.133.139:3128 - Nikto v2.5.0 ---------------------------…

Python应用实例(一)外星人入侵(八)

外星人入侵&#xff08;八&#xff09; 1.添加Play按钮1.1 创建Button类1.2 在屏幕上绘制按钮1.3 开始游戏1.4 重置游戏1.5 将play按钮切换到非活动状态1.6 隐藏鼠标光标 我们添加一个Play按钮&#xff0c;用于根据需要启动游戏以及在游戏结束后重启游戏&#xff0c;还会修改这…

FreeRTOS实时操作系统(十五)Tickless低功耗模式

系列文章 FreeRTOS实时操作系统&#xff08;一&#xff09;RTOS的基本概念 FreeRTOS实时操作系统&#xff08;二&#xff09;任务创建与任务删除&#xff08;HAL库&#xff09; FreeRTOS实时操作系统&#xff08;三&#xff09;任务挂起与恢复 FreeRTOS实时操作系统&#x…

线程栈溢出异常,程序崩溃在汇编代码test dword ptr [eax],eax上的问题排查

目录 1、问题描述 2、使用Windbg静态分析dump文件 3、将Windbg附加到进程上进行动态调试 4、使用Visual Studio进行Debug调试 4.1、使用if条件断点和汇编代码单步调试 4.2、分析消息响应函数入口处为什么会产生崩溃 4.3、解决办法 5、线程栈溢出的相关细节点说明 6、引…

JS-24 async异步函数、 await关键字;异步函数的执行流程;进程和线程;浏览器的事件循环;宏任务和微任务;Promise面试题

目录 1_异步函数1.1_async1.2_异步函数的执行流程2_await关键字 2_浏览器进程、线程2.1_进程和线程2.2_操作系统的工作方式2.3_浏览器中的JavaScript线程2.4_浏览器的事件循环2.3_宏任务和微任务2.4_Promise面试题题一题二 1_异步函数 1.1_async async是asynchronous单词的缩…

大模型基础:理论与技术的演进概述

大模型基础&#xff1a;理论与技术的演进概述 人工智能发展历程 人工智能发展历程可以概括为以下几个主要阶段: 起源阶段(1956-1980年代)&#xff0c;这一时期被称为人工智能的“黄金时代”, 达特茅斯会议首次提出人工智能概念, 开发出传统人工智能系统, 如ELIZA、深蓝等。知…

【InsCode Stable Diffusion 美图活动一期】生成着玩

此为内容创作模板&#xff0c;请按照格式补充内容&#xff0c;在发布之前请将不必要的内容删除 一、 Stable Diffusion 模型在线使用地址&#xff1a; https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型相关版本和参数配置&#xff1a; 三、图片生成提示词与反向…

C++ | 多态

目录 前言 一、多态的概念 二、多态的定义与使用 1、多态的构成条件 2、虚函数 3、虚函数的重写&#xff08;覆盖&#xff09; 4、虚函数重写的两个例外 &#xff08;1&#xff09;协变 &#xff08;2&#xff09;析构函数的重写 5、子类的指针或者引用调用 6、C11的…

unity对象池系统

当游戏场景中出现大量的可重复利用的物体时&#xff0c;通过Destory来销毁再创建会触发不必要的GC回收机制&#xff0c;浪费性能&#xff0c;我们可以利用unity自带的对象池系统&#xff0c;从而节约性能来得到同样的效果。 为了使用这个对象池系统&#xff0c;我写了一个瞬间产…

element-plus 报错 ResizeObserver loop limit exceeded 解决

使用Element-plus&#xff0c;页面重置大小时&#xff0c;出现如下报错&#xff1a; Uncaught runtime errors: ERROR ResizeObserver loop limit exceeded at handleError (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:252:58) at ev…

DETR3D: 3D Object Detection from Multi-view Images via 3D-to-2D Queries

DETR3D: 3D Object Detection from Multi-view Images via 3D-to-2D Queries 目的 本文提出了一个 仅使用 2D 信息的&#xff0c;3D 目标检测网络&#xff0c;并且比依赖与 密集的深度预测 或者 3D 重建的过程。该网络使用了 和 DETR 相似的 trasformer decoder &#xff0c;…

SpringBoot中集成jasypt-spring-boot实现配置文件数据加密脱敏

场景 经常会遇到这样一种情况&#xff1a;项目的配置文件中总有一些敏感信息&#xff0c;比如数据源的url、用户名、 密码....这些信息一旦被暴露那么整个数据库都将会被泄漏&#xff0c;那么如何将这些配置隐藏呢。 除了使用手动将加密之后的配置写入到配置文件中&#xff…

Win把老外惹恼了!

随着Windows 10创意者更新&#xff08;民间称Win10.3&#xff09;推送规模的加大&#xff0c;其暴露出来的槽点越来越多。 此前&#xff0c;我们已经报道过新版的Defender升级为安全助手&#xff0c;类似于国内有名的xx管家和数字卫士&#xff0c;全面接管PC健康事务。 然而&a…

【css】用css样式快速写右上角badge徽标,颜色设置为渐变色

先看效果展示&#xff0c;已公开显示在图片卡片的右上角。 首先是dom代码&#xff1a;需要两个view或者div&#xff0c;public-badge是“已公开”那个矩形&#xff0c;show-signal是右边那个下三角&#xff0c;也就是阴影部分&#xff0c;这样看起来比较有立体感。 <view…

Linux驱动进阶(四)——内外存访问

文章目录 前言内存分配kmalloc函数vmalloc()函数后备高速缓存 页面分配内存分配物理地址和虚拟地址之间的转换 设备I/O端口的访问Linux I/O端口读写函数I/O内存读写使用I/O端口 小结 前言 驱动程序加载成功的一个关键因素&#xff0c;就是内核能够为驱动程序分配足够的内存空间…

论文解读:Inpaint Anything: Segment Anything Meets Image Inpainting

论文&#xff1a;https://arxiv.org/pdf/2304.06790.pdf 代码&#xff1a;https://github.com/geekyutao/Inpaint-Anything 图1&#xff1a;Inpaint Anything示意图。用户可以通过点击图像中的任何对象来选择它。借助强大的视觉模型&#xff0c;例如SAM[7]、LaMa [13]和稳定扩散…

我叫李明,我是一名开发人员

目录 一、这是一个故事 二、不屈不挠的李明 三、化解于无形 四、总结 一、这是一个故事 这个故事的主人公是一个年轻的程序员&#xff0c;他叫做李明。李明是一名技术过硬、工作认真负责的程序员&#xff0c;他的工作是开发一款新的软件产品。这款软件是一款在线购物平…

【Java基础】第四章 Object 类应用

系列文章目录 [Java基础] 第一章 String类应用及分析 [Java基础] 第二章 数组应用及源码分析 [Java基础] 第三章 StringBuffer 和 StringBuilder 类应用及源码分析 [Java基础] 第四章 Object 类应用 文章目录 系列文章目录前言一、如何使用Object&#xff1f;1.1、显式继承1.2…

c++内存映射文件

概念 将一个文件直接映射到进程的进程空间中&#xff08;“映射”就是建立一种对应关系,这里指硬盘上文件的位置与进程逻辑地址空间中一块相同区域之间一 一对应,这种关系纯属是逻辑上的概念&#xff0c;物理上是不存在的&#xff09;&#xff0c;这样可以通过内存指针用读写内…

Web-登录功能实现(含JWT令牌)

登录功能 这个登陆功能先不返回JWT令牌 登陆会返回JWT令牌 一会在登陆验证时讲解JWT令牌&#xff08;返回的data就是它&#xff09; 登录校验 概述 就是你比如复制一个url 用一个未曾登陆对应url系统的浏览器访问 他会先进入登陆页面 登陆校验就是实现这个功能 简而言之…