题目描述
C市现在要转移一批罪犯到D市,C市有n名罪犯,按照入狱时间有顺序,另外每个罪犯有一个罪行值,值越大罪越重。现在为了方便管理,市长决定转移入狱时间连续的c名犯人,同时要求转移犯人的罪行值之和不超过t,问有多少种选择的方式?
输入描述:
第一行数据三个整数:n,t,c(1≤n≤2e5,0≤t≤1e9,1≤c≤n),第二行按入狱时间给出每个犯人的罪行值ai(0≤ai≤1e9)
输出描述:
一行输出答案。
输入例子:
3 100 2
1 2 3
输出例子:
2
解题
暴力超时,然后想到滑动窗口形式,每次减去第一个数,加上临近的下一个数。中间下标自己搞乱了,就用了break
import java.util.Scanner; public class Main{ public static void main(String [] args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ int n = in.nextInt(); int t = in.nextInt(); int c = in.nextInt(); int[] A = new int[n]; for(int i = 0;i<n;i++) A[i] = in.nextInt(); int count = 0; int sum = 0; for(int i = 0;i<c;i++){ sum+=A[i]; } for(int i = 0;i< n;i++){ if(sum<=t){ count++; } if(i +c >= n) break; sum = sum - A[i] + A[i+c]; } System.out.println(count); } } }