使用了一个初始队列(qq)存放单调的初始蚯蚓长度,接下来将分裂出的蚯蚓存放进qq1和qq2中。 使用了一个cmp函数判断3个队列中哪个是当前最大值,但是不知道为什么改完就挂了,求大神帮助
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
const int M = 7e6+5;
queue<long long> qq;
queue<long long> qq1,qq2;
bool cmpq(int a,int b)
{
if(a > b)return true;
else return false;
}
queue<long long> cmp()
{
if((qq.empty()?-1:qq.front()) > (qq1.empty()?-1:qq1.front()) and (qq.empty()?-1:qq.front()) > (qq2.empty()?-1:qq2.front()))
{
return qq;
}
else if( (qq1.empty()?-1:qq1.front()) > (qq.empty()?-1:qq.front()) and (qq1.empty()?-1:qq1.front()) > (qq2.empty()?-1:qq2.front()) )
{
return qq1;
}
else if( (qq2.empty()?-1:qq2.front()) > (qq1.empty()?-1:qq1.front()) and (qq2.empty()?-1:qq2.front()) > (qq.empty()?-1:qq.front()) )
{
return qq2;
}
}
int main()
{
long long n,m,q,u,v,T;
scanf("%d %d %d %d %d %d\n",&n,&m,&q,&u,&v,&T);
long long s[N];
for(int i = 1;i <= n;i++)
{
scanf("%d ",&s[i]);
}
sort(s,s+n,cmpq);
for(int i = 1 ;i < n;i++)
{
qq.push(s[i]);
}
for(int t = 1;t <= m;t++)
{
long long c;
/*
if(t%T == 0)printf("%d ",qq.top() + q*(t-1));
c = qq.top() + q*(t-1);
qq.push((long long)(c*u/v) -q*t);
qq.push( c - (long long)(c*u/v) -q*t);
qq.pop();
*/
if(t%T == 0)printf("%d ",cmp().front() + q*(t-1));
if(cmp() == qq)
{
c = qq.front() + q*(t-1);
qq1.push((c*u/v) - q*t);
qq2.push(c - (c*u/v) -q*t);
qq.pop();
}
else if( cmp() == qq1 )
{
c = qq1.front() + q*(t-1);
qq.push((c*u/v) - q*t);
qq2.push(c - (c*u/v) -q*t);
qq1.pop();
}
else if( cmp() == qq2)
{
c = qq2.front() + q*(t-1);
qq1.push((c*u/v) - q*t);
qq.push(c - (c*u/v) -q*t);
qq2.pop();
}
}
printf("\n");
for(int t = 1;t <= (n+m);t ++)
{
if(t%T == 0)printf("%d ",cmp().front() + m*q);
cmp().pop();
}
return 0;
}