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 的精度反而更低了吗?