NC227322. 又一最大子段和
描述
输入描述
输入第一行是一个整数,测试用例数。
每个测试用例的第一行包括两个数,表示数组的长度和需要达到的。
每个测试用例的第二行输入n个数字,数组的个元素。
输入保证对于所有测试用例,有。
输出描述
对于每个测试用例,输出一行一个整数,表示令最少所需的操作次数。
示例1
输入:
4 3 0 -1 -1 -1 3 -1 -1 -1 -1 3 -2 -1 -1 -1 7 3 2 -4 3 -1 2 -4 3
输出:
1 0 3 1
C++ 解法, 执行用时: 95ms, 内存消耗: 552K, 提交时间: 2021-09-05 16:50:45
#include<bits/stdc++.h> using namespace std; int main() { int i,n,m,x,ans,flag,T; long long sum; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); flag=ans=sum=0; for(i=1;i<=n;i++) { scanf("%d",&x); sum=x+max(sum,(long long)0); if(sum>m)sum=-1,ans++; else if(sum==m)flag=1; } if(!flag)ans=max(ans,1); printf("%d\n",ans); } return 0; }