CSDN第九次竞赛题解与总结

news2025/4/7 7:40:10

CSDN第九次竞赛题解与总结

  • 前言
  • T1小艺读书
    • 题意
    • 分析
  • T2鬼画符门之宗门大比
    • 题意
    • 分析
    • 代码
    • 别的方法
  • T3硬币划分
    • 题意
    • 分析
      • 状态
      • 转移方程
      • 初始值
    • 代码
  • T4饿龙咆哮-逃离城堡
    • 题意
    • 分析
      • 坑点
    • 代码
  • 写在最后

前言

2022/11/12 我有幸参加了csdn第九次竞赛,终于拿了次满分,进了次前5,特写此题解

本次题目还是偏简单的,我不到 30 m i n 30min 30min就完成了 A K AK AK本以为第一稳到手,结果发现有三个比我快
在这里插入图片描述

接下来是题解

T1小艺读书

题意

书是人类进步的阶梯。 小艺每周因为工作的原因会选择性的每天多读几页或者少读几页。 小艺想知道一本n页的书她会在周几读完

分析

这是一道水题,由于n很小,直接模拟一遍就能过

#include<bits/stdc++.h>
using namespace std;
int d[10];
int main(){
	int n; cin >> n;
	for(int i=1;i<=7;i++)
		cin >> d[i];
	for(int i=1;;i++){
		if(i == 8) i = 1;
		n-= d[i];
		if(n <= 0){
			cout << i;
			break;
		}
	}
	return 0;
}

T2鬼画符门之宗门大比

题意

给定整数序列A。求在整数序列A中连续权值最大的子序列的权值。

分析

这是一道经典的题,有很多种方法,我用的是最快的方法-------贪心,
贪心策略如下:

  • 用一个变量 a n s ans ans记录过程中的值,用 m a x n maxn maxn记录最大值
  • 1 1 1 n n n遍历整个序列,
    比如说遍历到第 i i i个数,把 a n s ans ans加上 a i a_i ai,并判断此时的 a n s ans ans是不是最大的,如果是, m a x n = a n s maxn = ans maxn=ans,即 m a x n = max ⁡ ( m a x n , a n s ) maxn = \max({maxn},{ans}) maxn=max(maxn,ans)
    此时如果 a n s < 0 ans<0 ans<0,那么选完这个数一定不是最优的,令 a n s = 0 ans = 0 ans=0
  • 最后输出即可

代码

#include<bits/stdc++.h>
using namespace std;
int n;
int a[1100];
int main(){
	cin >> n;
	for(int i=1;i<=n;i++)
		cin >> a[i];
	int ans = 0 , maxn = -99999999;
	for(int i=1;i<=n;i++){
		ans += a[i];
		maxn = max(maxn,ans);
		if(ans < 0) ans = 0;
	}
	cout << maxn;
	return 0;
}

时间复杂度 O ( n ) O(n) O(n)

别的方法

当然本题还有别的方法,这里介绍一下前缀和的方法
我们先预处理 a a a数组的前缀和 s u m sum sum

for(int i=1;i<=n;i++)
	sum[i] = sum[i-1]+a[i];

那么对于序列中 l l l r r r区间的子串,这个区间的子串和为
s u m r − s u m l − 1 sum_r -sum_{l-1} sumrsuml1
那么我们可以枚举每一个子串,用前缀和 O ( 1 ) O(1) O(1)算出这个子串和,更新最大值即可

for(int r=1;r<=n;r++)
	for(int l=1;l<=r;l++)
		maxn = max(maxn,sum[r]-sum[l-1]);

总时间复杂度 O ( n 2 ) O(n^2) O(n2),足以通过此题

当然因为 n ≤ 1000 n \le 1000 n1000(我记得好像是),十分小,只要测评机够快,不用前缀和直接把每个子串和算出来也能过,时间复杂度 O ( n 3 ) O(n^3) O(n3),但实际上因为区间长短不同,实际时间远小于这个值,通过本题应该没问题,感兴趣的读者可以试试

T3硬币划分

题意

有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱(n<=100000),有多少中组合可以组成n分钱?

分析

n很大,答案也很大 (毕竟要对1e9+7取模),显然是一道动态规划题

容易想到

状态

f i f_i fi表示组成 i i i分钱组合数

转移方程

显然,凑成 i i i元钱,可以用

