1. 程式人生 > 實用技巧 >LOJ#2362. 「NOIP2016」蚯蚓

LOJ#2362. 「NOIP2016」蚯蚓

開個坑,待填。

#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;
}