Submission #1356388

#TimeUsernameProblemLanguageResultExecution timeMemory
1356388Zbyszek99Casino (JOI26_casino)C++20
100 / 100
248 ms844 KiB
#include "Azzurro.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define ll long long
#define ld long double
#define ull unsigned long long
#define ff first
#define ss second
#define pii pair<int,int>
#define pll pair<long long, long long>
#define vi vector<int>
#define vl vector<long long>
#define pb push_back
#define rep(i, b) for(int i = 0; i < (b); ++i)
#define rep2(i,a,b) for(int i = a; i <= (b); ++i)
#define rep3(i,a,b,c) for(int i = a; i <= (b); i+=c)
#define count_bits(x) __builtin_popcountll((x))
#define all(x) (x).begin(),(x).end()
#define siz(x) (int)(x).size()
#define forall(it,x) for(auto& it:(x))
using namespace __gnu_pbds;
using namespace std;
typedef tree<int, null_type, less<int>, rb_tree_tag,tree_order_statistics_node_update> ordered_set;

vector<vi> Azzurro(int N, int n, string S) 
{
    vector<vi> ans(8,vi(8,0));
    int cnt = 0;
    rep(i,8) rep(j,8) if((i != 0 && j != 7) || j == 0 || i == 7) ans[i][j] = (S[cnt++]=='B');
    vector<pii> pom = {{0,1},{0,2},{0,3},{0,4},{0,5},{0,6},{0,7},{1,7},{2,7},{3,7},{4,7},{5,7},{6,7}};
    forall(it,pom)
    {
        int x = it.ff+2;
        int y = it.ss-2;
        int xor_ = 0;
        while(x <= 7 && y >= 0)
        {
            xor_ ^= ans[x][y];
            x += 2;
            y -= 2;
        }
        ans[it.ff][it.ss] = xor_;
    }
    return ans;
}
#include "Bordeaux.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define ll long long
#define ld long double
#define ull unsigned long long
#define ff first
#define ss second
#define pii pair<int,int>
#define pll pair<long long, long long>
#define vi vector<int>
#define vl vector<long long>
#define pb push_back
#define rep(i, b) for(int i = 0; i < (b); ++i)
#define rep2(i,a,b) for(int i = a; i <= (b); ++i)
#define rep3(i,a,b,c) for(int i = a; i <= (b); i+=c)
#define count_bits(x) __builtin_popcountll((x))
#define all(x) (x).begin(),(x).end()
#define siz(x) (int)(x).size()
#define forall(it,x) for(auto& it:(x))
using namespace __gnu_pbds;
using namespace std;
typedef tree<int, null_type, less<int>, rb_tree_tag,tree_order_statistics_node_update> ordered_set;

string Bordeaux(int N, int n, vector<vi> T) 
{
    string ans;
    vi snake;
    vector<pii> pom = {{0,1},{0,2},{0,3},{0,4},{0,5},{0,6},{0,7},{1,7},{2,7},{3,7},{4,7},{5,7},{6,7}};
    forall(it,pom)
    {
        int x = it.ff+2;
        int y = it.ss-2;
        int xor_ = 0;
        while(x <= 7 && y >= 0)
        {
            xor_ ^= T[x][y];
            x += 2;
            y -= 2;
        }
        if(xor_ == T[it.ff][it.ss]) snake.pb(1);
        else snake.pb(0);
    }
    pii cur = {0,0};
    T[0][0] ^= 1;
    int k = 0;
    forall(it,snake)
    {
        int x = pom[k].ff;
        int y = pom[k].ss;
        k++;
        if(it == 1) 
        {
            x++;
            y--;
        }
        while(abs(x-cur.ff)+abs(y-cur.ss) > 1)
        {
            x+=2;
            y-=2;
        }
        T[x][y] ^= 1;
        cur = {x,y};
    }
    T[7][7] ^= 1;
    rep(i,8) rep(j,8) if((i != 0 && j != 7) || j == 0 || i == 7) if(siz(ans) < n) ans += (T[i][j] == 1 ? 'B' : 'A');
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...