Submission #1214636

#TimeUsernameProblemLanguageResultExecution timeMemory
1214636edogawa_somethingTricolor Lights (JOI24_tricolor)C++20
0 / 100
47 ms21156 KiB
#include "Anna.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vii;
typedef pair<ll,ll> pii;
#define F first 
#define S second 
#define pb push_back
#define all(v) v.begin(),v.end()
const ll M=6e5+10;
const ll inf=2e18;
namespace{
vii v,c,pr;
bool vis[M];
void dfs(ll x){
    if(vis[x])
    return;
    vis[x]=1;
    x/=2;
    if(vis[x]&&vis[x+(1<<17)])
    return;
    if(vis[x+(1<<17)])
    v.pb(0),dfs(x);
    else 
    v.pb(1),dfs(x+(1<<17));
}
void push(ll x){
    bool vis[3];
    vis[0]=vis[1]=vis[2]=0;
    if(c.empty()){
        vis[pr[0]]=1;
        for(int i=0;i<3;i++){
            if(!vis[i]){
                c.pb(i);
                break;
            }
        }
        vis[pr[0]]=0;
        vis[c[0]]=1,vis[pr[1]]=1;
        for(int i=0;i<3;i++){
            if(!vis[i]){
            c.pb(i);
            break;
            }
        }
        vis[0]=vis[1]=vis[2]=0;
        vis[c[1]]=1,vis[pr[2]]=1;
        for(int i=0;i<3;i++){
            if(!vis[i]){
            c.pb(i);
            break;
            }
        }
    }
    else if(x==0){
        vis[c.back()]=1;
        vis[pr[c.size()]]=1;
        for(int i=0;i<3;i++){
            if(!vis[i]){
            c.pb(i);
            break;
            }
        }
        vis[0]=vis[1]=vis[2]=0;
        vis[c.back()]=1;
        vis[pr[c.size()]]=1;
        for(int i=0;i<3;i++){
            if(!vis[i]){
            c.pb(i);
            break;
            }
        }
    }
    else{
        vis[c.back()]=1;
        vis[pr[c.size()]]=1;
        vis[pr[c.size()+1]]=1;
        if(vis[0]&&vis[1]&&vis[2])
        vis[c.back()]=0;
        for(int i=0;i<3;i++){
            if(!vis[i]){
                c.pb(i);
                c.pb(i);
                break;
            }
        }
        vis[0]=vis[1]=vis[2]=0;
        vis[c.back()]=vis[pr[c.size()]]=1;
        for(int i=0;i<3;i++){
            if(!vis[i]){
                c.pb(i);
                break;
            }
        }
    }
}
};
pair<string, int> anna(int N,string s) {
    for(auto it:s){
        if(it=='G')
        pr.pb(1);
        if(it=='R')
        pr.pb(0);   
        if(it=='B')
        pr.pb(2);
    }
    while(pr.size()<M)
    pr.pb(0);
    for(int i=0;i<18;i++)
    v.pb(0);
    dfs(0); 
    string ans;
    for(auto it:v)
    push(it);
    for(int i=0;i<N;i++){
        if(c[i]==1)
        ans.pb('G');
        if(c[i]==0)
        ans.pb('R');
        if(c[i]==2)
        ans.pb('B');
    }
    return make_pair(ans,min(N,60));
}
#include "Bruno.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vii;
typedef pair<ll,ll> pii;
#define F first 
#define S second 
#define pb push_back
#define all(v) v.begin(),v.end()
const ll M=6e5+10;
const ll inf=2e18;
namespace {
bool vis[M];
vii v;
void dfs(ll x){
    if(vis[x])
    return;
    v.pb(x);
    vis[x]=1;
    x/=2;
    if(vis[x]&&vis[x+(1<<17)])
    return;
    if(vis[x+(1<<17)])
    dfs(x);
    else 
    dfs(x+(1<<17));
}
ll n,L;
};
ll ind[M];
void init(int N, int l) {
	n=N;
	L=l;
	dfs(0);
	for(int i=0;i<v.size();i++)
	ind[v[i]]=2*i+1;
}
int bruno(string u) {
	vii c;
	if(n==L)
	return 1;
	for(int i=0;i<u.size()-1;i++){
		if(u[i]==u[i+1])
		c.pb(0);
		else
		c.pb(1);
	}
	bool odd=0;
	bool cc=0;
	for(int i=0;i<c.size()-1;i++){
		if(c[i]==0&&c[i+1]==1){
			if(i%2==cc){
			odd=1;
			}
			else
			cc^=1;
		}
	}
	ll x=0;
	ll cnt=0;
	for(int i=odd;cnt<18;i+=2){
		if(c[i+1]==0){
		x+=(1<<cnt);
		cnt++;
		i++;
		}
		else
		cnt++;
	}
	x=ind[x];
  	return x-odd;
}
#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...