罪犯转移

Posted on 2016-04-20 08:20  徐岩  阅读(189)  评论(0)    收藏  举报

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: