
题目如上,本人在本地测试过程序是OK的,上传到洛谷之后却判WA,到底是哪里有问题呢?
有无朋友能够帮忙看看?
#include<iostream>
#include<vector>
#include<queue>
#include<list>
#include<functional>
using namespace std;
//比较两个pair,第一个元素是列表中的值,第二个元素是列表的迭代器
struct Compare {
bool operator()(const pair<int, pair<list<int>::iterator, list<int>*>>& a,
const pair<int, pair<list<int>::iterator, list<int>*>>& b) {
return a.first > b.first; // 创建一个最小堆
}
};
int main() {
int N = 0;
cin >> N;
vector<list<int>> lists(N);
for (auto& lst : lists) {
int num = 0;
while (cin >> num)
{
lst.push_back(num);
if (cin.peek() == '\n')//换行则停止读取该link list
break;
}
}
priority_queue<pair<int, pair<list<int>::iterator, list<int>*>>,
vector<pair<int, pair<list<int>::iterator, list<int>*>>>,
Compare> pq;
//将每个link list的第一个元素加入优先队列
for (size_t i = 0; i < lists.size(); ++i) {
if (!lists[i].empty()) {
pq.emplace(lists[i].front(), make_pair(lists[i].begin(), &lists[i]));
}
}
list<int> result;
// 合并链表
while (!pq.empty()) {
auto top = pq.top();
pq.pop();
int value = top.first;
auto it = top.second.first;
auto& lst = *top.second.second;
result.push_back(value);
if (++it != lst.end()) { // 如果不是链表的最后一个元素
pq.emplace(*it, make_pair(it, &lst));
}
}
// 输出结果
bool first = true;
for (int val : result) {
if (!first) {
cout << " ";
}
else {
first = false;
}
cout << val;
}
cout << endl;
return 0;
}