PAT_1020月饼(25),测试点3段错误

思路很简单,简单的贪心算法,比较坑的一点就是测试点3,要考虑到库存量不满足需求的情况,我的代码中会出现无限循环,产生段错误。

#include
#include
#include 
#include
using namespace std;

struct monpi{
	double A; //库存 
	double B;//总价 
	double C;//平均价 
};
bool cmp(monpi a,monpi b){
	return a.C>b.C;
}
int main(){
	double N,D;
	cin>>N>>D;
	vector<monpi>mon;
	monpi m;
	for(int i=0;i<N;i++){
		cin>>m.A;
		mon.push_back(m);
	}
	for(int i=0;i<N;i++){
		cin>>mon[i].B;
		mon[i].C=mon[i].B/mon[i].A;
	}

	sort(mon.begin(),mon.end(),cmp);
	double sum=0;
	double P=0;
	int i=0;
	while(sum<D){
		sum+=mon[i].A; //库存 
		P+=mon[i].B;
		if(sum>D){
			sum-=mon[i].A;
			P-=mon[i].B;
			break;
		}
		i++;
		if(i>N) break; //最开始没考虑库存没满足最大需求的情况 产生段错误 
	}
	if(sum<D&&i<=N){
		 P+=((D-sum)/mon[i].A)*mon[i].B;
	}
	cout<<fixed<<setprecision(2)<<P;
	return 0;
}

你可能感兴趣的:(PAT乙级)