标签:解释 包含 algorithm pac -- while 加速 目的 估计
题意:蛐蛐国里现在共有n只蚯蚓(n为正整数)。每只蚯蚓拥有长度,我们设第i只蚯蚓的长度为a_i(i=1,2,...,n),并保证所有的长度都是非负整数(即:可
int read() { char ch=getchar();int ans=0; while(ch>‘9‘||ch<‘0‘) ch=getchar(); while(ch<=‘9‘&&ch>=‘0‘) { ans=(ans<<1)+(ans<<3)+ch-‘0‘; ch=getchar(); } return ans; }
void write(int x) { if(x>9) write(x/10); putchar(x%10+‘0‘); }
for(int i=1;i<=m;++i)
for(int i=1;i<=a_cnt;++i) d[++d_cnt]=a[i]+sum; for(int i=b_str;i<=b_end;++i) d[++d_cnt]=b[i].val+sum-b[i].tim; for(int i=c_str;i<=c_end;++i) d[++d_cnt]=c[i].val+sum-c[i].tim;
int sum=q*(i-1); int nowa=((!a_cnt)?-1:(a[a_cnt]+sum)); int nowb=((b_str>b_end)?-1:(b[b_str].val+sum-b[b_str].tim)); int nowc=((c_str>c_end)?-1:(c[c_str].val+sum-c[c_str].tim));
sum+=q; b[++b_end].val=now*p,b[b_end].tim=sum; c[++c_end].val=now-b[b_end].val;c[c_end].tim=sum;
#include<cstdio> #include<algorithm> #include<queue> #include<cstring> using namespace std; #define ll long long const int maxn=1e7+1; struct Node { int tim,val; }b[maxn],c[maxn]; int a[maxn],d[maxn]; int read() { char ch=getchar();int ans=0; while(ch>‘9‘||ch<‘0‘) ch=getchar(); while(ch<=‘9‘&&ch>=‘0‘) { ans=(ans<<1)+(ans<<3)+ch-‘0‘; ch=getchar(); } return ans; } void write(int x) { if(x>9) write(x/10); putchar(x%10+‘0‘); } int main() { int u,v,n,m,t,q,a_cnt,b_str,b_end,c_str,c_end,d_cnt; double p; n=read(),m=read(),q=read(),u=read(),v=read(),t=read(); p=(double)u/v; for(int i=1;i<=n;++i) a[i]=read(); sort(a+1,a+n+1); a_cnt=n,b_end=c_end=d_cnt=0,b_str=c_str=1; for(int i=1;i<=m;++i) { int now,sum=q*(i-1); int nowa=((!a_cnt)?-1:(a[a_cnt]+sum)); int nowb=((b_str>b_end)?-1:(b[b_str].val+sum-b[b_str].tim)); int nowc=((c_str>c_end)?-1:(c[c_str].val+sum-c[c_str].tim)); if(nowa>=nowb&&nowa>=nowc) now=nowa,--a_cnt; else if(nowb>=nowc&&nowb>=nowa) now=nowb,++b_str; else now=nowc,++c_str; sum+=q; b[++b_end].val=now*p,b[b_end].tim=sum; c[++c_end].val=now-b[b_end].val;c[c_end].tim=sum; if(i%t==0) write(now),putchar(‘ ‘); } putchar(‘\n‘); int sum=q*m; for(int i=1;i<=a_cnt;++i) d[++d_cnt]=a[i]+sum; for(int i=b_str;i<=b_end;++i) d[++d_cnt]=b[i].val+sum-b[i].tim; for(int i=c_str;i<=c_end;++i) d[++d_cnt]=c[i].val+sum-c[i].tim; sort(d+1,d+d_cnt+1); for(int i=d_cnt+1-t;i>=1;i-=t) write(d[i]),putchar(‘ ‘); putchar(‘\n‘); return 0; }
标签:解释 包含 algorithm pac -- while 加速 目的 估计
原文地址:https://www.cnblogs.com/lin4xu/p/12718959.html