i i i - 1 1 1分钱 + 1 1 1分钱
i i i - 2 2 2分钱 + 2 2 2分钱
i i i - 5 5 5分钱 + 5 5 5分钱
i i i - 10 10 10分钱 + 10 10 10分钱

既然我们从小到大遍历, i − 1 , i − 2 , i − 5 , i − 10 i-1,i-2,i-5,i-10 i1,i2,i5,i10的组合数显然是已知的,
那么
f i = f i − 1 + f i − 2 + f i − 5 + f i − 10 f_i=f_{i-1}+f_{i-2}+f_{i-5}+f_{i-10} fi=fi1+fi2+fi5+fi10
当然为了避免数组越界,我们可以这样写

for(int i=1;i<=n;i++)
	f[i] = (f[i]+f[i-1])%mod;
for(int i=2;i<=n;i++)
	f[i] = (f[i]+f[i-2])%mod;
for(int i=5;i<=n;i++)
	f[i] = (f[i]+f[i-5])%mod;
for(int i=10;i<=n;i++)
	f[i] = (f[i]+f[i-10])%mod;

当然也可以

for(int i=1;i<=n;i++){
	if(i>=1) f[i] = (f[i]+f[i-1])%mod;
	if(i>=2) f[i] = (f[i]+f[i-2])%mod;
	if(i>=5) f[i] = (f[i]+f[i-5])%mod;
	if(i>=10) f[i] = (f[i]+f[i-10])%mod;
}

不过写那么多 i f if if,常数较大,所以第一种方法更快 (虽然很小,差不了那零点零几秒)

初始值

f 0 = 1 f_0 = 1 f0=1
或者也可以 f 1 = f 2 = f 5 = f 10 = 1 f_1 = f_2=f_5=f_{10}=1 f1=f2=f5=f10=1,然后循环从 2 , 3 , 6 , 11 2,3,6,11 2,3,6,11开始

代码

#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
int n;
int f[110000];
int main(){
	cin >> n;
	f[0] = 1;
	for(int i=1;i<=n;i++)
		f[i] = (f[i]+f[i-1])%mod;
	for(int i=2;i<=n;i++)
		f[i] = (f[i]+f[i-2])%mod;
	for(int i=5;i<=n;i++)
		f[i] = (f[i]+f[i-5])%mod;
	for(int i=10;i<=n;i++)
		f[i] = (f[i]+f[i-10])%mod;
	cout << f[n];
	return 0;
}

T4饿龙咆哮-逃离城堡

题意

小艺酱误入龙族结界,被恶龙带回城堡,小艺酱决定逃离城堡,逃离龙族结界.。
总路程为c, 小艺酱的速度是vp,饿龙速度为vd。饿龙会在t小时后发现小艺酱出逃。
小艺酱担心自己跑不出去,准备了好多珍宝。 每当饿龙追上自己的时候小艺酱就会丢下一个珍宝,饿龙捡到珍宝会返回自
己的城堡进行研究,研究f小时后,再出城堡追赶小艺。
小艺想知道自己至少需要丢多少珍宝才能让自己安全逃出结界。

分析

这是一道很简单的数学题,小学我们就学过追及问题
t = 路 程 差 / 速 度 差 t = 路程差/速度差 t=/
我们只需算出会被追上几次,
每追上一次丢一次珍宝,然后计算饿龙回去并研究珍宝的时间,
然后再继续追

坑点

因为计算时时间不一定是整数,所以用 d o u b l e double double等小数类型储存,还有如果饿龙的速度比小艺酱的慢,直接特判输出 0 0 0,不过我不知道官方数据中有没有这种数据

代码

#include<bits/stdc++.h>
using namespace std;
double vp,vd,t,f,c;
int main(){
	cin >> vp >> vd >> t >> f >> c;
	double s1 = vp*t , s2 = 0;
	int ans = 0;
	if(vp >= vd){//特判
		cout << 0;
		return 0;
	}
	while(s1 < c){
		t += (s1-s2)*1.0/(vd-vp);//计算追及时间
		s1 = s2 = t*vp;//现在路程
		if(s1 >= c) break;//一定要写前面,不然样例二过不去
		ans++;
		t += s2/vd+f;//饿龙回去研究后的时间
		s1 = vp*t;//现在路程
		s2 = 0;
	}
	cout << ans;
	return 0;
}

简化版

