试题 算法训练 礼物

资源限制

内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

问题描述

  JiaoShou在爱琳大陆的旅行完毕,即将回家,为了纪念这次旅行,他决定带回一些礼物给好朋友。
  在走出了怪物森林以后,JiaoShou看到了排成一排的N个石子。
  这些石子很漂亮,JiaoShou决定以此为礼物。
  但是这N个石子被施加了一种特殊的魔法。
  如果要取走石子,必须按照以下的规则去取。
  每次必须取连续的2*K个石子,并且满足前K个石子的重量和小于等于S,后K个石子的重量和小于等于S。
  由于时间紧迫,Jiaoshou只能取一次。
  现在JiaoShou找到了聪明的你,问他最多可以带走多少个石子。

输入格式

  第一行两个整数N、S。
  第二行N个整数,用空格隔开,表示每个石子的重量。

输出格式

  第一行输出一个数表示JiaoShou最多能取走多少个石子。

样列输入

  8 3
  1 1 1 1 1 1 1 1

样列输出

  6

样列解释

  任意选择连续的6个1即可。

数据规模和约定

  对于20%的数据:N<=1000
  对于70%的数据:N<=100,000
  对于100%的数据:N<=1000,000,S<=10^12,每个石子的重量小于等于10^9,且非负

思路:

这道题的数据量很多而且数据很大,两层循环就得爆掉了,所以得考虑优化到线性或者log才有可能成功,我本来的想法是用前缀和,这样可以减少区间加的运算,但是到后边求石子数时因为区间长度不定,所以还是要套上两层循环,于是爆了。

在网上搜索然后发现一个网友的思路很好,他设置了两个数组,一个l[],一个r[],其中l[i]为以i位置为基准,向前边能扩展的最多石子数,如1,2,3时,s=3时,显然1+2=3,则l[1](从0开始)为2,因为可扩展0,1位置的石子。同理,r[i]是以i位置为基准,向后边能扩展的最多石子数。利用双指针可以将求l和r数组的时间复杂度优化成O(n)。

最后一步,一层循环遍历,只要求出最大的2*min(l[i],r[i+1])即为所求,很好理解,左边与右边同时扩展,扩展的数的最小值才是整体的值。r的位置为i+1,不能为i,为i的话与l[i]就有数字重叠了,不合题意。

不过看题目,好像用二分也可以试试,但得加上前缀和优化。就是设置边界l,r,以mid位置为基准,前缀和相减判断l到mid和mid+1到r是否符合标准,不符合就将边界减小。具体我也没细想,可以参考网友的想法:http://t.csdnimg.cn/zvDuR

代码如下:

标准代码:

#include<bits/stdc++.h>
using namespace std;
long long a[1000010];
int l[1000010],r[1000010];
int main(){long long n,s;
ios::sync_with_stdio(false);//取消输入输出缓存,加快cin、cout运算时间,这是个极大的优化cin>>n>>s;for(int i=0;i<n;i++)cin>>a[i];//求离左边最符合的石子数 long long sum1=a[0];for(int i=0,j=0;j<n;){if(sum1>s){sum1-=a[i];i++;}else if(sum1<=s){l[j]=j-i+1;j++;sum1+=a[j];}}//求离右边最符合的石子数 long long sum2=a[n-1];for(int i=n-1,j=n-1;j>=0;){if(sum2>s){sum2-=a[i];i--;}else if(sum2<=s){r[j]=i-j+1;j--;sum2+=a[j];}}int maxNum=0;for(int i=0;i<n-1;i++){maxNum=max(maxNum,2*min(l[i],r[i+1]));}cout<<maxNum;return 0;
}

第一次做时的前缀和方法代码(有错):

#include<bits/stdc++.h>
using namespace std;
long long pre[1000001];
int a[1000001];
int main(){long long n,s;cin>>n>>s;for(int i=1;i<=n;i++){cin>>a[i];pre[i]=pre[i-1]+a[i];}for(int i=n/2;i>=0;i--){for(int j=i;j<n-i;j++){if(pre[j]<=s&&pre[i+j]-pre[j]<=s){cout<<i*2;return 0;}}}cout<<0<<endl;return 0;
}

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

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

