【2023团体程序设计天梯赛CCCC】GPLT2023,L1~L2部分(PTA,L1-089~L1-096,L2-045~L2-048)题解代码复盘

news2024/11/25 0:37:22

文章目录

        • 概要
        • L1-089 最好的文档 5
        • L1-090 什么是机器学习 5
        • L1-091 程序员买包子 10
        • L1-092 进化论 10
        • L1-093 猜帽子游戏 15
        • L1-094 剪切粘贴 15
        • L1-095 分寝室 20
        • L1-096 谁管谁叫爹 20
        • L2-045 堆宝塔 25
        • L2-046 天梯赛的赛场安排
        • L2-047 锦标赛 25
        • L2-048 寻宝图 25
        • L3-035 完美树(骗分16)
        • 参考资料

概要

L1部分:L1-089~L1-096
L2部分:L2-045~L2-048
L3部分:L3-033~L3-036

L1-089 最好的文档 5

#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"Good code is its own best documentation.\n";
	return 0;
}

L1-090 什么是机器学习 5

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a, b;  cin>>a>>b;
	int c = a+b;
	cout<<c-16<<"\n"<<c-3<<"\n"<<c-1<<"\n"<<c<<"\n";
	return 0;
}

L1-091 程序员买包子 10

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n, m, k;  string x; 
	cin>>n>>x>>m>>k;
	if(k==n){
		cout<<"mei you mai "<<x<<" de\n";
	}else if(k==m){
		cout<<"kan dao le mai "<<x<<" de\n";
	}else{
		cout<<"wang le zhao mai "<<x<<" de"<<"\n";
	}
	return 0;
}

L1-092 进化论 10

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;  cin>>n;
	for(int i = 1; i <= n; i++){
		int a, b, c;  cin>>a>>b>>c;
		if(c==a*b){
			cout<<"Lv Yan\n";
		}else if(c==a+b){
			cout<<"Tu Dou\n";
		}else{
			cout<<"zhe du shi sha ya!\n";
		}
	}
	return 0;
}

L1-093 猜帽子游戏 15

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int a[maxn];
int main(){
	int n;  cin>>n;
	for(int i = 1; i <= n; i++){
		cin>>a[i];
	}
	int k;  cin>>k;
	while(k--){
		int ok = 0, ok2 = 1;
		for(int i = 1; i <= n; i++){
			int x;  cin>>x;
			if(x==0)continue;
			else if(x==a[i]){
				ok = 1;
			}else{
				ok2 = 0;
			}
		}
		if(ok2==1 && ok==1){
			cout<<"Da Jiang!!!\n";
		}else{
			cout<<"Ai Ya\n";
		}
	}
	return 0;
}

L1-094 剪切粘贴 15

#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;  cin>>s;
	int T;  cin>>T;
	while(T--){
		int x, y;  string a, b;  cin>>x>>y>>a>>b;
		string t = s.substr(x-1, y-x+1);
		s.erase(x-1,y-x+1);
		int cur = 0;
		int ok = 1;
		while(s.find(a,cur) != s.npos && cur < s.size()){
			int p = s.find(a,cur);
			string tt = s.substr(p+a.size(),b.size());
			if(tt == b){
				s.insert(p+a.size(),t);
				ok = 0;
				break;
			}else{
				cur++;
			}
		}
		if(s.find(a, cur) == s.npos && ok == 1){
			s.insert(s.size(), t);
		}
	}
	cout<<s<<"\n";
	return 0;
}

L1-095 分寝室 20

#include<bits/stdc++.h>
using namespace std;
int main(){
	int x, y, n;  cin>>x>>y>>n;
	int xx = -1, yy = -1, rs = 1e5+10;
	int zx = 0, zy = 0;
	for(int i = 1; i < n; i++){
		int j = n-i;
		if(x%i!=0 || y%j!=0)continue;
		int xi = x/i, yj = y/j;
		if(xi==1 || yj==1)continue;
		if(abs(xi-yj) < rs){
			xx = xi;
			yy = yj;
			zx = i;
			zy = j;
			rs = abs(xi-yj);
		}
	}
	if(xx!=-1)cout<<zx<<" "<<zy<<"\n";
	else cout<<"No Solution\n";
	return 0;
}

