Submission #869455

#TimeUsernameProblemLanguageResultExecution timeMemory
869455n1kVision Program (IOI19_vision)C++17
100 / 100
27 ms3520 KiB
#include "vision.h"
#include <bits/stdc++.h>

using namespace std;

void construct_network(int H, int W, int K) {
	map<int, vector<int>> mpx, mpy;
	for(int r = 0; r < H; r++){
		for(int c = 0; c < W; c++){
			mpx[r + c].push_back(r * W + c);
			mpy[c - r].push_back(r * W + c);
		}
	}
	vector<int> vx, vy, any1, any2, any1smaller, any2smaller;
	for(auto [k, v] : mpx){
		vx.push_back(add_or(v));
	}
	for(auto [k, v] : mpy){
		vy.push_back(add_or(v));
	}
	// determin if we have dist K in one of both
	// (any(dist1 == K) or any(dist2 == K) and dist1 <= K and dist2 <= K)
	// case where two fall on the same diagonal !!!!!!!!!!
	for(int i = 0; i < vx.size(); i++){
		if(i < vx.size() - K)
			any1.push_back(add_and({vx[i], vx[i + K]}));
		//any1smaller.push_back(add_and({vx[i], add_not(add_xor(vector<int>(vx.begin() + i, vx.begin() + min(vx.size(), (size_t) i + K + 1))))}));
		if(i + 1< vx.size())
			any1smaller.push_back(add_and({vx[i], add_or(vector<int>(vx.begin() + i + 1, vx.begin() + min(vx.size(), (size_t) i + K + 1)))}));
	}
	any1smaller.push_back(add_xor(vx));
	for(int i = 0; i < vy.size(); i++){
		if(i < vy.size() - K)
			any2.push_back(add_and({vy[i], vy[i + K]}));
		//any2smaller.push_back(add_and({vy[i], add_not(add_xor(vector<int>(vy.begin() + i, vy.begin() + min(vy.size(), (size_t) i + K + 1))))}));
		if(i + 1 < vy.size())
			any2smaller.push_back(add_and({vy[i], add_or(vector<int>(vy.begin() + i + 1, vy.begin() + min(vy.size(), (size_t) i + K + 1)))}));

	}
	any2smaller.push_back(add_xor(vy));
	// and(x, y)
	add_and({add_or({add_or(any1), add_or(any2)}), add_or(any1smaller), add_or(any2smaller)});
}

Compilation message (stderr)

vision.cpp: In function 'void construct_network(int, int, int)':
vision.cpp:24:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |  for(int i = 0; i < vx.size(); i++){
      |                 ~~^~~~~~~~~~~
vision.cpp:25:8: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |   if(i < vx.size() - K)
      |      ~~^~~~~~~~~~~~~~~
vision.cpp:28:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |   if(i + 1< vx.size())
      |      ~~~~~^~~~~~~~~~~
vision.cpp:32:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |  for(int i = 0; i < vy.size(); i++){
      |                 ~~^~~~~~~~~~~
vision.cpp:33:8: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |   if(i < vy.size() - K)
      |      ~~^~~~~~~~~~~~~~~
vision.cpp:36:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |   if(i + 1 < vy.size())
      |      ~~~~~~^~~~~~~~~~~
#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...