题意详细解释

a是一个常数
为了方便我们把“价-成+a”=m

由于不同的价格对应不同的k,但是恒k<0
大致图像:

只是不同点价格对应斜率不一样,但一个a一定对应一个mmax使得总利润最大
所以我们只要找到一个a的范围使得预期价比两边都大就可以了
输入成本和成本对应销量
pre=成本
while (输入不是结束条件){
    差分=(现价销量-上个价格销量)/(现价-上个价格)
    for (){
        把每个价格的销量填补上
    }
}
把预期价的左右一个价格解不等式组:
Min=1.0*((n+1-cost)*s[n+1]-(n-cost)*s[n])/(s[n]-s[n+1]);
Max=1.0*((n-cost)*s[n]-(n-1-cost)*s[n-1])/(s[n-1]-s[n]);
if (最大值和最小值异号){
    0是最小值
}else 不异号{
    输出绝对值最小的
}

#include <bits/stdc++.h>

using namespace std;

int n,cost,sale,pre,c,m,d;
double Max,Min;
int s[10005];
int main(int argc, char** argv) {
	cin>>n>>cost>>sale;
	pre=cost;
	s[cost]=sale;
	while(scanf("%d%d",&c,&m),c!=-1&&m!=-1){
		int d=(m-s[pre])/(c-pre);
		for(int i=pre+1;i<=c;i++){
			s[i]=s[i-1]+d;
		}
		pre=c;
	}
	cin>>d;
	for(pre++;s[pre-1]-d>0;pre++){
		s[pre]=s[pre-1]-d;
	}
	Min=1.0*((n+1-cost)*s[n+1]-(n-cost)*s[n])/(s[n]-s[n+1]);
	Max=1.0*((n-cost)*s[n]-(n-1-cost)*s[n-1])/(s[n-1]-s[n]);
	if(Min*Max<0){
		cout<<0;
	}else{
		if(fabs(Min)>fabs(Max)) cout<<floor(Max);
		else cout<<ceil(Min);
	}
	return 0;
}