Submission #402079

#TimeUsernameProblemLanguageResultExecution timeMemory
402079maximath_1Nicelines (RMI20_nicelines)C++11
92.99 / 100
74 ms564 KiB
#include <bits/stdc++.h> #include "nice_lines.h" using namespace std; #define ll long long #define ld long double ll lim = 10000; const ld eps = 1e-6; map<pair<ll, ll>, ld> mp; vector<int> a, b; ld que(ll x, ll y){ if(mp.count({x, y})) return mp[{x, y}]; return mp[{x, y}] = query(x, y); } ll dv(ll a, ll b){ if(a < 0) return (a - b + 1) / b; return a / b; } void solve(int subtask_id, int N){ mp.clear(); if(subtask_id == 4) lim = 500; ll x = lim * 2 + 1, y = x * lim + lim; ld diff = que(x, -y + 1) - que(x, -y); ll last = -y; for(int i = 0; i < N; i ++){ ll lf = 1, rg = lim; while(fabs(que(x, last + rg) - (que(x, last) + rg * diff)) < eps){ diff = (que(x, last + rg) - que(x, last)) / rg; rg *= 8; } for(ll md; lf < rg;){ md = (lf + rg) / 2; if(fabs(que(x, last + md) - (que(x, last) + md * diff)) < eps) lf = md + 1; else rg = md; } last += lf - 1; a.push_back((int)dv(last + lim, x)); b.push_back((int)(last - a.back() * x)); diff = que(x, last + 1) - que(x, last); } 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...