| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 382674 | jjang36524 | Parrots (IOI11_parrots) | C++14 | 0 ms | 0 KiB | 
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "encoder.h"
#include "encoderlib.h"
#include "decoder.h"
#include "decoderlib.h"
#include <stdlib.h>
#include <string.h>
#define DIGIT 65536
#include <algorithm>
using namespace std;
struct bigint
{
    int arr[100];
    bigint()
    {
        memset(arr,0,sizeof(arr));
    }
};
bigint plu(bigint a,bigint b)
{
    bigint ans;
    int i;
    for(i=0;i<99;i++)
    {
        int c=a.arr[i]+b.arr[i];
        ans.arr[i+1]+=c>>16;
        ans.arr[i]+=c&(65535);
    }
    return ans;
}
bigint minu(bigint a,bigint b)
{
    bigint ans;
    int i;
    for(i=0;i<100;i++)
    {
        while(a.arr[i]<b.arr[i])
        {
            a.arr[i]+=DIGIT;
            a.arr[i+1]--;
        }
        ans.arr[i]=a.arr[i]-b.arr[i];
    }
    return ans;
}
bool cmp(bigint a,bigint b)
{
    bigint ans;
    int i;
    for(i=99;i>=0;i--)
    {
        if(a.arr[i]!=b.arr[i])
        {
            return a.arr[i]>b.arr[i];
        }
    }
    return 1;
}
void encode(int N, int M[])
{
    static bigint comb[600][600];
    int i,j;
    for(i=0;i<600;i++)
    {
        comb[i][0].arr[0]=1;
    }
    for(i=1;i<600;i++)
    {
        for(j=1;j<=i;j++)
        {
            comb[i][j]=plu(comb[i-1][j],comb[i-1][j-1]);
        }
    }
    bigint mul=comb[0][0];
    bigint an;
    for(i=0;i<N;i++)
    {
        for(j=0;j<M[i];j++)
        {
            an=plu(an,mul);
        }
        for(j=0;j<8;j++)
        {
            mul=plu(mul,mul);
        }
    }
    int K=5*N;
    int c=0;
    for(i=0;i<K;i++)
    {
        while(c<255&&cmp(an,comb[256-c+(K-i-1)-1][K-i-1]))
        {
            an=minu(an,comb[256-c+(K-i-1)-1][K-i-1]);
            c++;
        }
        send(c);
    }
}
#include "encoder.h"
#include "encoderlib.h"
#include "decoder.h"
#include "decoderlib.h"
#include <stdlib.h>
#include <string.h>
#define DIGIT 65536
#include <algorithm>
using namespace std;
struct bigint
{
    int arr[100];
    bigint()
    {
        memset(arr,0,sizeof(arr));
    }
};
bigint plu(bigint a,bigint b)
{
    bigint ans;
    int i;
    for(i=0;i<99;i++)
    {
        int c=a.arr[i]+b.arr[i];
        ans.arr[i+1]+=c>>16;
        ans.arr[i]+=c&(65535);
    }
    return ans;
}
bigint minu(bigint a,bigint b)
{
    bigint ans;
    int i;
    for(i=0;i<100;i++)
    {
        while(a.arr[i]<b.arr[i])
        {
            a.arr[i]+=DIGIT;
            a.arr[i+1]--;
        }
        ans.arr[i]=a.arr[i]-b.arr[i];
    }
    return ans;
}
bool cmp(bigint a,bigint b)
{
    bigint ans;
    int i;
    for(i=99;i>=0;i--)
    {
        if(a.arr[i]!=b.arr[i])
        {
            return a.arr[i]>b.arr[i];
        }
    }
    return 1;
}
void encode(int N, int M[])
{
    static bigint comb[600][600];
    int i,j;
    for(i=0;i<600;i++)
    {
        comb[i][0].arr[0]=1;
    }
    for(i=1;i<600;i++)
    {
        for(j=1;j<=i;j++)
        {
            comb[i][j]=plu(comb[i-1][j],comb[i-1][j-1]);
        }
    }
    bigint mul=comb[0][0];
    bigint an;
    for(i=0;i<N;i++)
    {
        for(j=0;j<M[i];j++)
        {
            an=plu(an,mul);
        }
        for(j=0;j<8;j++)
        {
            mul=plu(mul,mul);
        }
    }
    int K=5*N;
    int c=0;
    for(i=0;i<K;i++)
    {
        while(c<255&&cmp(an,comb[256-c+(K-i-1)-1][K-i-1]))
        {
            an=minu(an,comb[256-c+(K-i-1)-1][K-i-1]);
            c++;
        }
        send(c);
    }
}
