noip2016——提高组——蚯蚓
Posted Yzyet
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了noip2016——提高组——蚯蚓相关的知识,希望对你有一定的参考价值。
大概这题难度提高+省选-。
我也做了半天。
这题如果用优先队列做的话会时间超限。
所以就要用另一种巧妙的做法。
见代码……
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 int read(){ 6 int t=1,num=0;char c=getchar(); 7 while(c>\'9\'||c<\'0\'){if(c==\'-\')t=-1;c=getchar();} 8 while(c>=\'0\'&&c<=\'9\'){num=num*10+c-\'0\';c=getchar();} 9 return num*t; 10 } 11 const int maxn=100010,maxm=7000010; 12 int n,m,q,u,v,t,ab=1,bb=1,cb=1; 13 int a[maxn],b[maxm],c[maxm]; 14 bool cmp(int a,int b){return a>b;} 15 void init(){ 16 n=read();m=read();q=read(); 17 u=read();v=read();t=read(); 18 for(int i=1;i<=n;i++)a[i]=read(); 19 sort(a+1,a+n+1,cmp); 20 } 21 int main() 22 { 23 init();int best; 24 for(int i=1;i<=m;i++){ 25 if(i==1)best=a[ab++]; 26 else{ 27 if(ab>n)a[ab]=-2147483600; 28 if(b[bb]>a[ab]){ 29 if(c[cb]>b[bb])best=c[cb++]; 30 else best=b[bb++]; 31 } 32 else{ 33 if(a[ab]>c[cb])best=a[ab++]; 34 else best=c[cb++]; 35 } 36 } 37 best+=(i-1)*q; 38 if(i%t==0)printf("%d ",best); 39 int num=(long long)(best)*u/v; 40 b[i]=num-i*q;c[i]=best-num-i*q; 41 }puts(""); 42 for(int i=1;i<=n;i++)a[i]+=m*q; 43 for(int i=1;i<=m;i++)b[i]+=m*q,c[i]+=m*q; 44 for(int i=1;i<=n+m;i++){ 45 if(b[bb]>a[ab]){ 46 if(c[cb]>b[bb])best=c[cb++]; 47 else best=b[bb++]; 48 } 49 else{ 50 if(a[ab]>c[cb])best=a[ab++]; 51 else best=c[cb++]; 52 } 53 if(i%t==0)printf("%d ",best); 54 } 55 return 0; 56 }
本文由Yzyet编写,网址为www.cnblogs.com/Yzyet。非Yzyet同意,禁止转载,侵权者必究。
以上是关于noip2016——提高组——蚯蚓的主要内容,如果未能解决你的问题,请参考以下文章