D. The Enchanted Forest

news2024/9/29 11:35:19

Problem - D - Codeforces

思路:一直在正向的考虑,这个题从反向考虑更加容易,首先如果k>=n的话,初始的一定都可以拿完,并且我们知道生长的蘑菇的总量是n*k个蘑菇,那么如果我们知道剩下了多少个蘑菇,那么就能够算出来拿了多少个生长的蘑菇,并且我们期望剩下的蘑菇和越少越好,那么怎么保证最小呢,就是我从最左边一直拿到最右边是最小的此时是1 2 3 4 ... n,那么我们就知道了最后的答案就是sum+n*k-n*(n+1)/2,并且一定存在一种方案使得最后是从左往右拿的,如果k==n+1,那么我们可以从2往左拿,再从1往右拿,同理其他情况也是;如果k<n,那么我们就是从某个开始一直往前拿最多能够取得的最大值,此时拿的生长的蘑菇的数量是k*(k-1)/2;

// Problem: D. The Enchanted Forest
// Contest: Codeforces - Codeforces Round 796 (Div. 2)
// URL: https://codeforces.com/contest/1688/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms

#include<bits/stdc++.h>
#include<sstream>
#include<cassert>
#define fi first
#define se second
#define i128 __int128
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> PII;
const double eps=1e-7;
const int N=5e5+7 ,M=5e5+7, INF=0x3f3f3f3f,mod=1e9+7,mod1=998244353;
const long long int llINF=0x3f3f3f3f3f3f3f3f;
inline ll read() {ll x=0,f=1;char c=getchar();while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') {x=(ll)x*10+c-'0';c=getchar();} return x*f;}
inline void write(ll x) {if(x < 0) {putchar('-'); x = -x;}if(x >= 10) write(x / 10);putchar(x % 10 + '0');}
inline void write(ll x,char ch) {write(x);putchar(ch);}
void stin() {freopen("in_put.txt","r",stdin);freopen("my_out_put.txt","w",stdout);}
bool cmp0(int a,int b) {return a>b;}
template<typename T> T gcd(T a,T b) {return b==0?a:gcd(b,a%b);}
template<typename T> T lcm(T a,T b) {return a*b/gcd(a,b);}
void hack() {printf("\n----------------------------------\n");}

int T,hackT;
int n,m,k;
int w[N];
ll sum[N];
struct Node{
	int l,r;
	ll sum;
	ll add;
};
Node tr[N*4];

void pushup(int u) {
	tr[u].sum=tr[u<<1].sum+tr[u<<1|1].sum;
}

void pushdown(int u) {
	if(tr[u].add!=0) {
		tr[u<<1].sum+=(ll)(tr[u<<1].r-tr[u<<1].l+1)*tr[u].add;
		tr[u<<1|1].sum+=(ll)(tr[u<<1|1].r-tr[u<<1|1].l+1)*tr[u].add;
		tr[u<<1].add+=tr[u].add;
		tr[u<<1|1].add+=tr[u].add;
		tr[u].add=0;
	}
}

void build(int u,int l,int r) {
	if(l==r) tr[u]={l,r,0,0};
	else {
		tr[u]={l,r,0,0};
		int mid=l+r>>1;
		build(u<<1,l,mid),build(u<<1|1,mid+1,r);
	}
}

void modify(int u,int l,int r,int c) {
	if(tr[u].l>=l&&tr[u].r<=r) {
		tr[u].sum+=(ll)(tr[u].r-tr[u].l+1)*c;
		tr[u].add++;
	}else {
		pushdown(u);
		
		int mid=tr[u].l+tr[u].r>>1;
		if(l<=mid) modify(u<<1,l,r,c);
		if(r>mid) modify(u<<1|1,l,r,c);
		
		pushup(u);
	}
}

int query(int u,int l,int r) {
	if(tr[u].l>=l&&tr[u].r<=r) return tr[u].sum;
	else {
		pushdown(u);
		
		int mid=tr[u].l+tr[u].r>>1;
		ll res=0;
		if(l<=mid) res+=query(u<<1,l,r);
		if(r>mid) res+=query(u<<1|1,l,r);
		
		return res; 
	}
}

void solve() {
	n=read(),k=read();
	
	for(int i=1;i<=n;i++) w[i]=read();
	for(int i=1;i<=n;i++) sum[i]=sum[i-1]+w[i];
	
	if(n==1) {
		printf("%d\n",w[1]+k-1);
		return ;
	}
	
	if(k>=n) {
		ll res=sum[n]+(ll)n*k-(ll)n*(n+1)/2;
		printf("%lld\n",res);
	}else {
		ll res=0;
		for(int i=1;i+k-1<=n;i++) {
			int l=i,r=i+k-1;
			ll temp=sum[r]-sum[l-1]+(ll)k*(k-1)/2;
			res=max(res,temp);
		}
		
		printf("%lld\n",res);
	}
}   

int main() {
    // init();
    // stin();
	// ios::sync_with_stdio(false); 

    scanf("%d",&T);
    // T=1; 
    while(T--) hackT++,solve();
    
    return 0;       
}          

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

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

相关文章

【Java 基础篇】深入理解 Java 管道(Pipes):从基础到高级

Java 管道&#xff08;Pipes&#xff09;是一种强大的工具&#xff0c;用于实现进程间通信&#xff08;Inter-Process Communication&#xff0c;IPC&#xff09;。在本文中&#xff0c;我们将深入探讨 Java 管道的各个方面&#xff0c;从基础概念到高级用法&#xff0c;旨在帮…

linux-crontab每分钟定时执行/定时任务调度

文章目录 一、前言二、crontab概述2.1、crontab命令简介2.2、linux定时任务分类 三、安装crontab四、crontab使用4.1、crontab语法4.2、定时任务设置4.3、定时任务格式4.4 crontab表达式在线验证 五、实例六、定时任务的日志 一、前言 本文讲解linux上如何调用定时任务&#x…

以太网ARP测试实验

1.1 ARP测试整体框架 当上位机发送ARP请求时&#xff0c;FPGA返回ARP应答数据&#xff1b;当按下FPGA的触摸按键时&#xff0c;FPGA发送ARP请求&#xff0c;上位机返回ARP应答数据。 PLL时钟对eth_rxc的输入时钟进行相位调整&#xff1b;GMII TO RGMI 模块负责将双沿(DDR)数据和…

树莓派安装mariadb

mariadb与mysql十分类似&#xff0c;他们的使用方法类似&#xff0c;默认端口也都是3306 文章参考 树莓派mysql安装配置 – 蒋智昊的博客 目录 1 树莓派系统情况 2 安装mariadb 3 启动数据库 4 设置数据库自启动 5 进入数据库 1 树莓派系统情况 用的是树莓派4&…

Linux性能调优 —— 内存篇

Linux性能调优 —— 内存篇 Linux内存的工作原理 内存映射的概念 虚存空间分布 内存分配与回收 分配 回收 内存查看与分析 查看内存使用情况 命令&#xff1a;free 命令&#xff1a;vmstat 命令&#xff1a;top 分析单个进程 命令&#xff1a;ps -p Linux内存的工作原理…

把api_key 设置成win10系统变量然后python调用

1 设置环境变量存储秘钥 将API密钥存储在环境变量中&#xff0c;而不是直接写在代码中&#xff0c;可以降低泄露密钥的风险。 新建系统变量&#xff1a; 变量名&#xff1a;OPENAI_API_KEY 变量值&#xff1a;OpenAI API秘钥(上一步复制的那个key) 2获取值 import openai i…

torch.cuda.is_available() 在有的项目中返回True有的返回Flase

问题描述&#xff0c;刚下了一个项目&#xff0c;不能用CUDA 同一个环境不同项目中 torch.cuda.is_available() 返回值不同 问题来源&#xff1a; 这里的运行配置有问题 选择编辑配置并修改对应的解释器 查看 和 是否对应。 import torch print(torch.__version__) prin…

iOS蓝牙 Connection Parameters 关键参数说明

1. 先贴苹果文档 《 Accessory Design Guidelines for Apple Devices 》 2. 几个关键词 connection Event Interval 事件间隔&#xff0c;为1.25ms的倍数。可以简单理解为,是两个连接着的蓝牙设备发送“心跳包”的时间间隔&#xff1b; 范围是 6 ~ 3200&#xff0c;即 7.5…

运算符超详细讲解(系统性学习day5)

目录 前言 一、运算符的概念与分类 二、算术运算符 三、关系运算符 四、逻辑运算符 五、赋值运算符 六、运算符的优先级 总结 前言 本篇文章是对运算符的具体讲解。 一、运算符的概念与分类 概念&#xff1a; 运算符就是一种告诉编译器执行特定的数学或逻辑操作的符…

HarmonyOS开发:解决DevEco Studio低版本导入高版本项目运行失败问题

前言 基于DevEco Studio 4.0 Beta2&#xff0c;hvigorVersion为3.0.2&#xff0c;开发了一个项目&#xff0c;上传到了远程仓库&#xff0c;当同事下载后&#xff0c;却始终无法运行&#xff0c;频繁报错&#xff0c;由于API都是使用的9&#xff0c;第一感觉就是开发环境不同&a…

【LeetCode-简单题KMP】232. 用栈实现队列

文章目录 题目方法一&#xff1a;用输入栈和输出栈模拟队列 题目 方法一&#xff1a;用输入栈和输出栈模拟队列 只有输出栈为空的时候才能将输入栈的元素补充到输出栈&#xff0c;否则输出栈不为空&#xff0c;如果再从输入栈往输出栈填充元素&#xff0c;就会弄乱队列的先进先…

Zotero的下载与使用

Zotero的下载与使用 一、Zotero的下载二、Zotero的使用1、导入文献&#xff08;1&#xff09;直接拖入&#xff08;2&#xff09;在线导入 2、wps插入文献参考3、联动sci hub 实现英文文献一键批量下载 一、Zotero的下载 下载官网&#xff1a;https://www.zotero.org/ 下载地址…

关于feign调用之间boolean类型的序列化问题

报错内容是这样的&#xff1a;这是controller层 这是feign调用层&#xff1a; 调试出错1&#xff1a; 调试出错2&#xff1a; 解决办法&#xff1a;

Pytorch史上最全torch全版本离线文件下载地址大全(9月最新)

以下为pytorch官网的全版本torch文件离线下载地址 torch全版本whl文件离线下载大全https://download.pytorch.org/whl/torch/其中的文件版本信息如下所示&#xff08;部分版本信息&#xff0c;根据需要仔细寻找进行下载&#xff09;&#xff1a;

STM32F4X UCOSIII 消息队列

STM32F4X UCOSIII 消息队列 消息队列消息队列的作用消息队列工作机制消息队列创建消息发送消息发送模式FIFO(先进先出)LIFO(后进先出) 消息接收消息队列删除消息队列常用函数消息队列创建函数消息队列发送函数消息队列接收函数消息队列删除函数 UCOSIII 消息队列例程 消息队列 …

Foxit PDF SDK Windows 9.1 Crack

Foxit PDF SDK 变更日志 Windows/Linux/Mac 2023 年 8 月 新功能/增强功能 在开始签名之前设置外观。支持使用共享字典添加签名。允许在调用 Signature::StartSign() 之前增量保存文档。在签名前修改现有未签名分页印章签名的外观。支持使用共享字典添加分页签名。忽略全角…

【c语言】指针和数组笔试题

1.指针和数组笔试题解析 一维数组 int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));//a单独放在sizeof内表示求整个数组的字节-----16printf("%d\n", sizeof(a 0));//a不是单独放在sizeof内部&#xff0c;表明是首元素的地址&#xff0c;地址占4/8个字节…

五个很实用的IDEA使用技巧

日常开发中&#xff0c;相信广大 Java 开发者都使用过 IntelliJ IDEA 作为开发工具&#xff0c;IntelliJ IDEA 是一款优秀的 Java 集成开发环境&#xff0c;它提供了许多强大的功能和快捷键&#xff0c;可以帮助开发者提高编码效率和质量。除了一些常见的技巧&#xff0c;如自动…

[篇五章五]-如何禁用 Windows Defender-我的创作纪念日

################################################## 目录 禁用掉烦人的 Windows Defender 在本地组策略编辑器中禁用 Windows Defende 关闭 Microsoft Defender 防病毒 禁止 Defender 开机自动运行 重新激活 Windows Defender #######################################…

字符串函数和内存函数详解(2)

&#x1f435;本文会将会对剩余的字符串库函数和内存函数进行讲解 1.strstr&#x1f4da; 1.1函数用法✏️ strstr函数原型&#xff1a; strstr用于在字符串中找子串&#xff0c;strstr会返回str1中出现str2的起始地址&#xff0c;如果在str1中没有找到str2&#xff0c;则返回…