L1-096 谁管谁叫爹 20

#include<bits/stdc++.h>
using namespace std;
int get(int x){
	int res = 0;
	while(x){
		res += x%10;
		x /= 10;
	}
	return res;
}
int main(){
	int n;  cin>>n;
	while(n--){
		int na, nb;  cin>>na>>nb;
		int sa = get(na), sb = get(nb);
		if(na%sb==0&&nb%sa==0){
			if(na > nb){
				cout<<"A\n";
			}else{
				cout<<"B\n";
			}
		}
		else if(na%sb==0)cout<<"A\n";
		else if(nb%sa==0)cout<<"B\n";
		else if(na > nb){
			cout<<"A\n";
		}else{
			cout<<"B\n";
		}
	}
	return 0;
}

L2-045 堆宝塔 25

//思路:
//看到堆盘子想到水杯/栈 /(汉诺塔/递归,并没有)之类的东西,按题意无脑模拟即可
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;  cin>>n;
	stack<int>a, b;
	int cnt = 0, mx = 0;
	while(n--){
		int x;  cin>>x;
		if(a.empty() || x<a.top()){
			a.push(x);
		}else{
			if(b.empty() || x>b.top()){
				b.push(x);
			}else{
				mx = max(mx, (int)a.size());
				while(!a.empty())a.pop();
				cnt++;
				while(!b.empty() && b.top()>x){
					a.push(b.top());
					b.pop();
				}
				a.push(x);
			}
		}
	}
	if(a.size()!= 0)cnt++;
	if(b.size()!= 0)cnt++;
	mx = max(mx, (int)a.size());
	cout<<cnt<<" "<<mx<<"\n";
	return 0;
}

L2-046 天梯赛的赛场安排

//思路:
//按题意模拟即可,注意细节点比较多,每一轮对当前未安排的人数最多的学校进行处理,只处理一个考场,然后剩余人数是要放回去的。
//最开始的找人数最多可以重载优先队列,找编号最小的和新开考场其实注意到数组范围不大,其实可以开个数组for。
//好久没写代码了,一下子没想到开数组,也忘记怎么打重载了,所以就乱搞了一波,强行暴力多for了一下。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5050;
string sc[maxn];
int num[maxn], rs[maxn];
int main(){
	int n, c;  cin>>n>>c;
	priority_queue<pair<int,int>>q2;
	for(int i = 1; i <= n; i++){
		cin>>sc[i]>>num[i];
		q2.push({num[i], i});
	}
	int cnt = 0;
	int tot = 0;
	priority_queue<pair<int,int>>q;
	int xxx = 0;
	while(q2.size()){
		int nm = q2.top().first;
		int id = q2.top().second;  q2.pop();
		if(nm > c){
			rs[id]++;
			cnt++;
			nm -= c;
			q2.push({nm,id});
			continue;
		}
		if(nm != 0){
			if(!q.empty() && q.top().first >= nm){
				vector<pair<int,int>>vc;
				while(!q.empty() && q.top().first >= nm){
					vc.push_back(q.top()); q.pop();
				}
				int t = vc.back().first; 
				int id2 = vc.back().second;
				t -= nm;
				rs[id]++;
				if(t != 0)q.push({t, id});
				for(int i = 0; i < vc.size()-1; i++){
					q.push(vc[i]);
				}
			}else{
				q.push({c-nm, ++tot});
				rs[id]++;
				cnt++;
			}
		}
    }
	for(int i = 1; i <= n; i++){
		cout<<sc[i]<<" "<<rs[i]<<"\n";
	}
	cout<<cnt<<"\n";
	return 0;
}


L2-047 锦标赛 25

在这里插入图片描述

