제출 #1363696

#제출 시각아이디문제언어결과실행 시간메모리
1363696solution6312Broken Device 2 (JOI22_device2)C++17
40 / 100
326 ms24280 KiB
#include "Anna.h"
#include <iostream>
#include <vector>
#include <cassert>
#include <algorithm>
using namespace std;
using ll=long long;

namespace encode
{
    const ll base[8]={1, 3, 8, 17, 35, 72, 146, 292};
    const ll prod[8]={1, 2, 8, 72, 1296, 46656, 3405888, 500665536};
    const ll sz[8]={1, 5, 18, 53, 141, 354, 854, 2000};
    int Declare() { return 2000; }
    pair<vector<int>, vector<int>> Anna(ll A)
    {
        assert(A<=1e11);
        cerr<<A<<endl;
        ll rep[8];
        for (int i=7; i>=0; i--)
        {
            rep[i]=A/prod[i];
            A%=prod[i];
        }
        for (int i=0; i<=7; i++) cerr<<rep[i]<<' '; cerr<<endl;
        string X[8], Y[8];
        for (int i=0; i<=7; i++)
        {
            assert(0<=rep[i] && rep[i]<=base[i]);
            for (int j=1; j<=rep[i]; j++) X[i]+='1';
            for (int j=rep[i]+1; j<=base[i]; j++) X[i]+='0';
            Y[i]=X[i]; reverse(Y[i].begin(), Y[i].end());
            //cerr<<i<<": "<<X[i]<<' '<<Y[i]<<endl;
        }
        string S, T;
        for (int i=0; i<=7; i++)
        {
            S=S+X[i]+S;
            T=T+Y[i]+T;
        }
        vector<int> svec, tvec;
        for (int i=0; i<2000; i++) svec.push_back(int(S[i]-'0'));
        for (int i=0; i<2000; i++) tvec.push_back(int(T[i]-'0'));
        return {svec, tvec};
    }
}
int Declare() { return encode::Declare(); }
pair<vector<int>, vector<int>> Anna(ll A) { return encode::Anna(A); }
#include "Bruno.h"
#include <iostream>
#include <vector>
#include <cassert>
#include <algorithm>
using namespace std;
using ll=long long;

namespace decode
{
    const ll base[8]={1, 3, 8, 17, 35, 72, 146, 292};
    const ll prod[8]={1, 2, 8, 72, 1296, 46656, 3405888, 500665536};
    const ll sz[8]={1, 5, 18, 53, 141, 354, 854, 2000};
    ll Bruno(vector<int> V)
    {
        for (int i=1; i<4000; i++) V[i]+=V[i-1];
        ll rep[8];
        for (int i=0; i<=7; i++) rep[i]=V[sz[i]-1];
        for (int i=7; i>=1; i--) rep[i]-=rep[i-1]*2;
        ll ans=0;
        for (int i=0; i<=7; i++)
        {
            assert(0<=rep[i] && rep[i]<=base[i]);
            ans+=rep[i]*prod[i];
            //cerr<<i<<": "<<rep[i]<<endl;
        }
        //cerr<<ans<<endl;
        return ans;
    }
}
ll Bruno(vector<int> u) { return decode::Bruno(u); }
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…