北华大学第九届程序设计竞赛 题解

news2025/1/10 15:41:28

5.14和队友VP一场,第二次VP,状态明显比第一次好很多,总共A了7题,基本是能做出来的都做出来了,最后还剩下接近2小时的时间。。。。。

A "北华"有几何

思路:数图片中“北华”的数量,直接输出即可

B 学霸题 II

思路:二分+前缀和(缺少任何一个都会超时)

首先输入数组a(正视图每列的个数)然后对其进行排序,计算数组a的前缀和,再输入数组b(侧视图每列的个数),数组b每个数只能小于或者等于数组a的每一个数。这样想,假如开始按正视图的个数堆满,那么考虑每列侧视图时,正式图只要大于当前列侧视图的都要削减到和当前列侧视图同高,所以每输入一个b,二分数组a,在数组a中查找第一个大于b的数,前半部分不变,直接是前缀和即可,后半部分都等于当前列侧视图b

lower_bound(begin,end,num);                        查找第一个大于等于num的数字upper_bound(begin,end,num);                       查找第一个大于num的数字

AC代码: 

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;

const int N=300005;
int a[N],b[N],sum[N];
signed main(){
	int n,m,ans=0,pos;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++){
		sum[i]=sum[i-1]+a[i];
	}
	cin>>m;
	for(int i=1;i<=m;i++){
		cin>>b[i];
		pos=upper_bound(a+1,a+n+1,b[i])-a;
		ans+=(n-pos+1)*b[i]+sum[pos-1];
	}
	cout<<ans;
	return 0;
}

C 小杜的字符串

思路:模拟

对字符串的每列进行遍历,将每列的字符都变成在每列中出现次数最多的字符,因为只有三行,所以记录字符出现次数,每次答案加上3-最大字符数即可

AC代码:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

string s[5];
int sum[30];
int main(){
	int n,ans=0;
	cin>>n;
	for(int i=1;i<=3;i++){
		cin>>s[i];
	}
	for(int i=0;i<n;i++){
		memset(sum,0,sizeof(sum));
		for(int j=1;j<=3;j++){
			sum[s[j][i]-'a']++;
		}	
		sort(sum,sum+26);
		ans+=3-sum[25];
	}
	cout<<ans;
	return 0;
}

D 矿石精炼场

思路:模拟题

因为只能购买一台矿石精炼器,所以分析两种情况取最大值即可。第一种情况,不购买矿石精炼器,最后的金钱即为当前手里的金钱+矿资源的价值。第二种情况,购买矿石精炼器,若要购买矿石精炼器,首先电力资源要满足,所以要修建发电站,要修建发电站,首先要看钱满不满足,所以要先判断电力资源满不满足,计算需要修建发电机需要的钱数(注意不能出现负的),矿产资源数和当前手里的钱数减去需要的钱数,剩下的再通过矿石精炼

AC代码:

#include<iostream>
#include<cmath>
using namespace std;

int main(){
	double T,w,m,E,D,c0,d,p,c1,e,sum1,sum2,nm;
	cin>>T;
	while(T--){
		cin>>w>>m>>E>>D>>c0>>d>>p>>c1>>e;
		sum1=w+m;
		nm=max(0.0,ceil((D+d-E)/e))*c1+c0;
		if(nm<=m){
			sum2=w*(1+p*0.01)+m-nm;
		}else{
			sum2=(w+m-nm)*(1+p*0.01);
		}
		printf("%.2lf\n",max(sum1,sum2));
	}
	return 0;
}

E 天空岛

优先队列的自定义不会写!!!!!仿函数啥的啊啊啊啊!!!带结构体的优先队列。。。

开始只考虑BFS,未考虑优先队列,所以总是想不出来这样写为什么会AC,之后才慢慢理解。。

思路:BFS+优先队列

先将第一个点加入队列,然后只要队列非空,取出一个点(因为是优先队列,所以取出的点为当前队列中w,即承重极限最大的),注意货物必须首先满足重量小于等于该单元格的承重极限,所以每次结果为队列中承重极限最大的,同时单独计算精灵分担的货物重量

