求助关于函数返回队列
查看原帖
求助关于函数返回队列
776232
zhizhizhiwang楼主2023/10/3 22:31

使用了一个初始队列(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;
	
	
}
2023/10/3 22:31
加载中...