天梯算法Day1整理

news2024/11/27 10:44:20

Nanami and Arithmetic Sequence

题面

思路

炸鱼题

只有n=1的时候,只有一个等差数列;

其余时候,都是都有无数个等差数列。

代码

#include <iostream>
using namespace std;

int  main() {
	int t, n;
	cin >> t;
	while (t--) {
		cin >> n;
		if (n == 1)
			cout << "1\n";
		else
			cout << "-1\n";
	}
	return 0;
}

珠宝价值

题面

思路

浓缩一下,题目是在求数组的连续子数组最大和。 

即一个很经典的问题——最大子段和

这题在洛谷上也有,链接在下,感兴趣的朋友可以一试。(注意数据范围的区别)

最大子段和 - 洛谷
 

本题采用动态规划来解

设dp[i]表示[0,i]闭区间以i为右边界的最大子段和(我们并不关注左边界的位置)

最开始有dp[0] = v[0]

由[0,i]推[0,i+1]时,如果dp[i]+v[i+1]>dp[i],则说明加上该值后总和变大,所以需dp[i+1]=dp[i]+v[i+1]。否则,从头开始计和,dp[i+1]=v[i+1]。

最后找到dp数组中的最大值即可

代码

#include <iostream>
using namespace std;

#define MAXN 10005

int v[MAXN];
int dp[MAXN];

int main() {
	int n;
	cin >> n;
	int i = 0;
	while (n--) {
		cin >> v[i];
		i++;
	}
	dp[0] = v[0];
	for (int j = 0; j < i - 1; j++) {
		if (dp[j] + v[j + 1] > v[j + 1]) {//条件里也可以是dp[j]>0
			dp[j + 1] = dp[j] + v[j + 1];
		} else {
			dp[j + 1] = v[j + 1];
		}
	}

	int maxv = -1e9;

	for (int j = 0; j < i; j++) {
		if (dp[j] > maxv)
			maxv = dp[j];
	}
	cout << maxv << endl;
	return 0;
}

Nanami and Toys Buying Problem

题面

思路

每个a[i]最多只被取一次,最多只有一个b[i]会被取2次以上。

枚举被多次取的玩具,设当前取的为b[i],那么对于行a来说,a[j]>b[i]时才有取的必要,否则不用取。(当j<i时,需要先取出a[i]才能取b[i])

可以按a的大小排序,枚举b,结合二分查找得到j。

代码

先放一份能反映基础思路,但TLE了的代码

#include <iostream>
using namespace std;

const int  maxn  = 2e5 + 5;

int a[maxn], b[maxn];

int main() {
	int t;
	cin >> t;
	while (t--) {
		int n, k;
		cin >> n >> k;
		int k2 = k;
		long long ans = 0;
		for (int i = 0; i < n; i++)
			cin >> a[i];
		for (int i = 0; i < n; i++)
			cin >> b[i];
		int i, j;
		for (i = 0; i < n - 1; i++)
			for (j = 0; j < n - 1 - i; j++)
				if (a[j] < a[j + 1]) {
					swap(a[j], a[j + 1]);
					swap(b[j], b[j + 1]);
				}


		for (int i = 0; i < n; i++) {
			k = k2;
			long long currentans = 0;
			if (k >= 1) {
				currentans += a[i];
				k--;
			}
			int maxj = -1;
			for (int j = 0; j < n; j++) {
				if (j != i) {
					if (a[j] > b[i] && k > 0) {
						currentans += a[j];
						k--;
						maxj = j;
					}
				} else
					continue;
			}
			if (k > 0)
				currentans += 1ll * k * b[i];
			if (currentans > ans)
				ans = currentans;
		}
		cout << ans << endl;
	}

	return 0;
}

再放一份优化过的代码,使用二分+前缀和

#include <iostream>
#include <algorithm>

using namespace std;

const int maxn = 2e5 + 5;

int T, n, k;

int a[maxn], b[maxn], s[maxn];

long long preSum[maxn];

long long spe1()
{
	sort(a + 1, a + n + 1);
	return a[n];
}

long long ans, sum;

