Submission #1337218

#TimeUsernameProblemLanguageResultExecution timeMemory
1337218edl0231Magic Show (APIO24_show)C++20
0 / 100
3 ms580 KiB
#include <bits/stdc++.h>
#define ll long long
//#include "grader.cpp"
//#include "Bob.cpp"
using namespace std;
#include "Alice.h"
const int sz = 128;
vector<pair<int, int>> encode(int layer, ll val)
{
    vector<pair<int, int>> ans;
    for (int i = 0; i < 64; i++) ans.emplace_back(layer * sz + i * 2 + 1, layer * sz + i * 2 + 2);
    string zw = "";
    if (val >= 0) zw += '1';
    else zw += '0';
    for (int i = 0; i < 63; i++) {if (val & ((ll)1 << ((i + layer) % 64))) zw += '1'; else zw += '0';}
    for (int i = 0; i < 63; i++)
    {
        ans.emplace_back((zw[i] - '0') + layer * sz + i * 2 + 1, (zw[i + 1] - '0') + layer * sz + i * 2 + 3);
    }
    return ans;
}
std::vector<std::pair<int,int>> Alice(){
    ll x = setN(4864);
    vector<pair<int, int>> ans;
    for (int i = 0; i < 38; i++)
    {
        vector<pair<int, int>> temp = encode(i, x);
        for (auto i : temp) ans.emplace_back(i);
    }
    for (int i = 0; i < 37; i++)
    {
        ans.emplace_back(sz * i + 1, sz * (i + 1) + 1);
    }
    return ans;
}
#include <bits/stdc++.h>
#define ll long long
#include "Bob.h"
//#include "grader.cpp"
using namespace std;

long long Bob(std::vector<std::pair<int,int>> V){
    vector<int> bitpos(64, -1);
    for (auto i : V)
    {
        if (((i.second - 1) >> 1) == ((i.first - 1) >> 1) + 1)
        {
            int layer = (i.first - 1) / 128;
            int curr = ((i.first - 1) >> 1) % 64;
            if (curr == 0)
            {
                if (i.first & 1) bitpos[0] = 0;
                else bitpos[0] = 1;
            }
            else
            {
                if (i.first & 1) bitpos[(curr + layer) % 64] = 0;
                else bitpos[(curr + layer) % 64] = 1;
            }
            if (i.second & 1) bitpos[(curr + layer + 1) % 64] = 0;
            else bitpos[(curr + layer + 1) % 64] = 1;
        }
    }
    ll ans = 0;
    for (int i = 0; i < 63; i++)
    {
        ans += bitpos[i + 1] * ((ll)1 << i);
    }
//    if (bitpos[0] == 0) ans = -ans;
    return ans; // change this into your code
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...