社区讨论

不是萌新,不是刚学c艹,但这道题做错了

P1016[NOIP 1999 普及组/提高组] 旅行家的预算参与者 27已保存回复 29

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
29 条
当前快照
1 份
快照标识符
@mi6yi4vi
此快照首次捕获于
2025/11/20 12:54
4 个月前
此快照最后确认于
2025/11/21 00:17
4 个月前
查看原帖
我第二个点T了,最后一个点Wa了

基本思路:贪心+模拟
CPP
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
double c,s,d1,d2,add,d[10],p[10],oil=0,dis=0,ans=0,minn;
int n,m,tot=0,flag;
int main(){
	scanf("%lf%lf%lf%lf%d",&d1,&c,&d2,&p[0],&n);
	for(int i=1;i<=n;i++)scanf("%lf%lf",&d[i],&p[i]);
	d[n+1]=d1,p[n+1]=0;
	int i=0;s=c*d2;
	while(i<=n){
		flag=1,minn=555;
		for(register int j=i+1;j<=n+1&&d[j]<=d[i]+s&&flag;j++)
			if(p[i]>p[j])
				ans+=p[i]*((d[j]-d[i])/d2-oil),i=j,oil=0,flag=0;
		if(flag){
			for(register int j=i+1;j<=n+1&&d[j]<=d[i]+s;j++)
				if(minn>=p[j])
					minn=p[j],i=j,add=p[i]*(c-oil),oil=c-(d[j]-d[i])/d2;
			ans+=add;
		}
	}
	printf("%.2lf",ans);
	return 0;
}

回复

29 条回复,欢迎继续交流。

正在加载回复...