제출 #1328865

#제출 시각아이디문제언어결과실행 시간메모리
1328865SulA앵무새 (IOI11_parrots)C++20
17 / 100
15 ms18244 KiB
#include "encoder.h"
#include "encoderlib.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
template<typename T> using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;

const int L = 100;

struct number {
    unsigned char dig[L]; // base 256
    // value is sum of dig[i] * 256 ^ i

    number() {
        for (int i = 0; i < L; i++) {
            dig[i] = 0;
        }
    }

    number(int n, int* digs) {
        for (int i = 0; i < n; i++) {
            dig[i] = digs[i];
        }
        for (int i = n; i < L; i++) {
            dig[i] = 0;
        }
    }

    unsigned char& operator[] (int pos) {
        return dig[pos];
    }

    friend number operator+ (number& A, number& B) {
        number res;
        int carry = 0;
        for (int i = 0; i < L; i++) {
            res[i] = ((int)A[i] + B[i] + carry) & 255;
            carry  = ((int)A[i] + B[i] + carry) >> 8;
        }
        return res;
    }

    friend int operator<=> (number& A, number& B) {
        for (int i = L-1; i >= 0; i--) {
            if (A[i] != B[i]) {
                return A[i] < B[i] ? -1 : 1;
            }
        }
        return 0;
    }

    friend bool operator< (number A, number B) {
        return A <=> B <= -1;
    }

    friend bool operator<= (number& A, number& B) {
        return A <=> B <= 0;
    }

    friend bool operator> (number& A, number& B) {
        return 1 <= A <=> B;
    }

    friend bool operator>= (number& A, number& B) {
        return 0 <= A <=> B;
    }
};

const int N = 700;
number dp[N][256];
int one[1];

void init() {
    one[0] = 1;
    for (int len = 1; len < N; len++) {
        dp[len][0] = number(1, one);
        for (int x = 1; x < 256; x++) {
            dp[len][x] = dp[len][x-1] + dp[len-1][x];
        }
    }
}

void encode(int n, int* M) {
  int res = 0;
  for (int i = 0; i < n; i++) {
    res |= M[i] << i;
  }
  send(res);
}
#include "decoder.h"
#include "decoderlib.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
template<typename T> using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;

const int L = 100;

struct number {
    unsigned char dig[L]; // base 256
    // value is sum of dig[i] * 256 ^ i

    number() {
        for (int i = 0; i < L; i++) {
            dig[i] = 0;
        }
    }

    number(int n, int* digs) {
        for (int i = 0; i < n; i++) {
            dig[i] = digs[i];
        }
        for (int i = n; i < L; i++) {
            dig[i] = 0;
        }
    }

    unsigned char& operator[] (int pos) {
        return dig[pos];
    }

    friend number operator+ (number& A, number& B) {
        number res;
        int carry = 0;
        for (int i = 0; i < L; i++) {
            res[i] = ((int)A[i] + B[i] + carry) & 255;
            carry  = ((int)A[i] + B[i] + carry) >> 8;
        }
        return res;
    }

    friend int operator<=> (number& A, number& B) {
        for (int i = L-1; i >= 0; i--) {
            if (A[i] != B[i]) {
                return A[i] < B[i] ? -1 : 1;
            }
        }
        return 0;
    }

    friend bool operator< (number A, number B) {
        return A <=> B <= -1;
    }

    friend bool operator<= (number& A, number& B) {
        return A <=> B <= 0;
    }

    friend bool operator> (number& A, number& B) {
        return 1 <= A <=> B;
    }

    friend bool operator>= (number& A, number& B) {
        return 0 <= A <=> B;
    }
};

const int N = 700;
number dp[N][256];
int one[1];

void init() {
    one[0] = 1;
    for (int len = 1; len < N; len++) {
        dp[len][0] = number(1, one);
        for (int x = 1; x < 256; x++) {
            dp[len][x] = dp[len][x-1] + dp[len-1][x];
        }
    }
}

void decode(int n, int m, int* X) {
  for (int i = 0; i < n; i++) {
    output((X[0] >> i) & 1);
  }
}
#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...