2.19
CF.1738B - Prefix Sum Addicts
https://codeforces.com/problemset/problem/1738/B
输入 T(≤1e5)表示T组数据。所有数据的n之和 ≤1e5。
每组数据输入nk(1≤k≤n≤1e5)和k个整数,范围[-1e9,1e9]。
这 k个数是一个长为n的非降数组的前缀和的最后k项(从左到右)是否存在这样的非降数组?输出 Yes 或 NO。
首先肯定是用前缀和计算出整个数组的后K个元素,判断其是否非递减,但是这样是还不够的。
在k>1的前提下,设s为前缀和数组,那么s[n-k+2]-s[n-k+1]=a[n-k+2]可以计算出a[n-k+2],是数组中已知的第一个元素,前n-k个元素未知
这时我们把前面的元素a[i]全部放大为a[n-k+2],如果此时不满足s[n-k+1] <= a[n-k+2]*(n-k+1)的话,说明不存在这样的数组,反之则存在这样的数组。
def cf1738B(n,k,nums):
nums = [0]*(n-k+1)+nums
if k == 1:
print("Yes")
return 0
a = [0]*(n+1)
for i in range(n-k+2,n+1):
a[i] = nums[i]-nums[i-1]
for i in range(n-k+2,n):
if a[i] > a[i+1]:
print("No")
return 0
if nums[n - k + 1] > a[n - k + 2] * (n - k + 1):
print("No")
return 0
print("Yes")
return 0
if __name__ == "__main__":
T = int(input())
for _ in range(T):
n,k = map(int, input().split())
nums = [int(i) for i in input().split()]
cf1738B(n,k,nums)
关于这题的数组构成方法,官解中给出了其中一种可能的组成方法(最优解法):

原理也是上面讲到的放缩,可以自己推推看。
相关推荐
ANSYS 19.2
ANSYS 19.2。 最新版ANSYS软件,完整和谐版,为了互相分享资源,希望多多支持。 ANSYS
ansys19.2安装教程
安装步骤: 安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文。 [安装环境]:Win7/Win8/Win10 1.选中【ANSYS19.2-64bit】压缩包,鼠标右击选择【解压到ANSYS19.2-64bit】。 2.双击打开【ANSYS19.2-64bit】文件夹。 3.双击打开【ANSYS19.2-64bit A】镜像文件。温馨提示:win7系统请看安装包里面的打开教程。win8和win10双击打不开的话,就鼠标右击在打开方式中选...
MCD19A2 Python 处理
MCD19A2 Python 处理
ANSYS 19.2 FLUENT Tutorial Guide
ANSYS 19.2 FLUENT Tutorial Guide,最新版,帮助学习FLUENT的官方指导文档及实例。
Git-2.19.2-64位windows安装包
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。