#include<bits/stdc++.h>
using namespace std;
double vp,vd,t,f,c;
int main(){
	cin >> vp >> vd >> t >> f >> c;
	double s = vp*t;
	int ans = 0;
	if(vp < vd)
		while(s < c){
			t += s*1.0/(vd-vp);
			s = t*vp;
			if(s >= c) break;
			ans++;
			t += s/vd+f;
		}
	cout << ans;
	return 0;
}

写在最后

本次竞赛难度不高,看最后有15个人满分
希望官方出题增加对数据结构和图论以及一些重要算法的考察

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

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

相关文章

Vuex④(多组件共享数据、Vuex模块化+namespace)

文章目录多组件共享数据代码实现Vuex模块化总结多组件共享数据 我们现在想实现这种情况&#xff1a; Person组件的总人数就是Person中列表的长度 br上的是Count组件&#xff0c;br下的是Person组件。 我们通过vuex中的state实现一些数据的多组件共享&#xff1a; 代码实现 …

第二章STP应用配置

目录 一 生成树 二 生成树算法 三 STP是什么 四 BPDU是什么 五 BPDU的概念 六 生成树基本配置 一 生成树 生成树算法的网桥协议STP(Spanning Tree Protocol) 它通过生成生成树保证一个已知的网桥在网络拓扑中沿一个环动态工作。网桥与其他网桥交换BPDU消息来监测环路&#xf…

使用 hugo oss 搭建个人博客网站

系列文章目录 文章目录系列文章目录前言一、下载hugo二、oss三、域名四、创建博客上传五、发布&#xff0c;上传文章前言 本文主要详解如何用最低的成本搭建个人博客网站 原本我是直接用的github搭建的博客网站&#xff0c;因为免费&#xff0c;但由于github访问很不稳定&…

Python——正则表达式的应用

文章目录前言正则表达式方法re.search方法group方法re.match方法re.findall方法re.finditer方法re.split方法re.sub方法正则表达式的应用前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 正则表达式是字符串处理的有力工具和技术。 使用正在表达式的目的…

多态(polymorphic)

目录 1. 多态的基本介绍 2. 多态实现条件 3. 重写 重写的介绍&#xff1a; 【重写和重载的区别】 动、静态绑定机制 5 向上转型和向下转型 向上转型 向上转型的特点&#xff08;总结&#xff09;&#xff1a; 向下转型 多态的优缺点 多态是Java三大基本特征中最抽象…

【数据结构初阶】数组栈和链式队列的实现

努力真的要贯穿人的一生吗&#xff1f; 你能活成你想要的样子吗&#xff1f; 真的不知道&#xff01; 文章目录一、栈的概念及结构二、栈的实现&#xff08;动态数组栈&#xff09;2.1 挑选实现栈的结构2.2 栈结构的定义2.3 初始化栈销毁栈2.4 入栈出栈2.5 判空取栈顶元素栈元…

Android Studio App开发之循环试图RecyclerView,布局管理器LayoutManager、动态更新循环视图讲解及实战(附源码)

运行有问题或需要全部源码请点赞关注收藏后评论区留言~~~ 一、循环视图RecyclerView 尽管ListView和GridView分别实现了多行单列和多行多列的列表&#xff0c;使用也很简单&#xff0c;可是它们缺少变化&#xff0c;风格也比较呆板&#xff0c;为此Android推出了更灵活多变的循…

CAS:1347750-20-2,NH2-PEG-SH,Amine-PEG-Thiol,氨基-聚乙二醇-巯基供应

1、名称 英文&#xff1a;NH2-PEG-SH&#xff0c;Amine-PEG-Thiol 中文&#xff1a;氨基-聚乙二醇-巯基 2、CAS编号&#xff1a;1347750-20-2 3、所属分类&#xff1a; Amine PEG Thiol PEG 4、分子量&#xff1a;可定制&#xff0c;5000、氨基-聚乙二醇 1000-巯基、1000、…

云计算———虚拟化技术镜像的构建及Harbor的使用(三)

一、容器管理 1.1容器命令 docker ps &#xff1a;查看正在运行的容器 &#xff0c;已经关闭的不能查看 docker ps -a&#xff08;显示所有容器&#xff09; 可以 docker -f rm MyWordPress&#xff1a;-f 强制删除容器 [rootlocalhost ~]# docker ps -a -q #显示所有容器只…

