Submission #838497

#TimeUsernameProblemLanguageResultExecution timeMemory
838497fatemetmhrVision Program (IOI19_vision)C++17
100 / 100
13 ms1864 KiB
// ~ Be Name Khoda ~ // #include "vision.h" #include <bits/stdc++.h> //#pragma GCC optimize ("O3") //#pragma GCC target("avx2") //#pragma GCC optimize("unroll-loops,Ofast") using namespace std; typedef long long ll; #define pb push_back #define mp make_pair #define all(x) x.begin(), x.end() #define fi first #define se second #define debug(x) cerr << "(" << (#x) << "): " << (x) << endl; const int maxn = 1e6 + 10; const int maxn5 = 5e5 + 10; const int maxnt = 1.2e6 + 10; const int maxn3 = 1e3 + 10; const int mod = 1e9 + 7; const ll inf = 1e18; int bt0, bt1; vector <int> have; vector <int> full_adder(vector <int> a, vector <int> b){ int sz = int(max(a.size(), b.size())) + 1; while(int(a.size()) < sz) a.pb(bt0); while(int(b.size()) < sz) b.pb(bt0); vector <int> ret, c; c.pb(bt0); for(int i = 0; i < sz; i++){ int cur = add_xor(vector <int> ({a[i], b[i], c[i]})); ret.pb(cur); cur = add_not(cur); int an = add_and(vector <int> ({a[i], b[i], c[i]})); int oR = add_or(vector <int> ({a[i], b[i], c[i]})); oR = add_and(vector <int> ({cur, oR})); c.pb(add_or(vector <int> ({an, oR}))); } return ret; debug("Adding "); for(auto u : a) cerr << u + 1 << ' ' ; cerr << endl; for(auto u : b) cerr << u + 1 << ' '; cerr << endl; for(auto u : ret) cerr << u + 1 << ' '; cerr << endl; } vector <int> build(int l, int r){ if(r - l == 1) return {have[l]}; int mid = (l + r) >> 1; vector <int> r1 = build(l, mid); vector <int> r2 = build(mid, r); return full_adder(r1, r2); } void construct_network(int n, int m, int k) { vector<int> av; bt0 = add_xor(vector <int> ({0, 0})); bt1 = add_not(bt0); int cur = -1; for(int i = 0; i < n; i++){ av.clear(); for(int j = 0; j < m; j++) av.pb(i * m + j); int a = add_xor(av); if(i) cur = add_xor(vector <int> ({cur, a})); else cur = a; have.pb(cur); } for(int j = 0; j < m; j++){ av.clear(); for(int i = 0; i < n; i++) av.pb(i * m + j); int a = add_xor(av); if(j) cur = add_xor(vector <int> ({cur, a})); else cur = a; have.pb(cur); } vector <int> ans = build(0, have.size()); vector <int> ch; for(int i = 0; i < int(ans.size()); i++){ if((k >> i)&1) ch.pb(add_and(vector <int> ({bt1, ans[i]}))); else ch.pb(add_xor(vector <int> ({bt1, ans[i]}))); } add_and(ch); }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...