首页 > 代码库 > noip2016——提高组——蚯蚓
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——提高组——蚯蚓
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。