Submission #761196

#TimeUsernameProblemLanguageResultExecution timeMemory
761196raysh07Vision Program (IOI19_vision)C++17
100 / 100
15 ms2180 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 1;
int ac[N];
int pos;
int loc[10]; //location of bits 

int cell(int i, int j, int m){
    return i * m + j;
}

// int add_xor(vector <int> b){
//     ac[pos] = 0;
//     for (auto x : b) ac[pos] ^= ac[x];
//     return pos++;
// }

// int add_and(vector <int> b){
//     ac[pos] = 1;
//     for (auto x : b) ac[pos] &= ac[x];
//     return pos++;
// }

// int add_or(vector <int> b){
//     ac[pos] = 0;
//     for (auto x : b) ac[pos] |= ac[x];
//     return pos++;
// }

// int add_not(int b){
//     ac[pos] = 1 - ac[b];
//     return pos++;
// }

void add(int x){
    for (int i = 0; i < 10; i++){
        int y = add_and({x, loc[i]});
        loc[i] = add_xor({x, loc[i]});
        x = y;
    }
}

void construct_network(int n, int m, int k) {
// 	std::vector<int> Ns;
// 	Ns = {0, 1};
// 	int a = add_and(Ns);
// 	Ns = {0, a};
// 	int b = add_or(Ns);
// 	Ns = {0, 1, b};
// 	int c = add_xor(Ns);
// 	add_not(c);

    vector <int> r;
    vector <int> a;
    for (int i = 0; i < n; i++){
        a.clear();
        for (int j = 0; j < m; j++) a.push_back(cell(i, j, m));
        
        int x = add_xor(a);
        r.push_back(x);
        
      ///  cout << i << " " << x << " " << ac[x] << "\n";
    }
    
    a.clear();
    for (auto &x : r){
        a.push_back(x);
        x = add_xor(a);
    ///    cout << x << " " << ac[x] << "\n";
    }
    
    vector <int> c;
    for (int j = 0; j < m; j++){
        a.clear();
        for (int i = 0; i < n; i++) a.push_back(cell(i, j, m));
        
        int x = add_xor(a);
        c.push_back(x);
        
     //   cout << j << " " << x << " " << ac[x] << "\n";
    }
    
    a.clear();
    for (auto &x : c){
        a.push_back(x);
        x = add_xor(a);
    }
    
    for (int i = 0; i < 10; i++){
        loc[i] = add_or({c.back()});
    }
    
    for (auto x : r){
        add(x);
    }
    for (auto x : c){
        add(x);
    }
    int ansloc = add_not(c.back());
    for (int i = 0; i < 10; i++){
        if (k >> i & 1){
            ansloc = add_and({ansloc, loc[i]});
        } else {
            loc[i] = add_not(loc[i]);
            ansloc = add_and({ansloc, loc[i]});
        }
    }
}

// int main(){
//     int h, w, k;
//     cin >> h >> w >> k;
//     pos = h * w;
//     for (int i = 0; i < h * w; i++) cin >> ac[i];
//     construct_network(h, w, k);
    
//     cout << ac[pos - 1] << "\n";
//     return 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...