AC代码:

#include<iostream>
#include<queue> 
#define int long long
using namespace std;

const int N=1005;
int w[N][N],val[N][N];
bool vis[N][N];
int dx[]{-1,1,0,0};
int dy[]{0,0,-1,1};
struct Node{
	int x;
	int y;
	int z;
};

struct cmp{
	bool operator()(Node a,Node b){
		return a.z<b.z;
	}
};

signed main(){
	int n,m,k,x,y,v,ans=0x3f3f3f3f,sum=0;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>w[i][j];
		}
	}
	cin>>k;
	for(int i=1;i<=k;i++){
		cin>>x>>y>>v;
		val[x][y]=v;
	}
	priority_queue<Node,vector<Node>,cmp> q;
	q.push({1,1,w[1][1]});
	while(!q.empty()){
		Node t=q.top();
		int a=t.x,b=t.y,c=t.z;
		q.pop();
		//防止队列中出现多次同一个元素!!!
		//某个在队列中间的元素被多次压入!! 
		if(vis[a][b]){
			continue;
		}
		vis[a][b]=1;
		ans=min(ans,c+sum);
		sum+=val[a][b];
		if(a==n&&b==m){
			break;
		}
		for(int i=0;i<4;i++){
			int nx=a+dx[i],ny=b+dy[i];
			if(vis[nx][ny]||nx<1||nx>n||ny<1||ny>m){
				continue;
			}
			q.push({nx,ny,w[nx][ny]});
		}
	}
	cout<<ans;
	return 0;
}

F Karashi的树 II 

思路:并查集+最短路

不会。。。。

G 114514国

思路:思维题,因为给一张45找回四张11相当于支付1,注意要求:0≤A,B,C,a,b,c≤10^{9}所以先支付45面值的,取余45即可,剩下的再使用一张45找回四张

AC代码:

#include<iostream>
using namespace std;

int main(){
	long long n,ans=0;
	cin>>n;
	ans+=n/45;
	n%=45;
	cout<<0<<' '<<ans+n<<' '<<0<<'\n';
	cout<<n*4<<' '<<0<<' '<<0<<'\n';
	return 0;
}

H 杰哥的激光炮

思路:也算是思维题吧。。。先求长和宽的最大公约数,答案即为:最大公约数*(长/最大公约数+宽/最大公约数-1)

AC代码:

#include<iostream>
#include<algorithm>
using namespace std;

int main(){
	int T,x,y;
	cin>>T;
	while(T--){
		cin>>x>>y;
		if(x==y){
			cout<<x<<'\n';
		}else{
			int t=__gcd(x,y);
			cout<<t*(x/t+y/t-1)<<'\n';
		}
	}
	return 0;
}

I TAROT I 

思路:容斥

不会。。。

L Karashi的电灯泡 

思路:大模拟。。。理解不了。。。。。

M 超时空传送!!偷袭

思路:水题。。。输出九个战斗力最大的和即可(不足九个输出和)

#include<iostream>
#include<algorithm>
using namespace std;

const int N=105;
int a[N];

bool cmp(int x,int y){
	return y<=x;
}
int main(){
	int n,ans=0;
	cin>>n;
	string s;
	for(int i=0;i<n;i++){
		cin>>s>>a[i];
	}
	sort(a,a+n,cmp);
	for(int i=0;i<9;i++){
		ans+=a[i];
	}
	cout<<ans;
}

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

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

相关文章

双平台GraalVM编译二进制程序

本文示例均采用Java11&#xff0c;GraalVM目前无法支持跨平台编译&#xff0c;比如&#xff0c;我通过Linux直接编译Windows可执行的exe&#xff0c;是不行的。 因此&#xff0c;需要掌握两种平台的GraalVM的安装、使用。 一、背景 1.1 为何GraalVM快&#xff1f; 常规Java…

