| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1308905 | ojuz_user | Data Transfer (IOI19_transfer) | C++20 | 0 ms | 0 KiB |
#include "transfer.h"
#include <bits/stdc++.h>
using namespace std;
#define file "o"
#define ff(i, a, b) for(auto i=(a); i<=(b); ++i)
#define ffr(i, b, a) for(auto i=(b); i>=(a); --i)
#define nl "\n"
#define ss " "
#define pb emplace_back
#define fi first
#define se second
#define sz(s) (int)s.size()
#define all(s) (s).begin(), (s).end()
#define ms(a,x) memset(a, x, sizeof (a))
#define cn continue
#define re exit(0)
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
inline ll ran(ll l, ll r)
{
return uniform_int_distribution<ll> (l, r)(rng);
}
inline void rf()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
if(fopen(file".inp","r"))
{
freopen(file".inp","r",stdin);
freopen(file".out","w",stdout);
}
}
const int mod=998244353;
const int maxn=2e5+15;
const ll inf=1e18;
template<typename T> inline void add(T &x, const T &y)
{
x+=y;
if(x>=mod) x-=mod;
if(x<0) x+=mod;
}
template<typename T> inline bool maxi(T &a, T b)
{
if(a>=b) return 0;
a=b; return 1;
}
template<typename T> inline bool mini(T &a, T b)
{
if(a<=b) return 0;
a=b; return 1;
}
vi get_attachment(vi source)
{
int n=sz(source), k;
if(n==63) k=7;
else k=9;
int totxor=0;
ff(i, 0, n-1) if(source[i]==1) totxor^=i;
vi v;
int cnt=0;
ff(i, 0, k-2)
{
if((totxor>>i)&1) ++cnt, v.pb(1);
else v.pb(0);
}
v.pb(cnt%2);
return v;
}
vi retrieve(vi data)
{
int n=sz(data), k;
if(n==70) k=7;
else k=9;
n-=k;
int totxor=0, cnt=0;
ff(i, n, n+k-2) if(data[i]==1) totxor|=(1<<(i-n)), ++cnt;
vi ans;
ff(i, 0, n-1) ans.pb(data[i]);
if(cnt%2!=v.back()) return ans;
else
{
int pos=totxor;
ff(i, 0, n-1) if(ans[i]==1) pos^=i;
ans[pos]=1-ans[pos];
}
return ans;
}
