답안 #750976

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
750976 2023-05-30T17:24:47 Z doowey Nicelines (RMI20_nicelines) C++14
47 / 100
13 ms 732 KB
#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-11;

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;
vector<ld> diff;

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;
    }
    for(auto x : diff){
        if(abs(gr - x - gl) < EPS){
            ld kk = (Q(l) - Q(r) + gr * r - gl * l) / (gr-gl);
            ll p = round(kk);
            int B = (p % X + X) % X;
            if(B > (int)1e4) B = -(X - B);
            int A = (p - 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;
    for(int i = 0 ; i <= 10000; i ++ ){
        ld dd = 2.0 / sqrt(i * i + 1.0);
        diff.push_back(dd);
    }
    go(-B, +B, g(-B), g(+B));
    the_lines_are(aa, bb);
}

Compilation message

nicelines.cpp: In function 'void go(ll, ll, ld, ld)':
nicelines.cpp:40:18: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   40 |     if(aa.size() == n) return;
      |        ~~~~~~~~~~^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 592 KB Output is correct
2 Correct 1 ms 592 KB Output is correct
3 Correct 1 ms 592 KB Output is correct
4 Correct 1 ms 592 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 596 KB Output is correct
2 Correct 1 ms 592 KB Output is correct
3 Correct 2 ms 592 KB Output is correct
4 Correct 1 ms 592 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 592 KB Output is correct
2 Incorrect 4 ms 592 KB Incorrect
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 13 ms 732 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 592 KB Output is correct
2 Correct 5 ms 592 KB Output is correct
3 Correct 3 ms 592 KB Output is correct
4 Correct 3 ms 592 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 13 ms 732 KB Incorrect
2 Halted 0 ms 0 KB -