//题意:2^k个人两两比赛,最后剩1个。给出第i轮第j场的失败者,求最开始的所有人顺序。
//思路:完美二叉树,底层一半的值确定了,然后往上走一层,如果当前值比前一层对应位置的某个值大,那么就可以加入答案中,否则加无解了。
//数组维护上一层每个节点在答案中的位置(尚未被填入值的),然后从底往上走依次把值填进去即可。
#include<bits/stdc++.h>
using namespace std;
#define lch (j<<1)
#define rch (j<<1|1)

const int maxv = 50, maxn = (1<<20);
int a[maxv][maxn], o[maxv][maxn]; //第i层第j个的能力,以及兄弟节点在答案中的位置
int res[maxn];

int main(){
    int k;  cin>>k;
    int ok = 1;
    for(int i = 1; i <= k; i++){
        int n = 1<<(k-i);
        for(int j = 0; j < n; j++){  //枚举每一层
            cin>>a[i][j];
            if(i==1){
                res[lch] = a[i][j];  o[i][j] = rch;
                continue;
            }
            int mx = max(a[i][j], max(a[i-1][lch], a[i-1][rch]));
            if(a[i][j] < a[i-1][lch] && a[i][j] < a[i-1][rch]){
                ok = 0;
                break;
            }else if(a[i][j] >= a[i-1][lch]){ //如果当前是胜者, 就放到另一个位置
                res[o[i-1][lch]] = a[i][j];
                o[i][j] = o[i-1][rch]; 
            }else{
                res[o[i-1][rch]] = a[i][j];
                o[i][j] = o[i-1][lch];
            }  
            a[i][j] = mx;  //记录子树最大值
        }
    }
    int w;   cin>>w;
    if(a[k][0] <= w) res[o[k][0]] = w; else ok = 0;
    if(ok==0){ cout<<"No Solution\n"; return 0; }
    for(int i = 0; i < (1<<k); i++){
        cout<<res[i]<<" \n"[i==(1<<k)];
    }
    return 0;
}

L2-048 寻宝图 25

//题意:Floodfill 例题,找联通块。
//岛屿的个数:dfs找有多少个联通块即可,注意1e5x1e5开不下bool/int数组和判重,可以用变长string,然后走过一个点就直接改掉
//宝藏岛屿:注意特判刚进去的那个点是不是宝藏,没判断的话是15分
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
int n, m;
string a[maxn];
int dx[] = {0, 0, -1, 1};
int dy[] = {1, -1, 0, 0};
int ok = 0;
void dfs(int x, int y){
	if(a[x][y]!='0' && a[x][y] != '1')ok = 1;
	for(int i = 0; i < 4; i++){
		int nx = x+dx[i], ny = y+dy[i];
		if(nx<=0||nx>n || ny<=0 || ny > m)continue;
		if(a[nx][ny]=='0')continue;
		if(a[nx][ny]!='1')ok = 1;
		a[nx][ny] = '0';
		dfs(nx, ny);
	}
}
int main(){
	cin>>n>>m;
	for(int i = 1; i <= n; i++) {
		cin>>a[i];
		a[i] = "0"+a[i];
	}
	int cnt = 0, res = 0;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			if(a[i][j]!='0'){
				ok = 0;
				dfs(i,j);
				cnt++;
				if(ok==1)res++;
			}
		}
	}
	cout<<cnt<<" "<<res<<"\n";
	return 0;
}

L3-035 完美树(骗分16)

//骗分:最后只输出一个数字,暴力从1开始枚举看看能不能骗分
//发现0有1分,20有15分。 然后试试限一下n的范围把两个点都骗进去。
#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;  cin>>n;
    if(n<10)cout<<"0";//1分
    else cout<<"20";   //15分
    return 0;
}

参考资料

官方题解:链接

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

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

相关文章

GIII EDI 需求分析

