Submission #257005

#TimeUsernameProblemLanguageResultExecution timeMemory
257005b00n0rpVision Program (IOI19_vision)C++17
67 / 100
9 ms1400 KiB
#include "vision.h"
#include<bits/stdc++.h>
using namespace std;

#define REP(i,n) for(int i = 0; i < n; i ++)
#define FOR(i,a,b) for(int i = a; i < b; i++)
#define vi vector<int>
#define pb push_back

vi xorrow,xorcol;
int diffrow[205],diffcol[205];

void construct_network(int H, int W, int K){
	// srand(time(0));

	if(max(H,W) <= 100 or min(H,W) == 1){
		int cnt = 0;
		REP(i,H){
			vi v;
			REP(j,W) v.pb(i*W+j);
			xorrow.pb(add_xor(v));
			cnt++;
		}
		REP(j,W){
			vi v;
			REP(i,H) v.pb(i*W+j);
			xorcol.pb(add_xor(v));
			cnt++;
		}
		int cur = add_or(xorrow);
		diffrow[0] = add_not(cur);
		cur = add_or(xorcol);
		diffcol[0] = add_not(cur);
		cnt+=4;
		vi ignore;
		if(K > 80 and K <= 105) ignore = {41,17,70,79};
		else ignore = {-1,-1,-1,-1};
		FOR(k,1,K+1){
			vi vrow,vcol;
			if((!(k == ignore[0] or k == ignore[1] or k == ignore[2] or k == ignore[3])) and k+W-1 >= K)
			REP(i,H-k){
				vrow.pb(add_and({xorrow[i],xorrow[i+k]}));
				cnt++;
			}
			if((!(k == K-ignore[0] or k == K-ignore[1] or k == K-ignore[2] or k == K-ignore[3])) and k+H-1 >= K)
			REP(i,W-k){
				vcol.pb(add_and({xorcol[i],xorcol[i+k]}));
				cnt++;
			}
			if(vrow.size()){
				diffrow[k] = add_or(vrow);
				cnt++;
			}
			else diffrow[k] = -1;

			if(vcol.size()){
				diffcol[k] = add_or(vcol);
				cnt++;
			}
			else diffcol[k] = -1;
		}
		vi ans;
		REP(k,K+1){
			if(diffrow[k] == -1 or diffcol[K-k] == -1) continue;

			ans.pb(add_and({diffrow[k],diffcol[K-k]}));
			cnt++;
		}
		// cout << cnt << " :-<\n";
		add_or(ans);
	}
	else{
		vi v;
		REP(i1,1){
			REP(j1,1){
				REP(i2,H){
					REP(j2,W){
						if(i1*W+j1 < i2*W+j2 and abs(i1-i2)+abs(j1-j2) == K){
							v.pb(add_and({i1*W+j1,i2*W+j2}));
						}
					}
				}
			}
		}
		add_or(v);
	}
}
#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...