int main()
{
	cin >> T;
	for (int rt = 1; rt <= T; rt++)
	{
		ans = 0;
		cin >> n >> k;
		for (int i = 1; i <= n; i++) {cin >> a[i]; s[i] = a[i];}
		for (int i = 1; i <= n; i++) cin >> b[i];
		if (k == 0)
		{
			cout << 0 << '\n';
			continue;
		}
		if (k == 1) 
		{
			cout << spe1() << '\n';
			continue;
		}
		sort(s + 1, s + n + 1);
		for (int i = 1; i <= n; i++) preSum[i] = preSum[i - 1] + s[i];
		int res = k - 1;
		for (int i = 1; i <= n; i++) 
		{
			sum = a[i];
			//cout << sum << '\n';
			int num = n + 1 - (upper_bound(s + 1, s + n + 1, b[i]) - s);
			if (a[i] <= b[i]) 
			{
				if (res <= num) sum += preSum[n] - preSum[n - res];
				else sum += preSum[n] - preSum[n - num] + 1ll * (res - num) * b[i];
			} else {
				
				if (res < num - 1) 
				{
					int lowPos = lower_bound(s + 1, s + n + 1, a[i]) - s;
					if (a[i] >= s[n - res + 1] && lowPos >= n - res + 1)
					{
						sum += preSum[n] - preSum[n - res - 1] - a[i];
					}
					else {
						sum += preSum[n] - preSum[n - res];
					}
				}
				else sum += preSum[n] - preSum[n - num] - a[i] + 1ll * (res - (num - 1)) * b[i];
			}
			ans = max(ans, sum);
			//cout << sum << '\n' << '\n';
		}
		cout << ans << '\n';
	}
	return 0;
}

类似题目(某厂面试题)

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

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

相关文章

如何使用淘宝客?

1.定义&#xff1a;是一种按成交计费的推广工具&#xff0c;由淘宝客帮助商家推广商品&#xff0c;买家通过推广链接进入完成交易后&#xff0c;商家按照设置佣金支付给淘宝客费用。 2.优势&#xff1a; &#xff08;1&#xff09;展示、点击全免费。 &#xff08;2&#xf…

防御保护---防火墙双机热备直路部署(上下三层接口)

防御保护---防火墙双机热备直路部署&#xff08;上下三层接口&#xff09; 一、根据网段划分配置IP地址和安全区域二、配置动态路由OSPF三、配置双机热备四、测试&#xff1a;4.1 测试一&#xff1a;查看状态和路由器路由表&#xff08;双机热备&#xff09;前后对比4.2 测试二…

Ant-design-vue(v4.1.1) 创建并初始化前端项目

前提&#xff1a; 先安装 node.js (安装node.js后&#xff0c;在安装目录下的node-modles下会有一个 npm) 直接官网下载&#xff0c;直接点击安装&#xff0c;不勾选tools&#xff0c;选非c盘&#xff08;之后会用npm来下载东西&#xff09; 验证安装是否成功 cmd : node -v …

【Vue3 + Vite】Vite搭建 项目解构 Vue快速学习 第一期

文章目录 Vue3介绍Vue3通过Vite实现工程化&#xff1a;一、Vite创建Vue3工程化项目1.1 ViteVue3项目的创建、启动、停止1.2 ViteVue3项目的目录结构 二、ViteVue3 项目组件(SFC入门)2.1 什么是VUE的组件 ?2.2 什么是.vue文件 ?2.3 工程化vue项目如何组织这些组件? 三、ViteV…

易优CMS采集插件使用教程

本易优CMS采集教程说明如何使用易优CMS采集插件&#xff0c;批量获取互联网上的文章数据&#xff0c;并自动更新到易优cms&#xff08;eyoucms&#xff09;网站&#xff0c;快速丰富网站的内容。 目录 1. 下载并安装易优CMS采集插件 2. 对接网页文章采集工具 3. 采集数据发…

12nm工艺,2.5GHz频率,低功耗Cortex-A72处理器培训

“ 12nm工艺&#xff0c;2.5GHz频率&#xff0c;低功耗Cortex-A72处理器培训” 本项目是真实项目实战培训&#xff0c;低功耗UPF设计&#xff0c;后端参数如下&#xff1a; 工艺&#xff1a;12nm 频率&#xff1a;2.5GHz 资源&#xff1a;2000_0000 instances 为了满足更多…

Git系列---标签管理

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.理解标签2.创建标签…

Python之数据可视化(地图)

