单独运行代码时,直接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