Submission #9802566


Source Code Expand

#include <bits/stdc++.h>
// created [2020/01/28] 22:36:07
#pragma GCC diagnostic ignored "-Wsign-compare"
#pragma GCC diagnostic ignored "-Wsign-conversion"

using i32   = int32_t;
using i64   = int64_t;
using u32   = uint32_t;
using u64   = uint64_t;
using uint  = unsigned int;
using usize = std::size_t;
using ll    = long long;
using ull   = unsigned long long;
using ld    = long double;
template<typename T, usize n>
using arr = T (&)[n];
template<typename T, usize n>
using c_arr = const T (&)[n];
template<typename T>
using max_heap = std::priority_queue<T>;
template<typename T>
using min_heap = std::priority_queue<T, std::vector<T>, std::greater<T>>;
template<typename T> constexpr T popcount(const T u) { return u ? static_cast<T>(__builtin_popcountll(static_cast<u64>(u))) : static_cast<T>(0); }
template<typename T> constexpr T log2p1(const T u) { return u ? static_cast<T>(64 - __builtin_clzll(static_cast<u64>(u))) : static_cast<T>(0); }
template<typename T> constexpr T msbp1(const T u) { return log2p1(u); }
template<typename T> constexpr T lsbp1(const T u) { return __builtin_ffsll(u); }
template<typename T> constexpr T clog(const T u) { return u ? log2p1(u - 1) : static_cast<T>(u); }
template<typename T> constexpr bool ispow2(const T u) { return u and (static_cast<u64>(u) & static_cast<u64>(u - 1)) == 0; }
template<typename T> constexpr T ceil2(const T u) { return static_cast<T>(1) << clog(u); }
template<typename T> constexpr T floor2(const T u) { return u == 0 ? static_cast<T>(0) : static_cast<T>(1) << (log2p1(u) - 1); }
template<typename T> constexpr bool btest(const T mask, const usize ind) { return static_cast<bool>((static_cast<u64>(mask) >> ind) & static_cast<u64>(1)); }
template<typename T> void bset(T& mask, const usize ind) { mask |= (static_cast<T>(1) << ind); }
template<typename T> void breset(T& mask, const usize ind) { mask &= ~(static_cast<T>(1) << ind); }
template<typename T> void bflip(T& mask, const usize ind) { mask ^= (static_cast<T>(1) << ind); }
template<typename T> void bset(T& mask, const usize ind, const bool b) { (b ? bset(mask, ind) : breset(mask, ind)); }
template<typename T> constexpr T bcut(const T mask, const usize ind) { return ind == 0 ? static_cast<T>(0) : static_cast<T>((static_cast<u64>(mask) << (64 - ind)) >> (64 - ind)); }
template<typename T> bool chmin(T& a, const T& b) { return (a > b ? a = b, true : false); }
template<typename T> bool chmax(T& a, const T& b) { return (a < b ? a = b, true : false); }
constexpr unsigned int mod                  = 1000000007;
template<typename T> constexpr T inf_v      = std::numeric_limits<T>::max() / 4;
template<typename Real> constexpr Real pi_v = Real{3.141592653589793238462643383279502884};
auto mfp = [](auto&& f) { return [=](auto&&... args) { return f(f, std::forward<decltype(args)>(args)...); }; };

template<typename T>
T in()
{
    T v;
    return std::cin >> v, v;
}
template<typename T, typename Uint, usize n, usize i>
T in_v(typename std::enable_if<(i == n), c_arr<Uint, n>>::type) { return in<T>(); }
template<typename T, typename Uint, usize n, usize i>
auto in_v(typename std::enable_if<(i < n), c_arr<Uint, n>>::type& szs)
{
    const usize s = (usize)szs[i];
    std::vector<decltype(in_v<T, Uint, n, i + 1>(szs))> ans(s);
    for (usize j = 0; j < s; j++) { ans[j] = in_v<T, Uint, n, i + 1>(szs); }
    return ans;
}
template<typename T, typename Uint, usize n>
auto in_v(c_arr<Uint, n> szs) { return in_v<T, Uint, n, 0>(szs); }
template<typename... Types>
auto in_t() { return std::tuple<std::decay_t<Types>...>{in<Types>()...}; }
struct io_init
{
    io_init()
    {
        std::cin.tie(nullptr), std::ios::sync_with_stdio(false);
        std::cout << std::fixed << std::setprecision(20);
    }
    void clear()
    {
        std::cin.tie(), std::ios::sync_with_stdio(true);
    }
} io_setting;

