求这道题的解法 c++
你开了个小卖部做起了小老板,你通过卖牛奶赚钱。因为新鲜牛奶的保质期只有 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 展开
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;
//没编译过,但应该没太大问题
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;
}
编译过,网站通过
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;
}