답안 #894363

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
894363 2023-12-28T07:15:43 Z Faisal_Saqib Vision Program (IOI19_vision) C++17
12 / 100
8 ms 1752 KB
#include <vector>
#include <string>
#include <map>
using namespace std;

int add_and(std::vector<int> Ns);

int add_or(std::vector<int> Ns);

int add_xor(std::vector<int> Ns);

int add_not(int N);
int h,w,k;
int which_diagonal1[40001];
int dia=0,xor1=0;
int dia1=0,xor2=0;
int which_diagonal2[40001];
int index_of_diagonal1[401];
int index_of_diagonal2[401];
int f(int i,int j)
{
	return (i*w)+j;
}
int check_distance_is_atmost_x(int x)
{
	// check subarray of length x+1
	vector<int> dp={xor1};
	for(int di=0;(di+x)<dia;di++)
	{
		vector<int> cur;
		for(int j=0;j<=x;j++)
			cur.push_back(index_of_diagonal1[di+j]);
		dp.push_back(add_xor({add_xor(cur),add_or(cur)}));
	}
	// Ask xor and or
	// if xor==0 and or==1 then distance is atmost 
	// if(dp.size()==0)
	// {
	// 	cout<<"size of dp is "<<0<<endl;
	// 	exit(-100);
	// }
	return add_or(dp);
}
int check_distance_is_atmost_x1(int x)
{
	// // check subarray of length x+1
	// {
	// 	vector<int> dp;
	// 	for(int di=0;(di)<dia1;di++)
	// 		dp.push_back(di);
	// 	if(add_xor(dp))
	// }
	vector<int> dp={xor2};
	for(int di=0;(di+x)<dia1;di++)
	{
		vector<int> cur;
		for(int j=0;j<=x;j++)
			cur.push_back(index_of_diagonal2[di+j]);
		dp.push_back(add_xor({add_xor(cur),add_or(cur)}));
	}
	// Ask xor and or
	// if xor==0 and or==1 then distance is atmost 
	return add_or(dp);
}
void construct_network(int H, int W, int K)
{
	h=H;
	w=W;
	k=K;
	for(int j=0;j<1;j++)
	{
		for(int i=h-1;i>=0;i--)
		{
			vector<int> element;
			int ci=i;
			int cj=j;
			while(ci<h and cj<w)
			{
				element.push_back(f(ci,cj));
				which_diagonal1[f(ci,cj)]=dia;
				ci++;
				cj++;
			}
			index_of_diagonal1[dia]=add_or(element);
			dia++;
		}
	}
	for(int i=0;i<1;i++)
	{
		for(int j=1;j<w;j++)
		{
			int ci=i;
			int cj=j;
			vector<int> element;
			while(ci<h and cj<w)
			{
				element.push_back(f(ci,cj));
				which_diagonal1[f(ci,cj)]=dia;
				ci++;
				cj++;
			}
			index_of_diagonal1[dia]=add_or(element);
			dia++;
		}
	}
	{
		vector<int> ship;
		for(int i=0;i<dia;i++)
		{
			ship.push_back(i);
		}
		xor1=add_xor(ship);
	}
	int fff=check_distance_is_atmost_x(k);
	int fss=check_distance_is_atmost_x(k-1);
	dia1=0;
	for(int i=0;i<1;i++)
	{
		for(int j=0;j<w;j++)
		{
			int ci=i;
			int cj=j;
			vector<int> element;
			while(ci<h and cj>=0)
			{
				element.push_back(f(ci,cj));
				ci++;
				cj--;
			}		
			index_of_diagonal2[dia1]=add_or(element);
			dia1++;	
		}
	}
	for(int j=w-1;j<w;j++)
	{
		for(int i=1;i<h;i++)
		{
			int ci=i;
			int cj=j;
			vector<int> element;
			while(ci<h and cj>=0)
			{
				element.push_back(f(ci,cj));
				ci++;
				cj--;
			}		
			index_of_diagonal2[dia1]=add_or(element);
			dia1++;
		}
	}
	{
		vector<int> ship;
		for(int i=0;i<dia1;i++)
		{
			ship.push_back(i);
		}
		xor2=add_xor(ship);
	}
	int fff1=check_distance_is_atmost_x1(k);
	int fss1=check_distance_is_atmost_x1(k-1);
	// cout<<"asoufjk\n\n\n"<<endl;
	// cout<<"For "<<fff<<' '<<fss<<endl;
	// cout<<"For "<<fff1<<' '<<fss1<<endl;
	add_and({add_and({fff1,fff}),add_or({add_not(fss1),add_not(fss)})});
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 504 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Incorrect 0 ms 348 KB on inputs (0, 1), (1, 1), expected 1, but computed 0
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 504 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Incorrect 0 ms 348 KB on inputs (0, 1), (1, 1), expected 1, but computed 0
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 504 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Incorrect 0 ms 348 KB on inputs (0, 1), (1, 1), expected 1, but computed 0
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 504 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Incorrect 0 ms 348 KB on inputs (0, 1), (1, 1), expected 1, but computed 0
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 604 KB Output is correct
2 Correct 6 ms 1116 KB Output is correct
3 Correct 6 ms 1116 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 1 ms 604 KB Output is correct
6 Correct 6 ms 1116 KB Output is correct
7 Correct 6 ms 860 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 604 KB Output is correct
10 Correct 6 ms 1116 KB Output is correct
11 Correct 7 ms 1140 KB Output is correct
12 Correct 7 ms 1112 KB Output is correct
13 Correct 5 ms 856 KB Output is correct
14 Correct 1 ms 348 KB Output is correct
15 Correct 1 ms 852 KB Output is correct
16 Correct 5 ms 1116 KB Output is correct
17 Correct 7 ms 1116 KB Output is correct
18 Correct 7 ms 1116 KB Output is correct
19 Correct 5 ms 860 KB Output is correct
20 Correct 1 ms 344 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Incorrect 0 ms 348 KB on inputs (0, 0), (1, 1), expected 1, but computed 0
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 1752 KB Output is correct
2 Incorrect 0 ms 348 KB on inputs (0, 1), (1, 1), expected 1, but computed 0
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 504 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Incorrect 0 ms 348 KB on inputs (0, 1), (1, 1), expected 1, but computed 0
6 Halted 0 ms 0 KB -