【30pts】这个程序对于样例使用gdb正确,单独运行错误
查看原帖
【30pts】这个程序对于样例使用gdb正确,单独运行错误
206814
封禁用户楼主2022/7/19 08:50

单独运行代码时,直接RE,所以使用gdb调试代码,但是,对于样例1又正确了;

由于调试不了,所以我打算把代码发上来求助万能的洛谷。

#include <bits/stdc++.h>
//#define int long long
using namespace std;
queue<int> raw, first, second;
vector<int> bugs;
priority_queue<int> ans;
int n, m, q, u, v, t, global = 0;
double p;
int get_max(){
	int ret = 0;
	if(first.empty() && second.empty()){
		ret = raw.front();
		raw.pop();
	}else if((first.empty() && !second.empty()) || (!first.empty() && second.empty())){
		if(!first.empty()){
			if(first.front() > raw.front()){
				ret = first.front();
				first.pop();
			}else{
				ret = raw.front();
				raw.pop();
			}
		}else{
			if(second.front() > raw.front()){
				ret = second.front();
				second.pop();
			}else{
				ret = raw.front();
				raw.pop();
			}
		}
	}else{
		if(raw.front() > first.front() && raw.front() > second.front()){
			ret = raw.front();
			raw.pop();
		}else if(first.front() > raw.front() && first.front() > second.front()){
			ret = first.front();
			first.pop();
		}else{
			ret = second.front();
			second.pop();
		}
	}
	return ret;
}
signed main(){
    scanf("%d %d %d %d %d %d", &n, &m, &q, &u, &v, &t);
    double p = (double)u / (double)v;
    for(int i = 1, tmp; i <= n; i++){
		scanf("%d", &tmp);
    	bugs.push_back(tmp);
	}
	sort(bugs.begin(), bugs.end(), greater<int>());
	for(vector<int>::iterator it = bugs.begin(); it != bugs.end(); it++){
		raw.push(*it);
	}
	for(int i = 1; i <= m; i++){
		int becut = get_max() + global;
		int A = floor((double)becut * p), B = becut - A;
		global += q;
		A -= global, B -= global;
		first.push(A); second.push(B);
		if(i % t == 0) printf("%d ", becut);
	}
	while(!raw.empty()) {ans.push(raw.front()); raw.pop();}
	while(!first.empty()) {ans.push(first.front()); first.pop();}
	while(!second.empty()) {ans.push(second.front()); second.pop();}
	cout << endl;
	for(int i = 1; !ans.empty(); i++){
		if(i % t == 0) cout << ans.top() + global << ' ';
		ans.pop();
	}
	cout << endl;
	return 0;
}

写得多少有点啰嗦,还稍微看了下题解,get_max()是取得三个队列中最大的那个,我觉得问题应该出自这里。

所以代码哪里错了

g++ 10.3.0
gdb 7.6.1
Dev-C++ 5.11
2022/7/19 08:50
加载中...