您的位置:首页 > 产品设计 > UI/UE

Codeforces Round #252 (Div. 2) B. Valera and Fruits

2014-07-30 11:17 447 查看
Let's start counting days from 1 to 3001. Let current day be i. Additionally, we'll have cur variable
— number of fruit we didn't collect previous days. Suppose now fruit is ripen current day. If now + cur ≤ v,
we need to add now + cur to answer and update cur value
(cur = 0). Otherwise we add v to answer, but cur value
need to be updated as follows. Let tv = max(v - cur, 0). Then cur = now - tv.
In other words, we try to collect fruits that will not be collectable next day.

Additionally, problem could be solved with 

;

#include<iostream>

#include <cstdio>

#include <cstring>

#include <algorithm>

using namespace std;

struct Node{
int a,b;
bool operator <(const Node &t)const{
return a<t.a;
}

}; 

Node a[3005];

int n,v;

 void solve() {
int fromLastDays = 0;

int ans = 0;

                 
for(int day = 1; day <= 3001; day++) {
int curDay = 0;

for(int i=0;i<n;i++) 
if (a[i].a == day)
curDay += a[i].b;

if (curDay + fromLastDays <= v) {
ans += fromLastDays + curDay;
fromLastDays = 0;
} else {
ans += v;

int tv = v - fromLastDays;

if (tv < 0) tv = 0;    //注意这里当tv<0的时候要变成0

       

               fromLastDays = curDay - tv;
}

}

cout << ans << endl;

}

int main(){

int i,j;

     while(scanf("%d%d",&n,&v)!=EOF){

      memset(a,0,sizeof(a));

      for(i=0;i<n;i++){

      scanf("%d %d",&a[i].a,&a[i].b);

      }

      solve();

     } 

     return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  codeforces greedy 排序