Submission #256960

#TimeUsernameProblemLanguageResultExecution timeMemory
256960b00n0rpVision Program (IOI19_vision)C++17
46 / 100
10 ms1272 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){
	REP(i,H){
		vi v;
		REP(j,W) v.pb(i*W+j);
		xorrow.pb(add_xor(v));
	}
	REP(j,W){
		vi v;
		REP(i,H) v.pb(i*W+j);
		xorcol.pb(add_xor(v));
	}
	int cur = add_or(xorrow);
	diffrow[0] = add_not(cur);
	cur = add_or(xorcol);
	diffcol[0] = add_not(cur);
	FOR(k,1,K+1){
		vi vrow,vcol;
		REP(i,H-k) vrow.pb(add_and({xorrow[i],xorrow[i+k]}));
		REP(i,W-k) vcol.pb(add_and({xorcol[i],xorcol[i+k]}));

		if(vrow.size()) diffrow[k] = add_or(vrow);
		else diffrow[k] = -1;

		if(vcol.size()) diffcol[k] = add_or(vcol);
		else diffcol[k] = -1;
	}
	vi ans;
	REP(k,K+1){
		if(diffrow[k] != -1 and diffcol[K-k] != -1)
		ans.pb(add_and({diffrow[k],diffcol[K-k]}));
	}
	add_or(ans);
}
#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...