QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#750971 | #9730. Elevator II | ytck# | WA | 46ms | 3776kb | C++20 | 3.1kb | 2024-11-15 16:33:53 | 2024-11-15 16:33:54 |
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;
// for (int i = pos + 1; i < ans.size(); i++)
// {
// sum += max(0LL, ans[i].first - ans[i - 1].second);
// }
cout << sum + mn << endl;
for (int i = pos; i < ans.size(); i++)
{
for (auto item : ans[i].id)
cout << item << ' ';
}
//cout<<endl<<"***"<<pos<<endl;
for (int i = 0; i < pos; i++)
{
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();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3560kb
input:
2 4 2 3 6 1 3 2 7 5 6 2 5 2 4 6 8
output:
11 2 3 1 4 5 2 1
result:
ok ok 2 cases (2 test cases)
Test #2:
score: -100
Wrong Answer
time: 46ms
memory: 3776kb
input:
6100 19 52 51 98 2 83 40 58 96 99 39 55 72 94 15 17 4 15 48 99 2 99 77 78 35 77 44 62 79 81 30 31 1 48 48 76 68 99 60 66 6 19 44 53 64 92 17 28 67 98 9 99 40 65 16 27 99 100 15 56 4 6 24 97 84 96 47 49 37 38 77 79 13 40 13 92 71 100 47 93 90 91 72 81 15 48 32 71 19 17 95 99 10 23 18 100 90 93 52 92 ...
output:
524 16 2 10 8 7 15 12 5 3 13 9 17 1 19 18 6 11 14 4 194 5 3 6 1 2 4 397 9 10 2 15 4 16 7 6 12 11 14 8 5 13 1 3 733 2 15 9 18 7 3 11 6 14 13 19 10 12 5 16 8 17 4 1 244 7 13 9 3 15 1 11 10 5 14 6 4 2 12 8 422 17 18 12 3 19 1 14 16 9 15 5 8 4 20 13 2 7 6 10 11 104 3 4 1 2 187 7 10 9 4 6 5 1 3 2 ...
result:
wrong answer Participant declares the cost to be 524, but the plan actually costs 559 (test case 1)