제출 #144868

#제출 시각아이디문제언어결과실행 시간메모리
144868eriksuenderhaufVision Program (IOI19_vision)C++14
100 / 100
29 ms3452 KiB
//#pragma GCC optimize("O3") #include <bits/stdc++.h> #include "vision.h" #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <ext/rope> #define mem(a,v) memset((a), (v), sizeof (a)) #define enl printf("\n") #define case(t) printf("Case #%d: ", (t)) #define ni(n) scanf("%d", &(n)) #define nl(n) scanf("%I64d", &(n)) #define nai(a, n) for (int i = 0; i < (n); i++) ni(a[i]) #define nal(a, n) for (int i = 0; i < (n); i++) nl(a[i]) #define pri(n) printf("%d\n", (n)) #define prl(n) printf("%I64d\n", (n)) #define pii pair<int, int> #define pil pair<int, long long> #define pll pair<long long, long long> #define vii vector<pii> #define vil vector<pil> #define vll vector<pll> #define vi vector<int> #define vl vector<long long> #define pb push_back #define mp make_pair #define fi first #define se second using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef cc_hash_table<int,int,hash<int>> ht; typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> oset; const double pi = acos(-1); const int MOD = 1e9 + 7; const int INF = 1e9 + 7; const int MAXN = 4e3 + 5; const double eps = 1e-9; vi diag1[MAXN], diag2[MAXN]; int H, W, arr1[MAXN], arr2[MAXN]; int get(int i, int j) { if (i < 0 || j < 0 || H <= i || W <= j) return -1; return i*W + j; } void construct_network(int H, int W, int K) { ::H = H; ::W = W; vi Ns; int cnt = H*W; for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { diag1[i+j].pb(get(i,j)); diag2[i-j+W-1].pb(get(i,j)); } } for (int i = 0; i <= (H-1) + (W-1); i++) { if (diag1[i].empty()) continue; arr1[i] = cnt; Ns.clear(); for (int j: diag1[i]) Ns.pb(j); if (i) Ns.pb(arr1[i-1]); add_xor(Ns); cnt++; } for (int i = 0; i <= (H-1) + (W-1); i++) { if (diag2[i].empty()) continue; arr2[i] = cnt; Ns.clear(); for (int j: diag2[i]) Ns.pb(j); if (i) Ns.pb(arr2[i-1]); add_xor(Ns); cnt++; } vi tmp[2]; for (int k = K; k <= K+1; k++) { tmp[k-K].clear(); for (int i = 0; i + k-1 <= (H-1) + (W-1); i++) { Ns.clear(); for (int j = 0; j < k; j++) Ns.pb(arr1[i+j]); add_and(Ns); tmp[k-K].pb(cnt++); Ns.clear(); for (int j = 0; j < k; j++) Ns.pb(arr2[i+j]); add_and(Ns); tmp[k-K].pb(cnt++); } } add_or(tmp[0]); add_or(tmp[1]); add_xor({cnt,cnt+1}); }
#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...