代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node{
int price,num;
}form[10005];
bool operator < (const node &a,const node &b){
return a.price<b.price;
}
int a,b,c,x,y,cnt,s,cnt1,tmp,maxs,maxp,maxss;
signed main(){
cin>>a;
while(cin>>x>>y&&x!=-1) form[++cnt]={x,y};
sort(form+1,form+1+cnt);
cin>>s;
cnt1=cnt;
for(int i=2;i<=cnt;i++){
tmp=(form[i-1].num-form[i].num)/(form[i].price-form[i-1].price);
for(int j=form[i-1].price+1;j<form[i].price;j++)
form[++cnt1]={j,form[i-1].num-(j-form[i-1].price)*tmp};
}
for(int i=form[cnt].num-s,j=1;i>0;i-=s,j++) form[++cnt1]={j+form[cnt].price,i};
for(int i=0;i<=10000;i++){
maxss=maxs=maxp=0;
for(int j=1;j<=cnt1;j++){
if((form[j].price-form[1].price+i)*form[j].num>maxs){
maxp=form[j].price;
maxs=(form[j].price-form[1].price+i)*form[j].num;
if(maxp==a) maxss=maxs;
}
}
if(maxp==a||maxss==maxs){
cout<<i;
return 0;
}
maxss=maxs=maxp=0;
for(int j=1;j<=cnt1;j++){
if((form[j].price-form[1].price-i)*form[j].num>maxs){
maxp=form[j].price;
maxs=(form[j].price-form[1].price-i)*form[j].num;
if(maxp==a) maxss=maxs;
}
}
if(maxp==a||maxss==maxs){
cout<<-i;
return 0;
}
}
cout<<"NO SOLUTION";
return 0;
}
第四个测试点WA了,求大佬解答