int out() { return 0; }
template<typename T>
int out(const T& v) { return std::cout << v, 0; }
template<typename T>
int out(const std::vector<T>& v)
{
    for (usize i = 0; i < v.size(); i++) {
        if (i > 0) { std::cout << ' '; }
        out(v[i]);
    }
    return 0;
}
template<typename T1, typename T2>
int out(const std::pair<T1, T2>& v) { return out(v.first), std::cout << ' ', out(v.second), 0; }
template<typename T, typename... Args>
int out(const T& v, const Args... args) { return out(v), std::cout << ' ', out(args...), 0; }
template<typename... Args>
int outln(const Args... args) { return out(args...), std::cout << '\n', 0; }
template<typename... Args>
void outel(const Args... args) { return out(args...), std::cout << std::endl, 0; }
#    define SHOW(...) static_cast<void>(0)
constexpr ull TEN(const usize n) { return n == 0 ? 1ULL : TEN(n - 1) * 10ULL; }

template<typename T, typename Uint, usize n, usize i>
auto make_v(typename std::enable_if<(i == n), c_arr<Uint, n>>::type, const T& v = T{}) { return v; }
template<typename T, typename Uint, usize n, usize i>
auto make_v(typename std::enable_if<(i < n), c_arr<Uint, n>>::type szs, const T& v = T{})
{
    const usize s = (usize)szs[i];
    return std::vector<decltype(make_v<T, Uint, n, i + 1>(szs, v))>(s, make_v<T, Uint, n, i + 1>(szs, v));
}
template<typename T, typename Uint, usize n>
auto make_v(c_arr<Uint, n> szs, const T& t = T{}) { return make_v<T, Uint, n, 0>(szs, t); }
int main()
{
    const auto N    = in<int>();
    constexpr int M = 40;
    std::vector<ll> Xs(N), Ys(N);
    std::vector<ll> xs(N), ys(N);
    for (int i = 0; i < N; i++) {
        Xs[i] = in<ll>(), Ys[i] = in<ll>();
        xs[i] = Xs[i] - Ys[i], ys[i] = Xs[i] + Ys[i];
    }
    bool ng = false;
    for (int i = 1; i < N; i++) {
        if ((xs[i] - xs[0]) % 2 != 0) { ng = true; }
        if ((ys[i] - ys[0]) % 2 != 0) { ng = true; }
    }
    for (int i = 0; i < N; i++) {
        if ((xs[i] - ys[i]) % 2 != 0) { ng = true; }
    }
    if (ng) { return outln(-1); }
    std::vector<ll> ds(M);
    if (xs[0] % 2 != 0) {
        for (int i = 0; i < M; i++) { ds[i] = 1LL << i; }
    } else {
        for (int i = 0; i < M - 1; i++) { ds[i] = 1LL << i; }
        ds[M - 1] = 1;
    }
    outln(ds.size());
    outln(ds);
    const ll D = std::accumulate(ds.begin(), ds.end(), 0LL);
    for (int i = 0; i < N; i++) {
        std::vector<bool> xp(M, true);
        std::vector<bool> yp(M, true);
        const ll x = xs[i], y = ys[i];
        const ll mx = (D - x) / 2, my = (D - y) / 2;
        for (int j = 0; j < M; j++) {
            if (btest(mx, j)) { xp[j] = false; }
            if (btest(my, j)) { yp[j] = false; }
        }
        std::string ans(M, ' ');
        for (int i = 0; i < M; i++) {
            if (xp[i]) {
                if (yp[i]) {
                    ans[i] = 'R';
                } else {
                    ans[i] = 'D';
                }
            } else {
                if (yp[i]) {
                    ans[i] = 'U';
                } else {
                    ans[i] = 'L';
                }
            }
        }
        outln(ans);
        auto check = [&]() {
            ll x = 0, y = 0;
            for (int i = 0; i < M; i++) {
                if (ans[i] == 'R') {
                    x += ds[i];
                } else if (ans[i] == 'D') {
                    y -= ds[i];
                } else if (ans[i] == 'L') {
                    x -= ds[i];
                } else {
                    y += ds[i];
                }
            }
            assert(x == Xs[i] and y == Ys[i]);
        };
        check();
    }
    return 0;
}

