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;
}
}
}