# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
883461 | dejandenib | 앵무새 (IOI11_parrots) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "encoder.h"
#include "encoderlib.h"
long long mapa2[92400];
int broj = 0;
map<long long ,int> mapa;
void rec(int posledno, int n, long long s,int depth){
if(depth==n)
{
mapa[s]=broj;
// mapa2[broj]=s;
//cout<<s<<" "<<broj<<endl;
broj++;
return;
}
for(long long i =posledno;i<n;i++)
{
rec(i,n,s*10LL+i,depth+1);
}
}
void rec2(int posledno, int n, long long s,int depth){
if(depth==n)
{
//mapa[s]=broj;
mapa2[broj]=s;
//cout<<s<<" "<<broj<<endl;
broj++;
return;
}
for(long long i =posledno;i<n;i++)
{
rec2(i,n,s*10LL+i,depth+1);
}
}
void encode(int n, int a[])
{
rec2(0,10,0,0);
int nn = n;
if (nn%2==1)
nn++;
int b[nn*8];
int suma=0;
int start_from = 0;
for(int i =0;i<n;i++)
{
if (i%2==0)
suma = a[i];
else
suma = (suma<<8)+a[i];
if (i%2==1 || i==n-1)
{
if (i==n-1 && n%2==1)
suma<<=8;
string s= "";
long long x= mapa2[suma];
while (x>0)
{
s=(char)(x%10 + '0') + s;
x/=10;
}
while (s.size()<10)
s="0"+s;
// cout<<s<<endl;
int array_to_send[10];
for(int j =0;j<10;j++)
{
int brojce = (int)(s[j]-'0');
send(start_from+brojce);
// if (i==n-1 && n%2==1 && j==4)
// break;
}
start_from+=10;
suma=0;
}
}
}
#include <bits/stdc++.h>
#include "decoder.h"
#include "decoderlib.h"
long long mapa2[92400];
int broj = 0;
map<long long ,int> mapa;
void rec(int posledno, int n, long long s,int depth){
if(depth==n)
{
mapa[s]=broj;
// mapa2[broj]=s;
//cout<<s<<" "<<broj<<endl;
broj++;
return;
}
for(long long i =posledno;i<n;i++)
{
rec(i,n,s*10LL+i,depth+1);
}
}
void rec2(int posledno, int n, long long s,int depth){
if(depth==n)
{
//mapa[s]=broj;
mapa2[broj]=s;
//cout<<s<<" "<<broj<<endl;
broj++;
return;
}
for(long long i =posledno;i<n;i++)
{
rec2(i,n,s*10LL+i,depth+1);
}
}
void decode(int n,int howmany2,int a[]){
broj = 0;
rec(0,10,0,0);
sort(a,a+howmany2);
/* for(int i =0;i<howmany2;i++)
cout<<a[i]<<" ";
cout<<endl;*/
long long s=0;
int mod = 1<<8;
int start_from = 0;
for(int i =0;i<howmany2;i++)
{
s=s*10LL+ (long long)(a[i]-start_from);
if (i%10==9 || i==howmany2-1)
{
//cout<<s<<endl;
//if (i==howmany2-1 && n%2==1)
//for(int j =0;j<5;j++)
// s+=s[5];
int converted = mapa[s];
output(converted/mod);
if (i==howmany2-1 && n%2==1)
break;
output(converted%mod);
start_from+=10;
s=0;
}
}
}