Submission #739560

#TimeUsernameProblemLanguageResultExecution timeMemory
739560Kirill22Nicelines (RMI20_nicelines)C++17
19 / 100
1276 ms262144 KiB
//#include "nice_lines.h" #include "bits/stdc++.h" using namespace std; long double query(long double x, long double y); void the_lines_are(std::vector<int> a, std::vector<int> b); int x = (1 << 16); map<int, long double> mem; long double query(int y) { if (mem.find(y) != mem.end()) { return mem[y]; } return mem[y] = query(x, y); } pair<long double, long double> line(int a, int b) { long double A = query(a); long double B = query(b); long double k = (B - A) / (b - a); return {k, A - k * a}; } long double intersection(pair<long double, long double> a, pair<long double, long double> b) { return (a.second - b.second) / (b.first - a.first); } bool check(int a, int b, int c) { auto L = line(a, b); auto R = line(b, c); if (abs(L.first - R.first) < 1e-4) { return true; } return false; } void solve(int subtask_id, int N) { if (subtask_id == 4) { x = 1024; } vector<int> res; function<void(int, int, int, int)> solve = [&] (int l, int l1, int r, int r1) { auto L = line(l, l1); auto R = line(r, r1); if (abs(L.first - R.first) < 1e-4) { return; } int X = round(intersection(L, R)); if (check(l, l1, X) && check(X, r, r1)) { res.push_back(X); return; } cout << X << endl; solve(l, l1, X - 1, X); solve(X - 1, X, r, r1); }; solve(-x * (1 << 15), -x * (1 << 15) + 1, x * (1 << 15) - 1, x * (1 << 15)); sort(res.begin(), res.end()); res.resize(unique(res.begin(), res.end()) - res.begin()); vector<int> a, b; for (int i = 0; i < N; i++) { int y = res[i] % x; if (y < 0) { y += x; } if (y >= x / 2) { y -= x; } b.push_back(y); a.push_back((res[i] - y) / x); } the_lines_are(a, b); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...