题目描述
C市现在要转移一批罪犯到D市,C市有n名罪犯,按照入狱时间有顺序,另外每个罪犯有一个罪行值,值越大罪越重。现在为了方便管理,市长决定转移入狱时间连续的c名犯人,同时要求转移犯人的罪行值之和不超过t,问有多少种选择的方式?
输入描述:
第一行数据三个整数:n,t,c(1≤n≤2e5,0≤t≤1e9,1≤c≤n),第二行按入狱时间给出每个犯人的罪行值ai(0≤ai≤1e9)
输出描述:
一行输出答案。

示例1
输入
3 100 2
1 2 3
输出

2
#include <iostream>
#include <cmath>

using namespace std;
int main()
{
   int n,t,c;
    while(cin >> n >> t >> c)
    {
        int i, sum = 0, cnt = 0;
        int weight[n];
        for(i = 0; i < n; ++i)
        {
            cin >> weight[i];

        }
        int left = 0;
             for(i = left; i < (left+c); ++i)
            {
                sum += weight[i];            
            }
            if(sum <= t )++cnt;
            while(left<(n-c))
            {
                sum = sum+ weight[left+c]- weight[left];
                if(sum <= t)++cnt;
                ++left;
            }
       cout<<cnt<<endl;
    }
    return 0;
}