死循环
查看原帖
死循环
522483
VictoriaEVA楼主2022/9/12 10:48

代码如下

#include <bits/stdc++.h>
using namespace std;
double s,v,e,p,ans,x;
int d,n;
struct shop
{
	double si;
	double pi;
} a[10];
bool cmp(shop a,shop b);
int find(int o);
void move(shop pq);
void infer(int ai);
/*
int infind(int t,int o);
int cha(int l);*/
int chb(int g);
int main()
{
	cin>>s>>v>>e>>p>>n;
//	scanf("%llf%llf%llf%llf%d",&s,&v,&e,&p,&n);
	a[0].si=0,a[0].pi=p;
	for(int i=1; i<=n; ++i) cin>>a[i].si>>a[i].pi;
	sort(a,a+n,cmp);
	while(x<s) infer(find(d));
	printf("%.2llf",ans);
	return 0;
}
bool cmp(shop a,shop b)
{
	return a.si<b.si;
}
int find(int o)
{
	int minn=a[o].pi;
	for(int i=o+1; i<=n; ++i)
		if(minn>a[i].pi)
			return i;
	return o;
}
void move(shop pq)
{
	ans+=(pq.si-x)/e*a[d].pi;
	x=pq.si;
	d=find(d);
}
/*
int infind(int t,int o)
{
	int minn=a[o-1].pi;
	for(int i=o-1; i>t; --i)
		if(minn>a[i].pi)
			return i;
}
int cha(int l)
{
	int i=d;
	while(a[i].si<=l) ++i;
	return i-1;
}*/
int chb(int g)
{
	int y=x+v*e;
	int i=d,minn,s=d;
	while(a[i].si<=y)
	{
		++i;
		if(i-d==1||a[i].pi<=minn)
		{
			minn=a[i].pi;
			s=i;
		}
	}
	return s;
}
void infer(int t)
{
	if(a[d+1].si-a[d].si>v*e)
	{
		printf("No Solution");
		exit(0);
	}
/*	if(a[t].si==x)
	{
		x+=v*e;
		ans+=v*a[t].pi;
		d=cha(x);
	}*/
/*	else if(a[t].si-x>v*e)
	{
		move(chb(d));
	}
	else if(a[t].si-x<=v*e)
	{
		move(a[t]);
	}*/
	move(a[(a[t].si-x>v*e)?chb(d):t]);
	return;
}
2022/9/12 10:48
加载中...