G-III成衣集团是一家美国服装公司&#xff0c;拥有30多个授权和自有品牌如&#xff1a;Calvin Klein、Tommy Hilfiger、Guess以及Levi’s等&#xff0c;在全球拥有众多的零售合作伙伴和销售渠道&#xff0c;并致力于提供时尚、高质量和价格合理的服装产品。 GIII EDI 需求 传…

版本控制工具之Git基本操作

Git 相对较新的版本控制工具&#xff0c;特点为分布式。 每一台客户端都具有完整的版本备份&#xff0c;所有的版本提交都不需要依赖中心服务器。只有在多人协同时&#xff0c;服务器会处理并发情况。 一、Git 环境安装 &#x1f449;链接&#xff1a;https://blog.csdn.net/w…

「速通Shell」初次走近Shell,Shell是什么?

目录 初次走进ShellShell是什么Shell工作原理 Shell分类Shell的优势 第一个Shell脚本Hello WorldShell执行方式绝对路径执行相对路径执行脚本命令执行系统命令执行 总结 对于开发者来说&#xff0c;除了掌握Java、C/C等主要编程语言外&#xff0c;还需要掌握支撑性的工具语言和…

Vagrant 安装

系列文章目录 文章目录 系列文章目录前言一、安装地址二、安装步骤注意事项三、常用命令四、问题总结 前言 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#xff0c;本文就介绍了机器学习的基础内…

机器人方向的人工智能工具是助手还是平替

本文内容严格按创作模板发布&#xff1a; 近日育碧开发了人工智能工具 Ghostwriter&#xff0c;可以一键生成游戏NPC对话。不少游戏开发者担心AI写手工具的出现会让自己“饭碗”不保&#xff0c;但Swanson表示这个工具只是为了提供第一稿的 barks来减少对话生成工作的繁琐度。…

Linux网络编程TCP粘包问题解析及解决方法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、一次发送多个数据实验二、导致问题的原因三、解决方案之一&#xff1a;延时发送四、知识点补充发送缓冲区和接收缓冲区五、解决方法总结 前言 本篇文章将引…

Java-JDK动态代理(AOP)使用及实现原理分析

Java-JDK动态代理&#xff08;AOP&#xff09;使用及实现原理分析 第一章:代理的介绍 介绍:我们需要掌握的程度 动态代理(理解) 基于反射机制 掌握的程度: 1.什么是动态代理? 2.动态代理能够做什么? 后面我们在用Spirng和Mybatis的时候,要理解怎么使用的. 1.什么是代理? 代理…

PID循迹机器人及整定

如何对线路循迹机器人进行编程 如何对线路循迹机器人进行编程 (robotresearchlab.com)PID调谐文章&#xff1a;http://robotresearchlab.com/2019/02/16/pid-line-follower-tuning/ 介绍人们选择对循迹机器人进行线路编程的两种主要方式&#xff0c;并比较两者。将详细比较“…

绘声绘影2023简体中文版新功能介绍

会声会影是一款专业的数字音频工作站软件,它提供强大的音频编辑和制作功能,被广泛应用于音乐创作、录音棚录制以及现场演出等领域。会声会影的最新版本会声会影2023将于2022年底发布,主要功能和新功能详述如下: 会声会影2023主要功能: 1. 直观易用的界面:会声会影采用简洁而不…

C语言入门篇——数组篇

目录 1、数组 2、一维数组的创建和初始化 2.1数组的创建方式&#xff1a; 2.2数组的初始化 2.3一维数组的使用 ​2.4一维数组在内存中的存储 3、二维数组的创建和初始化 3.1二维数组的创建 3.2二维数组的初始化 3.3二维数组的使用 3.4二维数组在内存中的存储 4、数组…

SpringBoot中一个注解优雅实现重试Retry框架

目录: 1、简介2、实现步骤 1、简介 重试&#xff0c;在项目需求中是非常常见的&#xff0c;例如遇到网络波动等&#xff0c;要求某个接口或者是方法可以最多/最少调用几次&#xff1b;实现重试机制&#xff0c;非得用Retry这个重试框架吗&#xff1f;那肯定不是&#xff0c;相信…

