Submission #1262150

#TimeUsernameProblemLanguageResultExecution timeMemory
1262150Szymon_PilipczukBroken Device (JOI17_broken_device)C++20
100 / 100
20 ms1508 KiB
#include "Annalib.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define st first
#define nd second
#define pb push_back
#define all(a) a.begin(),a.end()
#define rep(a,b) for(int a = 0;a<b;a++)
const int inf = 1e9;
const ll infl = 1e18;
void Anna(int n, ll x,int k,int cc[])
{
    int j = 0;
    vector<int> p;
    rep(i,k)
    {
        p.pb(cc[i]);
    }
    p.pb(inf);
    for(int i = 0;i<n;i+=3)
    {
        vector<int> val(3,0);
        if(p[j] == i)
        {
            j++;
            if(p[j] != i+1 && p[j] != i+2)
            {
                if(x%2 == 0)
                {
                    val[2] = 1;
                }
                else
                {
                    val[1] = 1;
                    val[2] = 1;
                }
                x/=2;
            }
        }
        else if(p[j] == i+1)
        {
            j++;
            if(p[j] != i+2)
            {
                if(x%2 == 0)
                {
                    val[2] = 1;
                }
                else
                {
                    val[0] = 1;
                }
                x/=2;
            }
        }
        else if(p[j] == i+2)
        {
            if(x%4 == 0)
            {
                val[1] = 1;
                x/=4;
            }
            else if(x%4 == 2)
            {
                val[0] = 1;
                val[1] = 1;
                x/=4;
            }
            else
            {
                val[0] = 1;
                x/=2;
            }
        }
        else
        {
            if(x%4 == 0)
            {
                val[1] = 1;
            }
            else if(x%4 == 1)
            {
                val[0] = 1;
                val[2] = 1;
            }
            else if(x%4 == 2)
            {
                val[0] = 1;
                val[1] = 1;
            }
            else
            {
                val[0] = 1;
                val[1] = 1;
                val[2] = 1;
            }
            x/=4;
        }
        while(p[j] < i + 3) j++;
        rep(q,3)
        {
            Set(i+q,val[q]);
            //cerr<<val[q]<<" ";
        }
    }
    //cerr<<"\n";
}
#include "Brunolib.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define st first
#define nd second
#define pb push_back
#define all(a) a.begin(),a.end()
#define rep(a,b) for(int a = 0;a<b;a++)
const int inf = 1e9;
const ll infl = 1e18;
ll Bruno(int n,int a[])
{
    int j = 0;
    ll ans = 0;
    for(int i = 0;i<n;i+=3)
    {
        int val = 4 * a[i] + 2 * a[i+1] + a[i+2];
        if(val == 1)
        {
            j++;
        }
        else if(val == 2)
        {
            j+=2;
        }
        else if(val == 3)
        {
            ans += (1LL<<j);
            j++;
        }
        else if(val == 4)
        {
            ans += (1LL<<j);
            j++;
        }
        else if(val == 5)
        {
            ans += (1LL<<j);
            j+=2;
        }
        else if(val == 6)
        {
            ans += (1LL<<j) * 2;
            j+=2;
        }
        else if(val == 7)
        {
            ans += (1LL<<j) * 3;
            j+=2;
        }
        //cerr<<ans<<" "<<a[i]<<" "<<a[i+1]<<" "<<a[i+2]<<"\n";
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...