求这道题的解法 c++

卖牛奶(网站第304题)你开了个小卖部做起了小老板,你通过卖牛奶赚钱。因为新鲜牛奶的保质期只有3天,保质期从进货当天开始计算,牛奶到进货后第4天就会过期。你要确保卖给客人... 卖牛奶 (网站第 304 题)
你开了个小卖部做起了小老板,你通过卖牛奶赚钱。因为新鲜牛奶的保质期只有 3 天,保
质期从进货当天开始计算,牛奶到进货后第 4 天就会过期。你要确保卖给客人的都是没有
过期的牛奶。给定每天的进货和卖货信息,对于每位顾客你会选择卖给他保质期内最早进
货的那瓶。请问你最多可以卖出多少瓶牛奶,浪费了多少瓶。
输入第一行为正整数 n 代表共有 n 天,以下 n 行每行两个整数,代表每天发生的事情,第
一个数代表进货几瓶牛奶,第二个数代表顾客来买了多少瓶。输出两个整数,代表最多卖
出多少瓶,浪费了多少瓶。1<=n<=10000,每天进货和售卖数量都不超过 100。
输入样例 1
5
10 1
0 1
0 1
0 1
0 6
输出样例 1
4 6
输入样例 2
5
10 11
1 2
1 2
4 4
4 1
输出样例 2
17 3
展开
 我来答
Z麒Z
2018-07-06 · 超过32用户采纳过TA的回答
知道答主
回答量:73
采纳率:83%
帮助的人:16.1万
展开全部
int n;
milk[n]={};
buy[n]={};
cin>>n;
for(int i=0;i<n;i++){
cin>>milk[i]>>buy[i];
}//输入完毕
int sold=0,left=0;
for(int i=0;i<n;i++){
int j=max(0,i-2);
while(buy[i]>=0){
if(milk[j]==0){
j++;
if(j>i)break;
}
else{
buy[i]--;
milk[j]--;
sold++;
}
}
}
//统计剩下的
for(int i=0;i<n;i++){
left+=milk[i];
}
cout<<sold<<left;
//没编译过,但应该没太大问题
TintinBoy321
2019-08-01 · 超过11用户采纳过TA的回答
知道答主
回答量:47
采纳率:100%
帮助的人:6.6万
展开全部

ac代码(网站100):

#include <iostream>

using namespace std;

int main(){

int days;

int d1=0,d2=0,d3=0,d4=0;

int waste = 0;

int stock = 0;

cin>>days;

int in,out;

for(int i=0;i<days;i++){

cin>>in>>out;

d1 += in;

if(d4>= out){

d4 -= out;

stock += out;

}

else if(out<=d3+d4){

d3 = d3+d4-out;

d4= 0;

stock += out;

}else if(out <=d4+d2+d3){

d2 = d3+d2+d4-out;

d3 = 0;

d4 = 0;

stock += out;

}else if(out<=d1+d2+d3+d4){

d1 =d4+d3+d2+d1-out;

d3 = 0;

d2 = 0;

d4 = 0;

stock += out;

}else{

stock  = stock + d1+d2+d3+d4;

d1 = d2 =d3 = d4=0;

}

waste += d4;

d4 = d3;

d3 = d2;

d2 = d1;

d1 = 0;

}

waste = waste+d1+d2+d3+d4;

cout<<stock<<" "<<waste<<endl;

return 0;

}

可以看一下我的主站

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2019-10-31
展开全部

#include<bits/stdc++.h>

using namespace std;

int main(){

int a,b,x=0,y=0,n,t;

multiset<int> d;

multiset<int>::iterator ms;

cin>>n;

for(int i=1;i<=n;i++){

cin>>a>>b;

    for(int j=1;j<=a;j++) d.insert(i);

for(int j=1;j<=b;j++)

if(d.size()>0) ms=d.begin(),d.erase(ms),x++;

if(i>3) y+=d.count(i-3),d.erase(i-3);

}

cout<<x<<" "<<y+d.size();

return 0;

}


编译过,网站通过

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
草丛一只小提莫
2019-08-01
知道答主
回答量:1
采纳率:0%
帮助的人:704
展开全部
#include <iostream>
using namespace std;
int main(){
int days;
int d1=0,d2=0,d3=0,d4=0;
int waste = 0;
int stock = 0;
cin>>days;
int in,out;
for(int i=0;i<days;i++){
cin>>in>>out;
d1 += in;
if(d4>= out){
d4 -= out;
stock += out;
}
else if(out<=d3+d4){
d3 = d3+d4-out;
d4= 0;
stock += out;
}else if(out <=d4+d2+d3){
d2 = d3+d2+d4-out;
d3 = 0;
d4 = 0;
stock += out;
}else if(out<=d1+d2+d3+d4){
d1 =d4+d3+d2+d1-out;
d3 = 0;
d2 = 0;
d4 = 0;
stock += out;
}else{
stock = stock + d1+d2+d3+d4;
d1 = d2 =d3 = d4=0;
}
waste += d4;
d4 = d3;
d3 = d2;
d2 = d1;
d1 = 0;
}
waste = waste+d1+d2+d3+d4;
cout<<stock<<" "<<waste<<endl;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Luck_guy
2018-07-06 · TA获得超过400个赞
知道小有建树答主
回答量:647
采纳率:73%
帮助的人:142万
展开全部
我仔细的看了四遍,愣是没完全看懂。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式