Submission #1208374

#TimeUsernameProblemLanguageResultExecution timeMemory
1208374Ghulam_JunaidBroken Device (JOI17_broken_device)C++20
0 / 100
22 ms1344 KiB
#include <bits/stdc++.h>
#include "Annalib.h"
using namespace std;

typedef long long ll;

void Anna(int n, ll X, int m, int pos[] ){
    bool allowed[n] = {};
    for (ll i = 0; i < n; i ++)
        allowed[i] = 1;
    for (ll i = 0; i < m; i ++)
        allowed[pos[i]] = 0;

    map<ll, string> mp;
    mp[0] = "";
    mp[1] = "0";
    mp[2] = "1";
    mp[3] = "10";
    mp[4] = "01";
    mp[5] = "1";
    mp[6] = "00";
    mp[7] = "11";

    ll b = 0;
    for (ll i = 0; i < n; i += 3){
        if (b >= 60){
            Set(i, 0); Set(i + 1, 0); Set(i + 2, 0);
            continue;
        }

        bool nxt[2] = {((1ll << b) & X), ((1ll << (b + 1)) & X)};

        ll best = 0;
        ll mask = allowed[i + 2] + 2 * allowed[i + 1] + 4 * allowed[i];
        for (ll make = 0; make < 8; make ++){
            if (make & mask != make) continue;
            bool good = 1;
            for (ll j = 0; j < mp[make].size(); j ++)
                good &= (nxt[j] == mp[make][j] - '0');

            if (good and mp[make].size() > mp[best].size())
                best = make;
        }

        for (ll j = 2; j >= 0; j --){
            if ((1ll << j) & best)
                Set(i + 2 - j, 1);
            else
                Set(i + 2 - j, 0);
        }
        b += mp[best].size();
    }   
}


/*
10
150 1000000000000000000 10 
0 1 2 3 4 5 6 7 8 10  
150 102123124767219381 1
0 
150 124397182346812734 2
0 1
150 82137459812635685 1
1
150 1 1 
1
150 2 1
1
150 3 1
1
150 4 1
1
150 5 1
1
150 6 1
1
*/ 
#include <bits/stdc++.h>
#include "Brunolib.h"
using namespace std;

typedef long long ll;

ll Bruno(int n, int a[]){
    map<ll, string> mp;
    mp[0] = "";
    mp[1] = "0";
    mp[2] = "1";
    mp[3] = "10";
    mp[4] = "01";
    mp[5] = "1";
    mp[6] = "00";
    mp[7] = "11";

    ll x = 0, b = 0;
    for (ll i = 0; i < n; i += 3){
        ll mask = 4 * a[i] + 2 * a[i + 1] + a[i + 2];
        for (ll j = 0; j < (mp[mask].size()); j ++){
            char c = mp[mask][j];
            if (c == '1')
                x += (1ll << b);
            b++;
        }
    }
    return x;
}

Compilation message (stderr)

# 1번째 컴파일 단계

Anna.cpp: In function 'void Anna(int, ll, int, int*)':
Anna.cpp:31:36: warning: narrowing conversion of '((1 << b) & X)' from 'long long int' to 'bool' [-Wnarrowing]
   31 |         bool nxt[2] = {((1ll << b) & X), ((1ll << (b + 1)) & X)};
      |                        ~~~~~~~~~~~~^~~~
Anna.cpp:31:60: warning: narrowing conversion of '((1 << (b + 1)) & X)' from 'long long int' to 'bool' [-Wnarrowing]
   31 |         bool nxt[2] = {((1ll << b) & X), ((1ll << (b + 1)) & X)};
      |                                          ~~~~~~~~~~~~~~~~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...