# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1008551 | 2024-06-26T14:18:16 Z | Math4Life2020 | 마술쇼 (APIO24_show) | C++17 | 0 ms | 0 KB |
// Source: https://usaco.guide/general/io #include <bits/stdc++.h> #include "Alice.h" using namespace std; using ll = long long; using ld = long double; using pii = pair<ll,ll>; ll N = 5000; ll E = 60; ld seed = 0.697810983; ld getseed() { seed = 3.60*seed*(1.0-seed); return seed; } ll getrng(ll x) { //random integer in [0,x-1] return (((ll) round(1912873139*getseed()))%x); } ll l2(ll x) { return (31-__builtin_clz(x)); } vector<pair<int,int>> Alice() { ll X = setN((int) N); vector<pii> vout; vector<ll> xv; for (ll e=(E-1);e>=0;e--) { xv.push_back((X>>e)%2); } for (ll n=1;n<N;n++) { ll D = l2(n)-1; ll val = 0; for (ll d=0;d<D;d++) { ll e = getrng(E); val += xv[e]*(1LL<<d); } vout.push_back({val+1,n+1}); } return vout; } long long Bob(vector<pair<int,int>> V) { ll vals[N]; for (ll i=0;i<N;i++) { vals[i]=-1; } for (pii p0: V) { vals[p0.second-1]=p0.first-1; } vector<ll> xv; for (ll e=(E-1);e>=0;e--) { xv.push_back(-1); } for (ll n=1;n<N;n++) { ll D = l2(n)-1; for (ll d=0;d<D;d++) { ll e = getrng(E); //val += xv[e]*(1LL<<d); if (vals[n]!=-1) { xv[e]=(vals[n]>>d)%(2LL); } } } ll X = 0; for (ll e=0;e<E;e++) { X += xv[e]*(1LL<<(E-1-e)); } return X; }