相关文章

蓝桥杯第十二届电子类单片机组程序设计

目录 前言 蓝桥杯大赛历届真题_蓝桥杯 - 蓝桥云课&#xff08;点击查看&#xff09; 单片机资源数据包_2023&#xff08;点击下载&#xff09; 一、第十二届比赛原题 1.比赛题目 2.题目解读 蓝桥杯第十四届电子类单片机组程序设计_蓝桥杯单片机哪一届最难-CSDN博客 二、…

金三银四面试必问:Redis真的是单线程吗?

文章目录 01 Redis中的多线程1&#xff09;redis-server&#xff1a;2&#xff09;jemalloc_bg_thd3&#xff09;bio_xxx&#xff1a; 02 I/O多线程03 Redis中的多进程04 结论▼延伸阅读 由面试题“Redis是否为单线程”引发的思考 作者&#xff1a;李乐 来源&#xff1a;IT阅读…

Android Kotlin协程实战

你能听懂的Kotlin协程课&#xff0c;跟老司机学&#xff0c;不用自己瞎折腾 认识协程 协程难在哪儿? Ja v a中不曾出现的&#xff0c;新概念概念不清晰&#xff0c;我们看到的大都是不同语言对于协程的实现或者衍生Kotlin 基础不扎实多线程编程基础太薄弱 协程是什么? 协…

OpenAI最新发布的文生视频模型Sora到底强在哪?

文章目录 1.Sora到底强在哪&#xff1f;2. 不足3. 结尾 2024年2月16日&#xff0c;当大家沉浸在过年的喜庆氛围中&#xff0c;OpenAI发布首款文生成视频大模型 Sora &#xff0c;其炸裂登场让人感到惊艳。 Sora官网介绍&#xff1a;https://openai.com/sora 说起文生视频工具…

SLA 是什么?如何实现 SLA 管理

随着业务的不断壮大&#xff0c;为了满足日益增长的客户需求&#xff0c;网络必须保持与这些需求同步。同时&#xff0c;为了提高最终用户的体验&#xff0c;运维人员/网络管理员在监控企业级网络时遇到了不少瓶颈&#xff0c;必须不断审查网络&#xff0c;以确保提供的服务质量…

【Python笔记-设计模式】备忘录模式

一、说明 备忘录模式是一种行为设计模式&#xff0c;允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。 (一) 解决问题 主要解决在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态&#xff0c;以便在需要时恢复对象…

c#委托的三种实现方式

委托是实质一个类&#xff0c;主要目的是将方法当作参数进行传递。 委托是.NET编程的精髓之一&#xff0c;在日常编程中经常用到&#xff0c;在C#中实现委托主要有Func、Action、delegate三种方式&#xff0c;本节主要就这三种委托的用法通过实例展开讲解。 Func用法解析 【F…

log4j 基础使用入门教程

一、Log4j介绍 在项目中&#xff0c;不管是开发人员写代码还是测试人员写的测试代码一般都需要做一些日志来记录项目的行为&#xff0c;以便更好的跟踪项目中的一些交互和问题。 Log4j ( Logger For Java ) , Java 日志的记录包。 官方网站 。Log4j 是 Apache 的一个开源项目…

transformers模型预训练

模型预训练是指在深度学习领域中,先在一个大规模数据集上对模型进行初步训练,使模型能够学习到基本的特征表示和模式,然后再针对具体任务或特定数据集进行微调的过程。本次主要介绍掩码语言模型预训练以及因果语言模型预训练。 掩码语言模型预训练是自然语言处理领域中的一…

深入探讨Qt树状显示功能:理论与实践

