Submission #750952

#TimeUsernameProblemLanguageResultExecution timeMemory
750952dooweyNicelines (RMI20_nicelines)C++14
86.71 / 100
73 ms680 KiB
#include <bits/stdc++.h>
#include "nice_lines.h"

using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef pair<ld, ld> pdd;

#define fi first
#define se second
#define mp make_pair

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const int X = (int)2e4 + 4;
const int B = 10000 * 1ll * X + 1;
const ld EPS = 1e-5;

map<ll, ld> st;

ld Q(ll x){
    if(!st.count(x)) st[x] = query(X, x);
    return st[x];
}

ld g(ll x){
    return Q(x) - Q(x - 1);
}


vector<int> aa, bb;

int n;

void go(ll l, ll r, ld gl, ld gr){
    if(abs(gl-gr) < EPS)  return;
    if(aa.size() == n) return;
    if(l + 1 == r){
        int B = (l % X + X) % X;
        if(B > (int)1e4) B = -(X - B);
        int A = (l - B) / X;
        aa.push_back(A);
        bb.push_back(B);
        return;
    }
    ll mid = l + (r - l) / 2ll;
    ld gm = g(mid);
    if((int)rng() % 2 == 0){
        if(abs(gm-gl) > EPS){
            go(l, mid, gl, gm);
        }
        if(abs(gm-gr) > EPS){
            go(mid, r, gm, gr);
        }
    }
    else{
        if(abs(gm-gr) > EPS){
            go(mid, r, gm, gr);
        }
        if(abs(gm-gl) > EPS){
            go(l, mid, gl, gm);
        }
    }
}

void solve(int _id, int _n){
    n = _n;
    go(-B, +B, g(-B), g(+B));
    the_lines_are(aa, bb);
}

Compilation message (stderr)

nicelines.cpp: In function 'void go(ll, ll, ld, ld)':
nicelines.cpp:39:18: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   39 |     if(aa.size() == n) return;
      |        ~~~~~~~~~~^~~~
#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...