不知道哪里错了
  • 板块灌水区
  • 楼主dhgzh
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/3 09:33
  • 上次更新2024/8/3 09:51:31
查看原帖
不知道哪里错了
723383
dhgzh楼主2024/8/3 09:33

题目传送门

代码:

#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了,求大佬解答

2024/8/3 09:33
加载中...