在当今的软件开发领域&#xff0c;数据的组织和展示方式对于提升用户体验至关重要。树状显示功能作为一种常见的数据展示方式&#xff0c;能够以层次分明的形式展示复杂的数据结构&#xff0c;极大地增强了应用程序的可用性和可理解性。Qt框架作为一种跨平台的C图形用户界面应用…

SRC漏洞挖掘思路手法

这段时间挖掘了挺多的SRC漏洞&#xff0c;虽然都是一些水洞&#xff0c;也没有一些高级的漏洞挖掘利用手法&#xff0c;但是闲下来也算是总结一下&#xff0c;说说我对SRC漏洞挖掘的思路技巧。 很多人可能都挖过很多漏洞其中包括一些EDU或者别的野战&#xff0c;但是对于SRC往…

QQ录屏会录到外界声音吗?这篇文章告诉你答案

在现代网络科技快速发展的今天&#xff0c;屏幕录制已成为人们日常办公、学习、娱乐的重要工具。qq作为国内最受欢迎的社交软件之一&#xff0c;其内置的屏幕录制功能受到很多人的青睐。可是使用的过程中&#xff0c;很多人会有疑问&#xff1a;qq录屏会录到外界声音吗&#xf…

数据结构(C语言版)01

//顺序存储 int main(){ int ans[5]{1,1,1,1,3};//定义并初始化 printf("%d",ans[4]); return 0; } //链式存储 Typdef struct Lnode{ElemType data;struct Lnode *next; }Londe,*LinKlist;Londe *L; L(LinkList)malloc(sizeof(Lnode)); A->nextB;B->nextC;…

Python中re模块的使用

在Python中&#xff0c;处理正则表达式的模块是re模块。通过re模块&#xff0c;可以使用正则表达式来进行字符串的匹配、查找、替换等操作。执行效率特别高&#xff0c;可读性不强。 1.方法 match 从头开始匹配 返回Match 或者None import re r re.match(".\w{10}"…

单片机烧录方式 -- IAP、ISP和ICP

目录 背景 1 什么是ICP 2 什么是ISP 3 什么是IAP 4 总结 背景 对于51单片机&#xff0c;我们使用STC-ISP上位机软件通过串口进行程序的烧写&#xff1b;对于STM32系列单片机&#xff0c;我们既可以通过串口烧写程序&#xff0c;也能通过JLink或是STLink进行程序的烧写&am…

如何保护服务器的安全

互联网的迅速发展&#xff0c;让很多企业都很重视网络技术的使用&#xff0c;但是网络的传播速度比较快&#xff0c;同时容易造成数据、隐私方面的泄露现在每个企业基本有自己的服务器。有几点需要注意&#xff0c;可以参考&#xff1a; 1.基础密码安全 最基本的安全就是密码安…

linux 如何给服务器批量做免密,如何批量挂在磁盘

前提条件 所有机器网络互通&#xff0c;且已做了免密登录 linux服务器批量做免密脚本如下 #!/bin/bash # 定义服务器列表文件 SERVERS_FILE"host" # 定义生成的密钥的存储目录 KEY_DIR"/root/.ssh" # 检查是否输入了文件路径 if [ $# -ne 1 ]; then …

车载电子电器架构 —— 基础技术开发概述

车载电子电器架构 —— 基础技术开发概述 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗…

.Net Core与存储过程(一)

例子1 C# 调用存储过程 CREATE PROCEDURE [dbo].[spFunc] id BIGINT, isTrue BIT, str NVARCHAR (60), strZh NVARCHAR (60) AS BEGINSELECT *FROM tableAWHERE id idAND isTrue isTrueAND str strAND strZh strZh; ENDlong idLong 18; bool isBoolean true; string …

【element-ui】el-select multiple多选,表单校验问题解决方法

在项目开发过程中发现&#xff0c;el-select设置了multiple支持多选属性之后&#xff0c;el-select赋值之后&#xff0c;表单校验不通过 解决思路及解决方法&#xff1a; 1、首先看看v-model 、prop属性、rules校验是否正确&#xff0c;这里注意el-select的rules校验的trigger…