Submission #1200724

#TimeUsernameProblemLanguageResultExecution timeMemory
1200724MighilonMagic Show (APIO24_show)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
 
#ifdef DEBUG
#include "../Library/debug.h"
#else
#include "Alice.h"
#define dbg(x...)
#endif

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pi;
typedef pair<ll, ll> pl;
typedef vector<int> vi;
typedef vector<bool> vb;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl; 
 
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define F0R(i, a) for (int i = 0; i < (a); ++i)
#define FORd(i, a, b) for (inBobt i = (b) - 1; i >= (a); --i)
#define F0Rd(i, a) for (int i = (a) - 1; i >= 0; --i)
#define trav(a, x) for (auto& a : x)
#define f first 
#define s second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) x.begin(), x.end()
 
const char nl = '\n';
const int INF = 1e9;
const ll MOD = 998244353;
const int mxN = 3e5+5;

#define DEBUG
#ifdef DEBUG
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int N, M;
ll setN(int x){
    N=x;
    return M=uniform_int_distribution(1,int(1e18))(rng);
}
#endif

vpi Alice(){
    int n = 5000;
    ll x = setN(n);
    vpi res;
    FOR(i,2,n+1){
        res.pb({(x%(i-1))+1,i});
    }
    return res;
}

namespace BOB{
    ll ex_gcd(ll a,ll b,ll& x,ll& y){
        if(b==0){
            x=1;
            b=0;
            return a;
        }
        ll x1=0,y1=0;
        ll d=ex_gcd(b,a%b,x1,y1);
        x=y1;
        y=x1-a/b*y1;
        return d;
    }

    ll mul(ll a, ll b, ll m){
        ll s=1;
        if(b<0)s=-1,b*=-1;
        ll ans=0;
        while(b>0){
            if(b%2==1)ans=(ans+s*a)%m;
            b>>=1;
            a=(a+a)%m;
        }
        return ans;
    }
    ll Bob(vpi v){
        ll num[19];
        num[0]=1;
        F0R(i,18) num[i+1]=num[i]*10;
        auto check=[&](ll a, ll b){
            int x=0,y=0;
            F0R(i,19)if(a<num[i]){
                x=i;
                break;
            }
            if(a&&!x) x=19;
            if(b&&!y) y=19;
            F0R(i,19)if(b<num[i]){
                y=i;
                break;
            }
            return (x+y)<=20;
        };
        ll res=0;
        ll m=1;
        trav(i,v){
            i.f-=1;
            i.s-=1;
            ll x, y,d;
            d=ex_gcd(m,i.s,x,y);
            assert((res-i.f)%d==0);
            if(!check(m,i.s))
                return res;
            // res = res+(i.f-res)/d*x%(i.s/d)*m;
            res = res + mul(mul((i.f-res)/d, x,(i.s/d)),m,(m/d*i.s));
            m = m/d*i.s;
            res%=m;
            if(res<0)res+=m;
        }
        return res;
    }
    
}


#ifdef DEBUG
int main(){
    auto gen=[&](ll a, ll b){
        return uniform_int_distribution(a,b)(rng);
    };
    int cnt=0;
    while(1){
        vpi edges = Alice();
        // dbg(edges)
        shuffle(all(edges),rng);
        int rem=gen(1,N/2);
        dbg(++cnt,rem);
        edges.erase(edges.end()-rem, edges.end());
        // dbg(edges)
        ll ans = BOB::Bob(edges);
        if(ans != M){
            dbg(N,M,ans);
            return 0;
        }
    }
    return 1;
}
#endif
#include <bits/stdc++.h>
using namespace std;
 
#ifdef DEBUG
#include "../Library/debug.h"
#else
#include "Bob.h"
#define dbg(x...)
#endif
 
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pi;
typedef pair<ll, ll> pl;
typedef vector<int> vi;
typedef vector<bool> vb;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl; 
 
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define F0R(i, a) for (int i = 0; i < (a); ++i)
#define FORd(i, a, b) for (int i = (b) - 1; i >= (a); --i)
#define F0Rd(i, a) for (int i = (a) - 1; i >= 0; --i)
#define trav(a, x) for (auto& a : x)
#define f first 
#define s second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) x.begin(), x.end()
 
const char nl = '\n';
const int INF = 1e9;
const int MOD = 1e9 + 7;

 ll ex_gcd(ll a,ll b,ll& x,ll& y){
        if(b==0){
            x=1;
            b=0;
            return a;
        }
        ll x1=0,y1=0;
        ll d=ex_gcd(b,a%b,x1,y1);
        x=y1;
        y=x1-a/b*y1;
        return d;
    }

    ll mul(ll a, ll b, ll m){
        ll s=1;
        if(b<0)s=-1,b*=-1;
        ll ans=0;
        while(b>0){
            if(b%2==1)ans=(ans+s*a)%m;
            b>>=1;
            a=(a+a)%m;
        }
        return ans;
    }
    ll Bob(vpi v){
        ll num[19];
        num[0]=1;
        F0R(i,18) num[i+1]=num[i]*10;
        auto check=[&](ll a, ll b){
            int x=0,y=0;
            F0R(i,19)if(a<num[i]){
                x=i;
                break;
            }
            if(a&&!x) x=19;
            if(b&&!y) y=19;
            F0R(i,19)if(b<num[i]){
                y=i;
                break;
            }
            return (x+y)<=20;
        };
        ll res=0;
        ll m=1;
        trav(i,v){
            i.f-=1;
            i.s-=1;
            ll x, y,d;
            d=ex_gcd(m,i.s,x,y);
            assert((res-i.f)%d==0);
            if(!check(m,i.s))
                return res;
            // res = res+(i.f-res)/d*x%(i.s/d)*m;
            res = res + mul(mul((i.f-res)/d, x,(i.s/d)),m,(m/d*i.s));
            m = m/d*i.s;
            res%=m;
            if(res<0)res+=m;
        }
        return res;
    }
    

Compilation message (stderr)

# 1번째 컴파일 단계

/usr/bin/ld: /tmp/cck5ouBw.o: in function `setN(int)':
grader_alice.cpp:(.text+0x80): multiple definition of `setN(int)'; /tmp/cchbxGul.o:Alice.cpp:(.text+0x7a0): first defined here
/usr/bin/ld: /tmp/cck5ouBw.o: in function `main':
grader_alice.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cchbxGul.o:Alice.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status