Submission #363279

# Submission time Handle Problem Language Result Execution time Memory
363279 2021-02-05T12:25:51 Z teewar Xylophone (JOI18_xylophone) C++14
0 / 100
1 ms 256 KB
#include "xylophone.h"
#include <cmath>

using namespace std;

void solve(int n) {
    int a[n + 1];
    int l = 1, r = n;
    while(r - l > 1) {
        int m = (l + r) / 2;
        if(query(1, m) >= n - 1) {
            r = m;
        }
        else {
            l = m;
        }
    }
    int mxid = r;
    a[mxid] = n;
    if(mxid > 1) {
        a[mxid - 1] = a[mxid] - query(mxid - 1, mxid);
    }
    if(mxid + 1 <= n) {
        a[mxid + 1] = a[mxid] - query(mxid, mxid + 1);
    }
    for(int i = mxid + 2; i <= n; ++i) {
        int p = query(i - 1, i);
        int val1 = a[i - 1] - p;
        int val2 = a[i - 1] + p;
        if(val1 < 1) {
            a[i] = val2;
            continue;
        }
        if(val2 >= n) {
            a[i] = val1;
            continue;
        }
        int t = query(i - 2, i);
        if(abs(a[i - 1] - a[i - 2]) + p == t) {
            if(a[i - 2] < a[i - 1]) {
                a[i] = val2;
            }
            else {
                a[i] = val1;
            }
        }
        else {
            if(a[i - 2] < a[i - 1]) {
                a[i] = val1;
            }
            else {
                a[i] = val2;
            }
        }
    }
    for(int i = mxid - 2; i >= 1; --i) {
        int p = query(i, i + 1);
        int val1 = a[i + 1] - p;
        int val2 = a[i + 1] + p;
        if(val1 < 1) {
            a[i] = val2;
            continue;
        }
        if(val2 >= n) {
            a[i] = val1;
            continue;
        }
        int t = query(i, i + 2);
        if(abs(a[i + 1] - a[i + 2]) + p == t) {
            if(a[i - 1] < a[i - 2]) {
                a[i] = val1;
            }
            else {
                a[i] = val2;
            }
        }
        else {
            if(a[i - 1] < a[i - 2]) {
                a[i] = val2;
            }
            else {
                a[i] = val1;
            }
        }
    }
    for(int i = 1; i <= n; ++i) {
        answer(i, a[i]);
    }
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 256 KB Output is correct
3 Incorrect 1 ms 256 KB Wrong Answer [7]
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 256 KB Output is correct
3 Incorrect 1 ms 256 KB Wrong Answer [7]
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 256 KB Output is correct
3 Incorrect 1 ms 256 KB Wrong Answer [7]
4 Halted 0 ms 0 KB -