【无标题】

这篇博客探讨了CF1698/B问题,介绍了如何通过观察操作限制判断tall数的最优解。当m>=2时,发现无法增加tall数,因此采用暴力方法;而m=1时,通过选择不相邻元素最大化tall数。核心思路是利用性质和代码实现来求解可能的最大tall数。
摘要由CSDN通过智能技术生成

CF 1698/B

题目:题目

大致题意: 给一段数然后定义tall数为下标2到n-1里值大于相邻数值之和的数。给予一种不限次数操作让你选择连续的长度为m的序列同时加1。问tall的可能最大值。

思路

第一步 :先获得性质:在m>=2的情况下你不可能加出tall数,因为你想加中间的数的时候你一定会加到左边或右边。
故对于m>=2的情况tall数等于不操作的tall数,直接暴力。再讨论m=1的情况,因为可以随便加,最大值明显为n中选不相邻的最大数=(n+1)/2,由于不能选1和n,故答案为(n-1)/2;

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int q[N];
int main(){
	int T;
	cin>>T;
	while(T--){
		int n,k;
		cin>>n>>k;
		for(int i=1;i<=n;i++){
			scanf("%d",&q[i]);
		}
		if(k==1){
			cout<<(n-1)/2<<endl;
		}else{
			int idx=0;
			for(int i=2;i<n;i++){
				if(q[i]>q[i-1]+q[i+1])idx++;
			}
			cout<<idx<<endl;
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值