LOJ#2362. 「NOIP2016」蚯蚓
阿新 • • 發佈:2020-09-18
開個坑,待填。
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<queue> inline int read() { int x=0,f=1; char c=getchar(); while(c<'0' || c>'9') { if(c=='-') f=-1; c=getchar(); } while(c>='0' && c<='9') { x=(x<<1)+(x<<3)+(c^48); c=getchar(); } return x*f; } void write(int n) { if(n<0) { putchar('-'); n=-n; } if(n>9) write(n/10); putchar(n%10^48); } using namespace std; queue<int> que1,que2,que3; const int INF=0X7FFFFFFF; inline int getmax() { int l1=-INF,l2=-INF,l3=-INF; if(!que1.empty()) l1=que1.front(); if(!que2.empty()) l2=que2.front(); if(!que3.empty()) l3=que3.front(); int maxn=max(l1,max(l2,l3)); if(maxn==-INF) return -INF; if(l1==maxn) que1.pop(); else if(l2==maxn) que2.pop(); else if(l3==maxn) que3.pop(); return maxn; } int a[10000010]; int main() { int n,m,q,u,v,t; n=read();m=read();q=read();u=read();v=read();t=read(); double p=u*1.0/v; int sum=0; for(int i=1;i<=n;i++) a[i]=read(); sort(a+1,a+n+1); for(int i=1;i<=n;i++) que1.push(a[n-i+1]); for(int i=1;i<=m;i++) { int x=getmax()+sum; int t1=x*p,t2=x-t1; t1-=sum+q; t2-=sum+q; que2.push(t1); que3.push(t2); if(i%t==0) { write(x); putchar(' '); } sum+=q; } int i=0; putchar('\n'); while(1) { i++; int ans=getmax(); if(ans==-INF) break; if(i%t==0) { write(ans+sum); putchar(' '); } } return 0; }