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
Solution 1:
#include <iostream> #include <vector> using namespace std; int main(){ int n, t, c, temp; while(cin >> n >> t >> c){ vector<int> v; for(int i = 0; i < n; ++i){ cin >> temp; v.push_back(temp); } int num = 0, sum = 0; for(int i = 0; i < c; ++i){ sum += v[i]; } if(sum <= t) ++num; for(int i = c; i < n; ++i){ sum += v[i]; sum -= v[i - c]; if(sum <= t) ++num; } cout << num << endl; } return 0; }
Solution 2: