codeforce44B. Valera and Fruits

来源:互联网 发布:python 判断sys.argv 编辑:程序博客网 时间:2024/05/17 01:59

题目大意:有n颗果树,每颗果树的有效采摘日期只有两天,并且农夫的每天采摘上限为v,求最大的采摘量

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;struct node{    int start;    int number;    int endday;} fru[10000];bool cmp(node a, node b){    if(a.start < b.start)        return true;    if(a.start > b.start)        return false;    if(a.start == b.start)    {        if(a.number > b.number)  //不知道为什么这里改成 a.number >= b.number就过不了,第29个测试点3000 1 1 1......就不行了,难道是sort内部的原因么             return true;        else            return false;    }}int main(){    int n, m, sum, limit, day, now;    while(cin >> n >> m)    {        sum = 0;        for(int i = 0; i < n; i++)        {            scanf("%d%d", &fru[i].start, &fru[i].number);            fru[i].endday = fru[i].start+1;        }        sort(fru, fru + n, cmp);        int sday = fru[0].start, eday = fru[n-1].endday;        day = sday;        now = 0;        limit = m;        while(day <= eday && now < n)        {            if(fru[n-1].endday < day)                break;            if(day < fru[now].start)            {                day++;                limit = m;                continue;            }            if(day > fru[now].endday)            {                now++;                continue;            }            if(day >= fru[now].start && day <=fru[now].endday)            {                if(fru[now].number >limit)                {                    sum += limit;                    fru[now].number -=limit;                    limit = m;                    day++;                    continue;                }                if(fru[now].number == limit)                {                    sum += limit;                    fru[now].number -=limit;                    limit = m;                    now++;                    day++;                    continue;                }                if(fru[now].number < limit)                {                    sum += fru[now].number;                    limit -= fru[now].number;                    fru[now].number = 0;                    now++;                }            }            else                now++;        }        cout << sum << endl;    }    return 0;}


0 0
原创粉丝点击