【云计算•云原生】2.云计算环境下的新趋势—云原生

文章目录 1.什么是云原生2.云原生概述2.1 微服务2.2 容器云2.3 serverless无服务器2.4 DevOps2.5 持续集成和持续交付2.6 openStack 1.什么是云原生 按照自己的理解&#xff0c;可以将云原生拆分成云原生&#xff0c;云就是上一节中的云计算的云&#xff1b;原生即为诞生的环境…

Visual Studio C# WinForm开发入门(3):各种控件介绍

1、窗体 窗口就是打开程序我们所面对的一个面板&#xff0c;里面可以添加各种控件&#xff0c;如下图所示&#xff0c;我们可以在属性栏设置其标题名称、图标、大小等。 双击标题框&#xff0c;会生成Load函数&#xff0c;也可以到事件里面去找 Load函数是窗口生成后需要…

Spring Doc OpenAPI3.0 抛弃SpringFox拥抱SpringDoc

Spring Doc 1 简介 SpringDoc是SpringBoot 的API文档工具。官网&#xff1a;https://springdoc.org/ 在使用SpringBoot 2.6以前去创建API文档工具一般会采用SpringFox提供的Swagger库&#xff0c;但是由于SpringBoot版本的不断升级和SpringFox摆烂不更新&#xff0c;导致了S…

springboot项目需要读取非application.yml/properties 的配置文件

目录&#xff1a; 1、操作步骤2、总结3、扩展4、第二种方法获取配置文件bean 1、操作步骤 1.新建配置文件&#xff1a; 2.编辑配置文件&#xff1a; test-serverrd-dev02.jr.rong360.com3.新建Config类&#xff1a; Component PropertySource(value "kirara.properti…

销量破亿,董洁直播间凭何出圈?

近期&#xff0c;“没有五位数走不出”的董洁直播间火了…… 纵观这几年各大平台直播带货&#xff0c;火已不是什么新鲜事&#xff0c;而为何董洁的直播能火上热搜呢&#xff1f;本期&#xff0c;千瓜将解析董洁直播&#xff0c;同品牌方聊聊小红书直播的那些事儿。董洁「种草式…

Win10分辨率怎么看?2种必须学会的方法!

案例&#xff1a;win10分辨率 【为了方便办公&#xff0c;最近我的电脑连接了2个显示屏&#xff0c;但感觉电脑显示怪怪的&#xff0c;可能是分辨率设置不对&#xff0c;大家知道应该怎么查看电脑的分辨率吗&#xff1f;感谢感谢&#xff01;】 我们的win10系统支持多种分辨率…

ChatGPT的未来:人工智能技术的新发展趋势

第一章&#xff1a;人工智能技术的新发展趋势 近年来&#xff0c;随着人工智能技术的不断发展和应用&#xff0c;ChatGPT这样的大型自然语言处理模型已经成为人工智能技术的重要组成部分。未来&#xff0c;人工智能技术的发展将更加快速&#xff0c;我们可以看到以下几个方面的…

制造型企业为何需要MES管理系统,企业怎样选择合适的MES

MES管理系统是专门针对制造型企业而设计的&#xff0c;能实现对生产车间、工厂信息化管理&#xff0c;帮助制造型企业提高生产效率&#xff0c;加快数字化转型。目前针对制造型企业生产效率、企业竞争力和生产管理状况的需求&#xff0c;MES管理系统已经成为实现生产经营目标的…

MySQL创建用户并赋权限

MySQL创建用户并赋权限 省流1.创建mysql用户1.1 新建用户1.2 查询用户信息 2. 授权用户2.1 指定数据库和表赋权2.2 赋予全部权限2.3 查看用户权限2.4 回收用户权限 3. 修改用户密码4. 删除用户5. 刷新权限(务必执行) 省流 如果只是希望新建一个用户并且赋予全部执行权限&#…