数据过水
查看原帖
数据过水
756381
_likexin_楼主2022/7/21 09:10

RT,下面这段代码前两个样例都没过,交上去却过了。

#include<iostream>
#include<queue>
#include<algorithm>
#define int long long
using namespace std;
int n,m,q,u,v,t;
long double p;
queue<int>a;
queue<int>b;
queue<int>c;
int que[1000001];
priority_queue<int> qmr;
bool cmp(int x,int y){
	return x>y;
}
signed main(){
	cin>>n>>m>>q>>u>>v>>t;
	p=u*1.0/v;
	for(int i=1;i<=n;i++){
		scanf("%lld",&que[i]);
	}
	sort(que+1,que+1+n,cmp);
	for(int i=1;i<=n;i++){
		a.push(que[i]);
	}
	int jia=0;
	for(int i=1;i<=m;i++){
		int maxx=-0x7fffffff;
		if(a.size()){
			maxx=max(maxx,a.front());
		}
		if(b.size()){
			maxx=max(maxx,b.front());
		}
		if(c.size()){
			maxx=max(maxx,c.front());
		}
		if(maxx==a.front()&&a.size()){
			a.pop();
		}else if(maxx==b.front()&&b.size()){
			b.pop();
		}else if(maxx==c.front()&&c.size()){
			c.pop();
		}
		maxx+=jia;
		int xx=p*maxx;
		int yy=maxx-xx;
		jia+=q;
		xx-=jia;
		yy-=jia;
		if(i%t==0){
			cout<<maxx<<' ';
		}
		b.push(xx);
		c.push(yy); 
	}
	cout<<endl;
	while(!a.empty()){
		qmr.push(a.front()+jia);
		a.pop();
	}
	while(!b.empty()){
		qmr.push(b.front()+jia);
		b.pop();
	}
	while(!c.empty()){
		qmr.push(c.front()+jia);
		c.pop();
	}
	for(int i=1;i<=n+m;i++){
		if(i%t==0) cout<<qmr.top()<<' ';
		qmr.pop();
	}
	return 0;
}

但是,把

long double p;

改成

double p;

就可以过样例了。 为什么?难道 long double 的精度反而更低了吗?

2022/7/21 09:10
加载中...