100分程序,写了2天+1小时
大神就是厉害……写的程序居然看都看不懂,还有就是cena上过了但是luogu上一直是恶心的TLE 首先是考虑p=0时,数组大小开到了1100000,然后就是WA,改成了9100000之后终于坑到50分,然后开始考虑p≠0,经过神犇程序的一番洗脑,终于发现p=0和p≠0的区别就是不等于的时候需要处理时加上长的那一部分,处理完之后再减去,输出时再加上,写完之后有一种能AC的感觉,但是评测的时候发现非常尴尬,居然没有AC,然后开始一句一句的对比,发现忘记初始化了…… que_0,que_1,que_2是要初始化的,初始化为最小值,终于AC了,很开心的交到洛谷上,结果才90,两个TLE,后来才知道long long很浪费时间,所以要减少longlong的数量,就AC了#include#include #include #include using std::sort;int head_0=1,head_1=1,head_2=1;int tail_0,tail_1,tail_2;long long que_0[9100000],que_1[9100000],que_2[9100000];long long n,m,q,u,v,t;int comp(long long ti,long long bi){ if(ti>bi) return 1; return 0;}int max(long long a,long long b,long long c){ if(a c) { head_0++; return a; } else { head_2++; return c; }}int main(){ freopen("earthworm.in","r",stdin); freopen("earthworm.ans","w",stdout); cin>>n>>m>>q>>u>>v>>t; memset(que_0,128,sizeof(que_0)); memset(que_1,128,sizeof(que_1)); memset(que_2,128,sizeof(que_2)); tail_0=n; for(int i=1;i<=n;i++) scanf("%lld",&que_0[i]); sort(que_0+1,que_0+n+1,comp); for(int i=1;i<=m;i++) { long long x,x1,x2; x=max(que_0[head_0],que_1[head_1],que_2[head_2]); x+=(i-1)*q; que_1[i]=x*u/v-i*q; //减去这段时间增长的部分 que_2[i]=x-x*u/v-i*q; if(i%t==0) printf("%lld ",x); } printf("\n"); for(int i=1,x;i<=n+m;i++) { x=max(que_0[head_0],que_1[head_1],que_2[head_2]); if(i%t==0) printf("%d ",x+m*q); //x+m*q 加上增长的部分 } return 0;}