Submission Info

Submission Time
Task D - Robot Arms
User pachicobue
Language C++14 (GCC 5.4.1)
Score 600
Code Size 7670 Byte
Status AC
Exec Time 3 ms
Memory 384 KB

Judge Result

Set Name Sample subtask All
Score / Max Score 0 / 0 300 / 300 300 / 300
Status
AC × 4
AC × 20
AC × 58
Set Name Test Cases
Sample sample1.txt, sample2.txt, sample3.txt, sample4.txt
subtask sample1.txt, sample2.txt, sample3.txt, sample4.txt, sub1.txt, sub10.txt, sub11.txt, sub12.txt, sub13.txt, sub14.txt, sub15.txt, sub16.txt, sub2.txt, sub3.txt, sub4.txt, sub5.txt, sub6.txt, sub7.txt, sub8.txt, sub9.txt
All sample1.txt, sample2.txt, sample3.txt, sample4.txt, 1.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 2.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 3.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 4.txt, 5.txt, 6.txt, 7.txt, 8.txt, 9.txt, sample1.txt, sample2.txt, sample3.txt, sample4.txt, sub1.txt, sub10.txt, sub11.txt, sub12.txt, sub13.txt, sub14.txt, sub15.txt, sub16.txt, sub2.txt, sub3.txt, sub4.txt, sub5.txt, sub6.txt, sub7.txt, sub8.txt, sub9.txt
Case Name Status Exec Time Memory
1.txt AC 1 ms 256 KB
10.txt AC 1 ms 256 KB
11.txt AC 3 ms 384 KB
12.txt AC 1 ms 256 KB
13.txt AC 3 ms 384 KB
14.txt AC 3 ms 384 KB
15.txt AC 3 ms 384 KB
16.txt AC 3 ms 384 KB
17.txt AC 1 ms 256 KB
18.txt AC 3 ms 384 KB
19.txt AC 3 ms 384 KB
2.txt AC 1 ms 256 KB
20.txt AC 3 ms 384 KB
21.txt AC 1 ms 256 KB
22.txt AC 1 ms 256 KB
23.txt AC 3 ms 384 KB
24.txt AC 3 ms 384 KB
25.txt AC 3 ms 384 KB
26.txt AC 3 ms 384 KB
27.txt AC 1 ms 256 KB
28.txt AC 3 ms 384 KB
29.txt AC 3 ms 384 KB
3.txt AC 2 ms 384 KB
30.txt AC 3 ms 384 KB
31.txt AC 3 ms 384 KB
32.txt AC 3 ms 384 KB
33.txt AC 2 ms 384 KB
34.txt AC 2 ms 384 KB
4.txt AC 2 ms 384 KB
5.txt AC 2 ms 384 KB
6.txt AC 3 ms 384 KB
7.txt AC 1 ms 256 KB
8.txt AC 2 ms 384 KB
9.txt AC 2 ms 384 KB
sample1.txt AC 1 ms 256 KB
sample2.txt AC 1 ms 256 KB
sample3.txt AC 1 ms 256 KB
sample4.txt AC 1 ms 256 KB
sub1.txt AC 1 ms 256 KB
sub10.txt AC 1 ms 256 KB
sub11.txt AC 2 ms 384 KB
sub12.txt AC 1 ms 256 KB
sub13.txt AC 2 ms 384 KB
sub14.txt AC 2 ms 384 KB
sub15.txt AC 2 ms 384 KB
sub16.txt AC 2 ms 384 KB
sub2.txt AC 1 ms 256 KB
sub3.txt AC 2 ms 384 KB
sub4.txt AC 2 ms 384 KB
sub5.txt AC 2 ms 384 KB
sub6.txt AC 2 ms 384 KB
sub7.txt AC 1 ms 256 KB
sub8.txt AC 2 ms 384 KB
sub9.txt AC 2 ms 384 KB