纯模拟——死循环,为啥第四个点会卡掉啊?
查看原帖
纯模拟——死循环,为啥第四个点会卡掉啊?
191846
WhiteSunFlower楼主2020/10/21 22:42

#include<bits/stdc++.h>
#include<stdio.h>
#include<stdlib.h>
//#include<windows.h>

using namespace std;
int n,a[3][100005],ans,len,m;
int s1,s2; //输入用 
int mx; //存最大利润的价格 
int main(){
	//freopen(".in","r",stdin);freopen(".out","w",stdout);
	cin >> n;
	cin >> s1 >> s2;
	while(s1!=-1&&s2!=-1){
		a[1][len]=s1;
		a[2][len]=s2;
		len++;
		cin >> s1 >> s2;
	}
	cin >> m;
	
	int chenb=a[1][0],xiao=a[2][len-1],jia=a[1][len-1];//chenb:成本 
	
	//往后算一下,直到销量为负 
	for(int i=jia+1;i<=100000&&(i-jia)*m<=xiao;i++){
		a[1][len]=i;
		a[2][len]=xiao-(i-jia)*m;
		len++;
	}
		
	//算一次 
	int last=-10000007,now=(chenb+ans)*a[2][0];
	for(int i=1;last<now;i++){
		last=now;
			now=(a[1][i]+ans)*a[2][i];
		mx=a[1][i];
	}
	if(mx>n)ans--;
	else if(mx<n)ans++;
	
	while(mx!=n){
		int last=-100007,now=ans*a[2][0];
		for(int i=1;last<=now;i++){//计算递增利润,开始变小就跳出 
			last=now;
			now=(a[1][i]+ans-chenb)*a[2][i];
			mx=a[1][i-1];
		}
		if(mx>n)ans++;
		else if(mx<n)ans--;
	} 
	
	cout << ans << endl;
	return 0;
}


2020/10/21 22:42
加载中...