Submission #417514

#TimeUsernameProblemLanguageResultExecution timeMemory
417514priority_queueVision Program (IOI19_vision)C++14
100 / 100
31 ms2816 KiB
#include <bits/stdc++.h> #define forint(i, N) for (int i = 0; i < (N); i++) using namespace std; //vector<int> v = {1, 0, 0, 0, 1, 0}; //vector<int> v = {0, 1, 0, 1, 0, 0}; vector<int> v = {0, 0, 1, 1, 0, 0}; int add_not(int N); int add_and(vector<int> N); int add_or(vector<int> N); int add_xor(vector<int> N); int cc; /* int is_k(int& pos, vector<int>& vec, int k) { vector<int> vec_test; forint(i, vec.size() - k) { pos++; vec_test.push_back(pos); add_and({vec[i], vec[i + k]}); } pos++; add_or(vec_test); return pos; } int is_at_most_k(int& pos, vector<int>& vec, int k) { // == 0 pos++; add_xor(vec); pos++; add_not(pos-1); vector<int> vec2 = {pos}; // >= 1 forint(i, vec.size() - k) { vector<int> tmp; for (int j = i; j <= i + k; j++) { tmp.push_back(vec[j]); } pos++; add_xor(tmp); pos++; add_or(tmp); pos++; add_and({pos-2, pos-1}); vec2.push_back(pos); } pos++; add_or(vec2); return pos; } */ int is_k(vector<int>& vec, int k) { //for(auto i:vec) { // cerr << v[i] << " "; //} vector<int> vec_test; forint(i, vec.size() - k) { //int j; vec_test.push_back(add_and({vec[i], vec[i + k]})); //cerr << v[vec[i]] << "&" << v[vec[i+k]] << "=" << v[j] << "<-\n"; } return add_or(vec_test); } int is_at_most_k(vector<int>& vec, int k) { //for(auto i:vec) { // cerr << v[i] << " "; //} // == 0 //int j; vector<int> vec2 = {add_xor(vec)}; //cerr << v[j] << " -XOR- " << endl; // >= 1 forint(i, vec.size() - k) { //cerr << i << " ------- " << endl; vector<int> tmp; for (int j = i; j <= i + k; j++) { tmp.push_back(vec[j]); } vec2.push_back(add_and({add_not(add_xor(tmp)), add_or(tmp)})); //cerr << v[j] << " ++ " << endl; } return add_or(vec2); } void construct_network(int h, int w, int k) { cc = h * w - 1; vector<int> right; int vsize = h * w - 1; for (int i = h - 1; i >= 1; i--) { int a = i; int b = 0; vector<int> tmp; while (b < w && a < h) { //cerr << a * w + b << " "; tmp.push_back(a * w + b); a++; b++; } //cerr << endl << " r"; vsize++; right.push_back(vsize); add_or(tmp); } for (int i = 0; i < w; i++) { int a = 0; int b = i; vector<int> tmp; while (b < w && a < h) { //cerr << a * w + b << " "; tmp.push_back(a * w + b); a++; b++; } //cerr << endl << " r"; vsize++; right.push_back(vsize); add_or(tmp); } //cerr << vsize << " right diagonal" << endl; vector<int> left; for (int i = 0; i < h - 1; i++) { int a = i; int b = 0; vector<int> tmp; while (b < w && a >= 0) { tmp.push_back(a * w + b); a--; b++; } vsize++; left.push_back(vsize); add_or(tmp); } for (int i = 0; i < w; i++) { int a = h - 1; int b = i; vector<int> tmp; while (b < w && a >= 0) { tmp.push_back(a * w + b); a--; b++; } vsize++; left.push_back(vsize); add_or(tmp); } /* add_and({is_k(vsize, right, k), is_at_most_k(vsize, left, k)}); int a = ++vsize; add_and({is_k(vsize, left, k), is_at_most_k(vsize, right, k)}); int b = ++vsize; */ //int a, b; add_or({ add_and({is_k(right, k), is_at_most_k(left, k)}), add_and({is_k(left, k), is_at_most_k(right, k)}) }); //cerr << v[a] << " -- " << v[b] << endl; }

Compilation message (stderr)

vision.cpp: In function 'int is_k(std::vector<int>&, int)':
vision.cpp:3:40: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    3 | #define forint(i, N) for (int i = 0; i < (N); i++)
      |                                        ^
vision.cpp:74:2: note: in expansion of macro 'forint'
   74 |  forint(i, vec.size() - k) {
      |  ^~~~~~
vision.cpp: In function 'int is_at_most_k(std::vector<int>&, int)':
vision.cpp:3:40: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    3 | #define forint(i, N) for (int i = 0; i < (N); i++)
      |                                        ^
vision.cpp:93:2: note: in expansion of macro 'forint'
   93 |  forint(i, vec.size() - k) {
      |  ^~~~~~
#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...