Submission #841337

#TimeUsernameProblemLanguageResultExecution timeMemory
841337happypotatoCatfish Farm (IOI22_fish)C++17
Compilation error
0 ms0 KiB
// I am sorry // I have mega skill issues #include "overtaking.h" #include <bits/stdc++.h> using namespace std; #define int long long // remove when necessary #define pii pair<int, int> #define ff first #define ss second #define pb push_back const int mxN = 1001; int arrive[mxN][mxN]; // [position][car] int n, m; int w[mxN], s[mxN]; int x; map<int, int> mp[mxN]; map<int, int>::iterator it; map<int, pii> ansmp; map<int, pii>::iterator it2, it3; void reset() { for (int i = 0; i < n; i++) w[i] = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) arrive[i][j] = 0; s[i] = 0; mp[i].clear(); } ansmp.clear(); } void CalcArrival() { for (int i = 1; i < m; i++) { // calculate estimated ending time for (int j = 0; j < n; j++) { arrive[i][j] = arrive[i - 1][j] + w[j] * (s[i] - s[i - 1]); // cerr << arrive[i - 1][j] << " | " << w[j] << " | "; // cerr << s[i] - s[i - 1] << endl; // cerr << i << " " << j << ": " << arrive[i][j] << endl; } // "delay" faster cars // // brute force method // for (int j = 0; j < n; j++) { // for (int k = 0; k < n; k++) { // if (j == k) continue; // if (arrive[i - 1][j] > arrive[i - 1][k] && arrive[i][j] < arrive[i][k]) { // // j overtook k on the road, delay // arrive[i][j] = arrive[i][k]; // } // } // } // sort by (estimated) ending time vector<pair<pii, int>> v; for (int j = 0; j < n; j++) { v.pb({{arrive[i][j], arrive[i - 1][j]}, j}); } sort(v.begin(), v.end(), [&](pair<pii, int> &lhs, pair<pii, int> &rhs) { // sort by larger arrival time if (lhs.ff.ff != rhs.ff.ff) return lhs.ff.ff > rhs.ff.ff; // tiebreak by smaller starting time return lhs.ff.ss < rhs.ff.ss; }); for (pair<pii, int> &cur : v) { it = mp[i].lower_bound(cur.ff.ss); if (it == mp[i].begin()) { if (it->ff != cur.ff.ss) mp[i][cur.ff.ss] = cur.ff.ff; } else { --it; arrive[i][cur.ss] = it->ss; } } mp[i].clear(); v.clear(); for (int j = 0; j < n; j++) { v.pb({{arrive[i - 1][j], arrive[i][j]}, j}); } sort(v.begin(), v.end(), [&](pair<pii, int> &lhs, pair<pii, int> &rhs) { // sort by smaller starting time if (lhs.ff.ff != rhs.ff.ff) return lhs.ff.ff < rhs.ff.ff; // tiebreak by larger arrival time return lhs.ff.ss > rhs.ff.ss; }); int curmax = -1; for (pair<pii, int> &cur : v) { if (cur.ff.ss > curmax) { mp[i][cur.ff.ff] = cur.ff.ss; curmax = cur.ff.ss; } } } // for (int i = 0; i < m; i++) { // for (int j = 0; j < n; j++) { // cerr << arrive[i][j] << ' '; // } // cerr << endl; // } } void CalcAnswer() { for (int i = 1; i < m; i++) { int dist = x * (s[i] - s[i - 1]); for (it2 = ansmp.begin(); it2 != ansmp.end(); ++it2) { int prev = it2->ss.ss; it2->ss.ss += dist; // expected arrival time it = mp[i].lower_bound(prev); if (it != mp[i].begin()) { --it; it2->ss.ss = max(it2->ss.ss, it->ss); } } // cerr << i << ": "; // for (it2 = ansmp.begin(); it2 != ansmp.end(); ++it2) { // cerr << it2->ff << " " << it2->ss.ff << " " << it2->ss.ss << " | "; // } // cerr << endl; for (it = mp[i].begin(); it != mp[i].end(); ++it) { pii range; range.ff = it->ff - x * (s[i - 1] - s[0]); range.ss = it->ss - x * (s[i] - s[0]); if (range.ff == range.ss) continue; ansmp[range.ff] = {range.ss, it->ss}; } // cerr << i << ": "; // for (it2 = ansmp.begin(); it2 != ansmp.end(); ++it2) { // cerr << it2->ff << " " << it2->ss.ff << " " << it2->ss.ss << " | "; // } // cerr << endl; for (it2 = ansmp.begin(); it2 != ansmp.end(); ++it2) { it3 = it2; ++it3; if (it3 == ansmp.end()) break; if (it2->ss.ss == it3->ss.ss) { it2->ss.ff = it3->ss.ff; ansmp.erase(it3); } } cerr << i << ": "; for (it2 = ansmp.begin(); it2 != ansmp.end(); ++it2) { cerr << it2->ff << " " << it2->ss.ff << " " << it2->ss.ss << " | "; } cerr << endl; } } void init(int32_t L, int32_t N, vector<long long> T, vector<int32_t> W, int32_t X, int32_t M, vector<int32_t> S) { n = N; m = M; reset(); for (int i = 0; i < n; i++) { arrive[0][i] = T[i]; w[i] = W[i]; } for (int i = 0; i < m; i++) { s[i] = S[i]; } x = X; CalcArrival(); CalcAnswer(); } long long bruh_arrival_time(long long t) { for (int i = 1; i < m; i++) { int nt1 = t + x * (s[i] - s[i - 1]); // look for delay it = mp[i].lower_bound(t); if (it != mp[i].begin()) { --it; nt1 = max(nt1, it->ss); } t = nt1; } return t; } long long arrival_time(long long t) { // return bruh_arrival_time(t); // cout << t << ", bruh arrival " << bruh_arrival_time(t) << endl; it2 = ansmp.lower_bound(t); if (it2 != ansmp.begin()) { --it2; if (it2->ff < t && t <= it2->ss.ff) { t = it2->ss.ss; } else { t += x * (s[m - 1] - s[0]); } } else { t += x * (s[m - 1] - s[0]); } return t; } #undef int

Compilation message (stderr)

fish.cpp:4:10: fatal error: overtaking.h: No such file or directory
    4 | #include "overtaking.h"
      |          ^~~~~~~~~~~~~~
compilation terminated.