QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#751092 | #9730. Elevator II | ytck# | WA | 0ms | 3568kb | C++20 | 3.1kb | 2024-11-15 17:03:44 | 2024-11-15 17:03:44 |
Judging History
answer
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int, int> PII;
const int inf = 2e18;
int n, st;
struct node
{
int first, second;
vector<int> id;
};
struct E
{
int first, second;
int id;
};
bool cmp(const E &x, const E &y)
{
return x.first < y.first;
}
map<int, vector<int>> path;
vector<node> merge(vector<E> &a)
{
sort(a.begin(), a.end(), cmp);
vector<node> res;
int st = -inf, ed = -inf;
vector<int> t;
for (auto it : a)
{
if (ed < it.first)
{
if (st != -inf)
{
res.push_back({st, ed, t});
t.clear();
}
st = it.first;
ed = it.second;
t.push_back(it.id);
}
else
{
ed = max(ed, it.second);
t.push_back(it.id);
}
}
if (st != -inf)
{
res.push_back({st, ed, t});
}
return res;
}
void solves()
{
cin >> n >> st;
path.clear();
map<int, int> ma;
map<int, int> mp;
int mx = -inf;
int sum = 0;
vector<E> vis;
for (int i = 1; i <= n; i++)
{
int l, r;
cin >> l >> r;
sum += r - l;
mx = max(mx, l);
vis.push_back({l, r, i});
}
auto ans = merge(vis);
// for (auto item : ans)
// cout << item.first << ' ' << item.second << endl;
// cout << endl;
vector<int> s((int)ans.size() + 10, 0);
for (int i = 0; i < ans.size(); i++)
{
if (i == 0)
s[i] = 0;
else
{
int tmp = ans[i].first - ans[i - 1].second;
s[i] = s[i - 1] + tmp;
}
}
// cout << sum << endl;
// for (int i = 0; i < ans.size(); i++)
// cout << s[i] << ' ';
// cout << endl;
int mn = inf;
int pos;
int beg;
for (int i = 0; i < ans.size(); i++)
{
int add = max(0LL, ans[i].first - st);
// int dex = s[i];
// //cout<<add<<' '<<dex<<' ';
// int tmp = add-dex;
// // if (dex >= add)
// // tmp = 0;
// // else
// // tmp = add - dex;
// //cout<<tmp<<endl;
int tmp = add + s[ans.size() - 1] - s[i];
// tmp=max(tmp,0LL);
// cout<<tmp<<endl;
if (mn > tmp)
{
mn = tmp;
pos = i;
}
}
// cout<<mn<<endl;
int xx = sum + mn;
cout << xx << endl;
for (int i = pos; i < ans.size(); i++)
{
reverse(ans[i].id.begin(), ans[i].id.end());
for (auto item : ans[i].id)
cout << item << ' ';
}
//cout<<endl<<"***"<<pos<<endl;
for (int i = 0; i < pos; i++)
{
reverse(ans[i].id.begin(), ans[i].id.end());
for (auto item : ans[i].id)
cout << item << ' ';
}
cout << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 1;
cin >> t;
while (t--)
solves();
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3568kb
input:
2 4 2 3 6 1 3 2 7 5 6 2 5 2 4 6 8
output:
11 4 1 3 2 5 2 1
result:
wrong answer Participant declares the cost to be 11, but the plan actually costs 14 (test case 1)