目录 一 基础地图应用 二 全国疫情图 一 数据准备 二 数据处理 二 湖北省疫情图 一 数据准备 二 数据处理 一 基础地图应用 导入map地图对象 from pyecharts.charts import Map map Map() 写入数据 data [("北京市",100),("上海市"…

【代码随想录】LC 349. 两个数组的交集

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记&#xff0c;如有侵权&#xff0c;立即删除。 一、题目 1、原题链接 349. 两个数组的交集 2、题目描述 二、解题报…

使用Spring AOP做接口权限校验和日志记录

文章目录 一、AOP 介绍1.1 AOP 应用场景1.2 AOP 中的注解 二、权限校验2.1 定义权限注解2.2 定义切面类2.3 权限验证服务2.4 织入切点2.5 测试 三、日志记录3.1 日志切面类3.2 异常统一处理 四、AOP 底层原理4.1 todo 一、AOP 介绍 AOP&#xff1a; 翻译为面向切面编程&#x…

“/“应用程序中的服务器错误.

<div id"m_category" class" round2"><h3>管理中心</h3><div class"con"> <p><a href"categorymanager.aspx">类别管理</a></p> /*我是这段代码出现问题*/ <p><a …

深入理解Java中的ForkJoin框架原理

在现代多核处理器的时代&#xff0c;有效地利用并行计算可以极大地提高程序的性能。Java中的ForkJoin框架是Java 7引入的一个并行计算框架&#xff0c;它提供了一种简单而高效的方式来利用多核处理器。在本文中&#xff0c;我们将深入探讨ForkJoin框架的原理和工作方式。 一、什…

MySQL进阶45讲【7】行锁

1 前言 在上一篇文章中&#xff0c;介绍了MySQL的全局锁和表级锁&#xff0c;今天我们就来讲讲MySQL的行锁。 MySQL的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁&#xff0c;比如MyISAM引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁&…

vue2父组件向子组件传值时,子组件同时接收多个数据类型,控制台报警的问题

最近项目遇到一个问题,就是我的父组件向子组件(公共组件)传值时,子组件同时接收多个数据类型,控制台报警的问题,如下图,子组件明明写了可同时接收字符串,整型和布尔值,但控制台依旧报警: 仔细检查父组件,发现父组件是这样写的: <common-tabletooltip :content=…

数据可视化工具选择指南:六款主流工具的综合评测

随着大数据时代的来临&#xff0c;数据可视化已成为各行业不可或缺的工具。本文将为您介绍市面上六款主流数据可视化工具&#xff0c;包括山海鲸可视化、Echarts、D3.js、Tableau、Power BI和Funnel.io&#xff0c;帮助您更好地了解并选择适合您的工具。 山海鲸可视化 山海鲸…

STM32学习笔记(六) —— 配置系统时钟

1.时钟树 从图中可以看出一共有四个时钟来源&#xff0c;分别是内部高速时钟、内部低速时钟、外部高速时钟接口、外部低速时钟接口&#xff0c;这些时钟源经过内部的倍频分频后提供给各外设使用。其中HSE与LSE需要由外部提供&#xff0c;可以是外部时钟直接输入&#xff0c;也可…

【八大排序】直接插入排序 | 希尔排序 + 图文详解!!

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构冒险记 ✅C语言进阶之路 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 一、排序的概念二、直接插入排序2.1 基本思想2.2 适用说明2.3 过程图示2.4 代码实现2.…

《Pandas 简易速速上手小册》第7章:Pandas 文本和类别数据处理(2024 最新版)

文章目录 7.1 文本数据的基本操作7.1.1 基础知识7.1.2 重点案例&#xff1a;客户反馈分析7.1.3 拓展案例一&#xff1a;产品评论的关键词提取7.1.4 拓展案例二&#xff1a;日志文件中的日期提取 7.2 使用正则表达式处理文本7.2.1 基础知识7.2.2 重点案例&#xff1a;日志文件错…

Python学习03 -- 函数相关内容

1.def --- 这个是定义函数的关键字 \n --- 这个在print()函数中是换行符号 1.注意是x, 加个空格之后再y 1.形式参数数量是不受限制的&#xff08;参数间用&#xff0c;隔开&#xff09;&#xff0c;传实参给形参的时候要一一对应 返回值 --- 函数返还的结果捏 1.写None的时…

vue-head 插件设置浏览器顶部 favicon 图标 - 动态管理 html 文档头部标签内容

目录 需求实现11. 安装插件2. 项目内 main.js 引入3. vue页面使用 实现2其他 需求 vue项目中浏览器页面顶部图标可配置 实现1 使用 vue-head 插件实现 vue-head 插件可实现 html 文档中 head 标签中的内容动态配置&#xff08;npm 官网 vue-head 插件&#xff09; 1. 安装插件 …