Submission #146908

#TimeUsernameProblemLanguageResultExecution timeMemory
146908dennisstarVision Program (IOI19_vision)C++17
100 / 100
36 ms3452 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vim;
int chk[40010];
vim ans;
int H, W;
void f(int K)
{ 
	vim Ns;
	vim x, y, z;
	int i, j, k;
	for (i=0; i<H*W; i++) Ns.push_back(i);
	int no=add_xor(Ns);
	if (H+W-2<K) {
		ans.push_back(no);
		return ;
	}
	k=0;
	for (i=0; i<H+W-1; i++) {
		Ns={};
		for (j=max(0, i-W+1); j<H&&(i-j)<W&&j<=i; j++, k++) Ns.push_back(W*j+(i-j));
		x.push_back(add_or(Ns));
	}
	if (k!=H*W) {
		puts("Error 1");
		printf("%d", 1/0);
	}
	k=0;
	for (i=-W+1; i<H; i++) {
		Ns={};
		for (j=max(i, 0); j<H&&j-i<W; j++, k++) Ns.push_back(j*(W+1)-i);
		y.push_back(add_or(Ns));
	}
	if (k!=H*W) {
		puts("Error 1");
		printf("%d", 1/0);
	}
	int a1[410], a2[410];

	a1[H+W-2]=add_or({x[H+W-2]});
	for (i=H+W-3; i>=K; i--) {
		a1[i]=add_or({a1[i+1],x[i]});
	}
	a2[0]=add_or({x[0]});
	for (i=1; i<H+W-1-K; i++) {
		a2[i]=add_or({a2[i-1],x[i]});
	}
	z.push_back(add_and({a1[K], x[0]}));
	int n1, n2;
	for (i=1; i<H+W-1; i++) {
		n1=n2=-1;
		if (i+K<H+W-2) n1=a1[i+K];
		if (i>=K) n2=a2[i-K];
		if (n1==-1&&n2==-1) continue;
		else if (n1==-1&&n2!=-1) n1=n2;
		else if (n2!=-1&&n2!=-1) n1=add_or({n1, n2});
		z.push_back(add_and({n1, x[i]}));
	}

	a1[H+W-2]=add_or({y[H+W-2]});
	for (i=H+W-3; i>=K; i--) {
		a1[i]=add_or({a1[i+1],y[i]});
	}
	a2[0]=add_or({y[0]});
	for (i=1; i<H+W-1-K; i++) {
		a2[i]=add_or({a2[i-1],y[i]});
	}
	z.push_back(add_and({a1[K], y[0]}));
	for (i=1; i<H+W-1; i++) {
		n1=n2=-1;
		if (i+K<H+W-2) n1=a1[i+K];
		if (i>=K) n2=a2[i-K];
		if (n1==-1&&n2==-1) continue;
		else if (n1==-1&&n2!=-1) n1=n2;
		else if (n2!=-1&&n2!=-1) n1=add_or({n1, n2});
		z.push_back(add_and({n1, y[i]}));
	}

	ans.push_back(add_or(z));
}
void construct_network(int h, int w, int K) {
	ans={};
	H=h, W=w;
	f(K);
	f(K+1);
	ans[1]=add_not(ans[1]);
	add_and(ans);
}

Compilation message (stderr)

vision.cpp: In function 'void f(int)':
vision.cpp:27:17: warning: division by zero [-Wdiv-by-zero]
   printf("%d", 1/0);
                ~^~
vision.cpp:37:17: warning: division by zero [-Wdiv-by-zero]
   printf("%d", 1/0);
                ~^~
#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...