永恒之塔私服 2.0包楼纳斯达克 网游的诺曼底登陆-

二战末期的诺曼底登陆&#xff0c;至今让人历历在目。盟军自此在西欧展开大规模进攻&#xff0c;加速了纳粹德国的崩溃。从某种意义上说&#xff0c;诺曼底登陆是整个二战一次生死攸关的转折点。《永恒之塔2.0&#xff1a;进军龙界》登上纳斯达克&#xff0c;也是一场激荡人心的…

基于自动编码器VAE的声音生成之音频预处理模块preprocess pipeline的实现和代码讲解

文章目录 概述Preprocessline模块实现以及代码讲解Loader模块Padder模块LogSpectrogramExtractor模块MinMaxNormaliser模块Saver模块PreprocessPipeLine模块知识补充property修饰词 总结 概述 这部分是将原来基于mnist手写数据集生成模型&#xff0c;一个用到基于FSDD音频数据…

蓝桥:前端开发笔面必刷题——Day2 数组(二)

文章目录 &#x1f4cb;前言&#x1f3af;删除有序数组中的重复项&#x1f4da;题目内容✅解答 &#x1f3af;移动零&#x1f4da;题目内容✅解答 &#x1f3af;长度最小的子数组&#x1f4da;题目内容✅解答 &#x1f3af;反转字符串数组&#x1f4da;题目内容✅解答 &#x1…

麒麟操作系统软件更新灾难连篇之二:QQ罢工

在解决了中文输入法消失的问题后&#xff0c;还没缓过气来&#xff0c;又发现QQ罢工了&#xff1a;双击电脑桌面上的QQ图标&#xff0c;没有显示QQ登录界面。 重启电脑再试&#xff0c;还是不显示QQ登录界面。 前不久腾讯正式宣布&#xff0c;QQ Linux 版 3.0 已在 QQ 官网上…

最好用的文本与文件查询软件AnyTXT Searcher与Listary简介

1. 工具简介 1.1 Listary简介 Listary是一个革命性的Windows搜索工具&#xff0c;借助 Listary软件&#xff0c;你可以快速搜索电脑文件、定位文件、执行智能命令、记录访问历史、快速切换目录、收藏常用项目等。 Listary为Windows传统低效的文件打开/保存对话框提供了便捷、…

Apache Tomcat AJP协议文件读取与包含

永远也不要忘记能够笑的坚强&#xff0c;就算受伤&#xff0c;我也从不彷徨。 0x01.漏洞情况分析 Tomcat是Apache软件基金会Jakarta 项目中的一个核心项目&#xff0c;作为目前比较流行的Web应用服务器&#xff0c;深受Java爱好者的喜爱&#xff0c;并得到了部分软件开发商的…

makefile 学习(2):C语言的编译及库文件的生成与链接

文章目录 1. 介绍2. C语言编译2.1 预处理2.2 生成汇编语言2.3 编译目标文件2.4 编译为可执行文件 3. .a静态库的编译与链接案例 4 .so 动态库的编译与链接 1. 介绍 编译C语言的相关后缀 .a 文件是一个静态库文件.c文件是c语言的源文件.h c语言的头文件.i 是预处理文件.o 目标文…

两个用字符串表示的大数字的和

文章目录 题目详情Java实现分析Java 怎么获取到字符串中的对应位置的数字值Java完整代码测试验证 python实现python 怎么获取到字符串中的对应位置的数字值python完整代码 总结 这是遇到的一道快手数仓岗位的面试题目&#xff0c;题目大意如下&#xff1a; 题目详情 现在有两个…

【树莓派4B安装18.04桌面+远程SSH】

【树莓派4B安装18.04桌面远程SSH】 1. 前言2 .树莓派安装ubuntu18.04 系统2.1 下载ubuntu Server 18.04 的镜像包2.2 镜像烧录2.3 高级设置2.4 配置WiFi2.5 ssh文件配置2.6 Pi 4B启动文件 3. 安装finalshell3.1 windows版下载3.2 windows版安装3.3 SSH连接 4. 安装ubuntu桌面4.…

