Submission #1019953

#TimeUsernameProblemLanguageResultExecution timeMemory
1019953UnforgettableplBroken Device 2 (JOI22_device2)C++17
25 / 100
387 ms28244 KiB
#include "Anna.h"
#include <bits/stdc++.h>
using namespace std;

const int M = 2000;

namespace {

vector<int> lookup = {
    0,
    1,
    3,
    7,
    15,
    31,
};

tuple<int,int,int,int> generate(long long x){
    long long curr = 0;
    for(int len=64;len<=M;len++){
        if(curr+36*(2*(len-2)-123)-1<x){
            curr+=36*(2*(len-2)-123);
            continue;
        }
        for(int turnedon=124;turnedon<=2*len-4;turnedon++){
            for(int starting=0;starting<6;starting++){
                for(int ending=0;ending<6;ending++){
                    if(curr++==x)return {len,turnedon,lookup[starting],lookup[ending]};
                }
            }
        }
    }
    assert(false);
}

}

int Declare() {return M;}

pair<vector<int>, vector<int>> Anna(long long A) {
    auto [len,ones,starting,ending] = generate(A);
    vector<int> a(len,0),b(len,0);
    for(int i=0;i<starting;i++){
        a[i]=b[i]=1;
        ones-=2;
    }
    for(int i=0;i<ending;i++){
        a[len-i-1]=b[len-i-1]=1;
        ones-=2;
    }
    for(int i=starting+1;i<len;i++){
        if(ones){a[i]=1;ones--;}
        if(ones){b[i]=1;ones--;}
    }
    return {a,b};
}
#include "Bruno.h"
#include <bits/stdc++.h>
using namespace std;

const int M = 2000;

namespace {


long long generate(int tarlen,int taron,int tarstarting,int tarending){
    long long curr = 0;
    for(int len=64;len<=M;len++){
        if(len!=tarlen){
            curr+=36*(2*(len-2)-123);
            continue;
        }
        for(int turnedon=124;turnedon<=2*len-4;turnedon++){
            if(turnedon!=taron){curr+=36;continue;}
            for(int starting=0;starting<6;starting++){
                if(starting!=tarstarting){curr+=6;continue;}
                for(int ending=0;ending<6;ending++){
                    if(ending==tarending)return curr;
                    curr++;
                }
            }
        }
    }
    assert(false);
}

}

long long Bruno(vector<int> u) {
    int len = u.size()/2;
    int ones = 0;
    for(int&i:u)ones+=i;
    int starting = 0;
    for(int&i:u){
        if(i) starting++;
        else break;
    }
    reverse(u.begin(),u.end());
    int ending = 0;
    for(int&i:u){
        if(i) ending++;
        else break;
    }
    if(0<=starting and starting<=0)starting=0;
    else if(1<=starting and starting<=2)starting=1;
    else if(3<=starting and starting<=6)starting=2;
    else if(7<=starting and starting<=14)starting=3;
    else if(15<=starting and starting<=30)starting=4;
    else if(31<=starting and starting<=62)starting=5;
    if(0<=ending and ending<=0)ending=0;
    else if(1<=ending and ending<=2)ending=1;
    else if(3<=ending and ending<=6)ending=2;
    else if(7<=ending and ending<=14)ending=3;
    else if(15<=ending and ending<=30)ending=4;
    else if(31<=ending and ending<=62)ending=5;
    return generate(len,ones,starting,ending);
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...