java项目-第127期SpringBoot+vue的智慧养老手表管理系统-java毕业设计_计算机毕业设计

java项目-第127期SpringBootvue的智慧养老手表管理系统-java毕业设计_计算机毕业设计 【源码请到资源专栏下载】 本系统主要是通过智能手表监控老人的日常生活&#xff0c;比如血压、心率、睡眠步数、以及摔倒情况。 共分为两个角色&#xff1a;家长&#xff0c;养老院管理员&a…

有含金量的AI证书

文章目录证书展示企业认证介绍华为认证人工智能工程师课程内容我的总结和资料证书展示 这是华为云的AI认证&#xff1a; 这是阿里云的大数据认证&#xff1a; 企业认证介绍 一般的企业是办不起来认证的&#xff0c;大家肯定都知道的。本文主要介绍华为云的认证&#xff0c…

经典动态规划:最长递增子序列

力扣第300题&#xff1a;[最长递增子序列]&#xff0c;这道题是非常经典的动态规划和二分查找的题目&#xff0c;我们先看dp: 第一种解法&#xff1a;动态规划 我们先看题目的示例1&#xff1a; 输入&#xff1a;nums [10,9,2,5,3,7,101,18] 输出&#xff1a;4 解释&#x…

【MySQL】MySQL数据库锁使用与InnoDB加锁的原理解析(MySQL专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

【Spring】Bean 的作用域和生命周期

文章目录1. Bean 的作用域1.1 通过一个案例来看 Bean 作用域的问题1.2 作用域的定义1.3 Spring Bean 支持的作用域&#xff08;未介绍完全&#xff09;1.4 修改 Bean 的作用域1.5 Bean 执行流程2. Bean 的生命周期2.1 Bean 的生命周期分为以下 5 大部分2.1.1 实例化 Bean&#…

【代码精读】在optee中注册一个中断

快速链接: . 👉👉👉 【代码精读】–Kernel/ATF/optee等-目录👈👈👈 付费专栏-付费课程 【购买须知】:本专栏的视频介绍-----视频👈👈👈概要: 在optee os总如何注册一个中断? 有没有类似于request_irq的程序? 注册了该中断后,是哪里将该中断配置成Secure…

保边滤波之基于测地距离的滤波与局部拉普拉斯滤波

&#xff08;1&#xff09;基于测地距离的滤波 给定图像I及其Hard Mask M&#xff0c;其中M(x)∈{0,1} &#xff0c;M(x)0表示x属于前景&#xff0c;M(x)1表示x属于背景&#xff0c;图像中某点x到前面Hard Mask的测地距离为 &#xff1f;&#xff1f;&#xff1f;d(a,b)表示…

机器学习中的数学原理——最小二乘法

这几天在刷B站的时候&#xff0c;有个深度学习的博主推荐了一本机器学习的书——《白话机器学习的数学》&#xff0c;抱着浅看一下的态度&#xff0c;我花3个大洋从淘宝上找到了这本书的电子版。看了两天我直接吹爆&#xff01;&#xff01;&#xff01;所以这个专栏就分享一下…

《Linux驱动:DMA直接内存访问》

目录一、前言二、DMA传输主体三、S3c2440上的DMA3.1 DMA请求源3.2 DMA状态机3.3 DMA请求模式3.4 DMA服务模式3.5 DMA传输模式3.6 DMA读写数据大小3.7 DMA寄存器3.7.1 DCON寄存器其他几个重要位四、使用DMA4.1 软件触发DMA4.2 硬件源触发DMA一、前言 DMA(Direct Memory Aaccess…

SpringMVC框架中的拦截器

目录 1. 拦截器接口的介绍 2. 拦截器接口中方法的详细介绍 3. 配置拦截器的步骤 4. 多个拦截器的的执行情况 5. 拦截器与过滤器的区别 1. 拦截器接口的介绍 2. 拦截器接口中方法的详细介绍 public class MyInterceptor implements HandlerInterceptor {Overridepublic bo…

Elasticsearch学习--script

一、概念 es1.4-5.0&#xff0c;默认脚本语言是Grovvy es5.0&#xff0c;默认脚本语言是painless 二、简单使用 将price减一 # 将id1的price减一 POST goods/_update/1 {"script": {"source": "ctx._source.price - 1"} }# 简写 POST goods/_…