【野火启明_瑞萨RA6M5】梦的开始 ---- 点灯(寄存器)

文章目录 一、IOPORT简介二、IOPORT的框图分析三、IOPORT的寄存器描述1. 端口引脚功能选择寄存器2. 端口输出数据寄存器3. 端口输入数据寄存器4. 端口输出置位/复位寄存器5. 写保护寄存器 四、点亮LED灯&#xff08;寄存器&#xff09; 从本文开始&#xff0c;我将以瑞萨RA系列…

【夜莺(Flashcat)V6监控】3.链路追踪

链路追踪 介绍 链路追踪是分布式系统下的一个概念&#xff0c;它的目的就是要解决上面所提出的问题&#xff0c;也就是将一次分布式请求还原成调用链路&#xff0c;将一次分布式请求的调用情况集中展示&#xff0c;比如&#xff0c;各个服务节点上的耗时、请求具体到达哪台机…

Java 把一个 List 转换为字符串

在本快速指南中&#xff0c;我们将会解释如何在 Java 把一个 List 转换为 String 字符串。 这个在某些特定的场合可能比较有用&#xff0c;比如说在控制台中输出 List 中的内容&#xff0c;转换为可以人为阅读的内容来进行调试。 使用 List 中标准的 toString() 方法 一个最简…

(2)数码管

LED数码管:数码管是一种简单、廉价的显示器&#xff0c;是由多个发光二极管封装在一起组成"8"字器件 51单片机是共阴极连接 74HC245这个芯片有什么作用呢&#xff1f;解&#xff1a;这个芯片被称之为双向数据缓冲器这个芯片的作用&#xff0c;用来进行数据缓冲(提高驱…

【网络编程】详解UDP/TCP套接字的创建流程

目录 一、网络编程套接字 1、一些概念 1.1源IP地址和目的IP地址 1.2端口号port 1.3TCP和UDP的性质 1.4网络字节序、IP地址类型转换、数据接收与发送函数、popen函数 2、UDP套接字 2.1UDP服务器创建流程 2.2UDP客户端创建流程 2.3创建socket套接字 2.4绑定套接字对应…

快速找出PATH 路径下重复的命令程序文件

RT&#xff0c;就是想找出命名冲突的可执行文件。日积月累的&#xff0c;PATH 环境变量里乱七八糟堆了一堆东西&#xff0c;很可能想叫一个命令出来&#xff0c;结果实际执行的是另一个地方的程序。 Python 脚本 import ospath os.environ[PATH] folders path.split(;) fil…

理解HttpSession

什么是session 在我刚刚从事后端开发的时候&#xff0c;有一个问题困扰了我很久。 就有个玩意叫session。 PostMapping("login")public Result login(RequestParam("id") String id,RequestParam("password") String password, HttpSession se…

哈希及模拟实现

文章目录 哈希1. 哈希相关概念1.1 哈希概念1.2 哈希冲突1.3 哈希函数1.4 哈希冲突解决1.4.1 闭散列/开放定址法(1)线性探测(2) 二次探测 1.4.2 开散列/哈希桶 2. 开放定址法的实现2.1 结构2.2 插入Insert2.2.1 传统写法2.2.2 现代写法 2.3 查找Find2.4 删除Erase2.5 整体代码 3…

springcloud基于web的智慧养老平台

系统分析 可行性分析 在开发系统之前要进行系统可行性分析&#xff0c;目的是在用最简单的方法去解决最大的问题&#xff0c;程序一旦开发出来满足了用户的需要&#xff0c;所带来的利益也很多。下面我们将从技术、操作、经济等方面来选择这个系统最终是否开发。 1、技术可行…

一图看懂 dateutil 模块:Python datetime 模块的扩展,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 dateutil 模块&#xff1a;Python datetime 模块的扩展&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模块图&#x1f9ca;类关系…