# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
282608 |
2020-08-24T15:44:16 Z |
shayan_p |
Rail (IOI14_rail) |
C++14 |
|
117 ms |
2460 KB |
#include<bits/stdc++.h>
#include "rail.h"
#define F first
#define S second
#define sz(s) (int(s.size()))
#define PB push_back
#define bit(n, k) (((n)>>(k))&1)
using namespace std;
typedef pair<int, int> pii;
typedef long long ll;
const int maxn = 1e5 + 10, mod = 1e9 + 7, inf = 1e9 + 10;
int A[maxn], B[maxn];
map<pii, int> mp;
int ask(int a, int b){
if(a == b)
return 0;
if(mp.count({a, b}))
return mp[{a, b}];
return mp[{a, b}] = mp[{b, a}] = getDistance(a, b);
}
void findLocation(int n, int p, int location[], int stype[]){
fill(stype, stype + n, -1);
stype[0] = 1;
location[0] = p;
if(n == 1)
return;
int mnid = 1;
for(int i = 1; i < n; i++){
A[i] = ask(0, i);
if(A[mnid] > A[i])
mnid = i;
}
stype[mnid] = 2;
location[mnid] = location[0] + A[mnid];
int Lid = 0, Rid = mnid, Mid = Lid;
for(int i = 0; i < n; i++){
if(i != Lid && i != Rid){
B[i] = ask(Rid, i);
if(abs(A[i] - B[i]) == location[Rid] - location[Lid] && B[i] < A[i] && B[i] < location[Rid] - location[Lid]){
stype[i] = 1;
location[i] = location[Rid] - B[i];
if(Mid == Lid || B[Mid] > B[i])
Mid = i;
}
}
}
vector<pii> L, R;
for(int i = 0; i < n; i++){
if(stype[i] == -1){
if(abs(A[i] - B[i]) != location[Rid] - location[Lid] || A[i] < B[i])
R.PB({A[i] - (location[Rid] - location[Lid]), i});
else
L.PB({B[i] - (location[Rid] - location[Lid]), i});
}
}
{
vector<pii> dis;
sort(L.begin(), L.end());
for(pii p : L){
vector<int> candid;
for(int i = 0; i < sz(dis); i++){
if(dis[i].F >= p.F)
continue;
int bk = dis[i].F - (p.F - dis[i].F);
if(i == 0 && bk <= 0)
continue;
if(i != 0 && dis[i-1].F >= bk)
continue;
candid.PB(bk);
}
if(sz(candid)){
int num = ask(dis.back().S, p.S);
int bk = dis.back().F - num;
bool any = 0;
for(int x : candid)
any|= bk == x;
candid.clear();
if(any)
candid.PB(bk);
}
if(sz(candid)){
int bk = candid.back();
location[p.S] = location[Lid] - bk;
stype[p.S] = 2;
}
else{
dis.PB(p);
location[p.S] = location[Lid] - p.F;
stype[p.S] = 1;
}
}
}
{
vector<pii> dis;
sort(R.begin(), R.end());
for(pii p : R){
vector<int> candid;
for(int i = 0; i < sz(dis); i++){
if(dis[i].F >= p.F)
continue;
int bk = dis[i].F - (p.F - dis[i].F);
if(i == 0 && bk <= 0)
continue;
if(i != 0 && dis[i-1].F >= bk)
continue;
candid.PB(bk);
}
if(sz(candid)){
int num = ask(dis.back().S, p.S);
int bk = dis.back().F - num;
bool any = 0;
for(int x : candid)
any|= bk == x;
candid.clear();
if(any)
candid.PB(bk);
}
if(sz(candid)){
int bk = candid.back();
location[p.S] = location[Rid] + bk;
stype[p.S] = 1;
}
else{
dis.PB(p);
location[p.S] = location[Rid] + p.F;
stype[p.S] = 2;
}
}
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
3 |
Correct |
1 ms |
384 KB |
Output is correct |
4 |
Correct |
1 ms |
384 KB |
Output is correct |
5 |
Correct |
1 ms |
384 KB |
Output is correct |
6 |
Correct |
1 ms |
384 KB |
Output is correct |
7 |
Correct |
1 ms |
384 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
1 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
512 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
1 ms |
384 KB |
Output is correct |
3 |
Correct |
1 ms |
384 KB |
Output is correct |
4 |
Correct |
1 ms |
384 KB |
Output is correct |
5 |
Correct |
1 ms |
384 KB |
Output is correct |
6 |
Correct |
1 ms |
384 KB |
Output is correct |
7 |
Correct |
1 ms |
384 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
1 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
384 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
103 ms |
2296 KB |
Output is correct |
2 |
Correct |
102 ms |
2296 KB |
Output is correct |
3 |
Correct |
104 ms |
2296 KB |
Output is correct |
4 |
Correct |
100 ms |
2296 KB |
Output is correct |
5 |
Correct |
106 ms |
2424 KB |
Output is correct |
6 |
Correct |
106 ms |
2376 KB |
Output is correct |
7 |
Correct |
105 ms |
2396 KB |
Output is correct |
8 |
Correct |
105 ms |
2388 KB |
Output is correct |
9 |
Correct |
101 ms |
2300 KB |
Output is correct |
10 |
Correct |
104 ms |
2296 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
102 ms |
2388 KB |
Output is correct |
2 |
Correct |
105 ms |
2296 KB |
Output is correct |
3 |
Correct |
102 ms |
2296 KB |
Output is correct |
4 |
Correct |
106 ms |
2396 KB |
Output is correct |
5 |
Correct |
104 ms |
2424 KB |
Output is correct |
6 |
Correct |
115 ms |
2296 KB |
Output is correct |
7 |
Correct |
106 ms |
2296 KB |
Output is correct |
8 |
Correct |
104 ms |
2424 KB |
Output is correct |
9 |
Correct |
101 ms |
2460 KB |
Output is correct |
10 |
Correct |
111 ms |
2392 KB |
Output is correct |
11 |
Correct |
117 ms |
2296 KB |
Output is correct |
12 |
Correct |
109 ms |
2424 KB |
Output is correct |
13 |
Correct |
102 ms |
2388 KB |
Output is correct |
14 |
Correct |
109 ms |
2296 KB |
Output is correct |
15 |
Correct |
102 ms |
2296 KB |
Output is correct |
16 |
Correct |
101 ms |
2296 KB |
Output is correct |
17 |
Correct |
104 ms |
2424 KB |
Output is correct |
18 |
Correct |
105 ms |
2296 KB |
Output is correct |
19 |
Correct |
104 ms |
2380 KB |
Output is correct |
20 |
Correct |
102 ms |
2424 KB |
Output is correct |