PAT 1044. Shopping in Mars

#include <cstdio>
#include <cstdlib>
#include <vector>
#include <climits>
#include <algorithm>
using namespace std;


int main() {
    int N, M;
    scanf("%d%d", &N, &M);
    vector<int> nums(N);
    
    vector<pair<int, int> > cuts;
    
    for (int i=0; i<N; i++) {
        scanf("%d", &nums[i]);
    }
    int p = 0;
    int q = 0;
    
    int csum = nums[0];
    int lsum = INT_MAX;

    while (p<=q && q < N) {
        if (csum < M) {
            if (q+1 >= N) {
                break;
            }
            csum += nums[++q];
        } else if (csum == M) {
            if (lsum > csum) {
                cuts.clear();
            }
            lsum = csum;
            cuts.push_back(make_pair(p, q));
            if (q+1 >= N) {
                break;
            }
            csum -= nums[p++];
            csum += nums[++q];
        } else {
            if (csum < lsum) {
                cuts.clear();
                lsum = csum;
                cuts.push_back(make_pair(p, q));
            } else if (csum == lsum) {
                cuts.push_back(make_pair(p, q));
            }
            if (p == q && (q + 1 < N)) {
                csum += nums[++q];
            }
            csum -= nums[p++];
        }
    }
    sort(cuts.begin(), cuts.end());
    int len = cuts.size();
    
    for (int i=0; i<len; i++) {
        printf("%d-%d\n", cuts[i].first + 1, cuts[i].second + 1);
    }
    return 0;
}

一根爬虫

posted @ 2014-11-25 23:25  卖程序的小歪  阅读(161)  评论(0编辑  收藏  举报