Submission #259884

#TimeUsernameProblemLanguageResultExecution timeMemory
259884peti1234Vision Program (IOI19_vision)C++17
100 / 100
225 ms2004 KiB

#include "vision.h"

#include <bits/stdc++.h>

using namespace std;
#define rep(n) for (int i=0; i<n; i++)
#define jrep(n) for (int j=0; j<n; j++)
bool valasz[50005];
const int c=402, f=399;
int pos, os[c], osk[c], oseg[c], kul[c], kulk[c], kseg[c], eos, ekul, van, s, nincs, rossz, db, p;
vector<int> sol;
void pb(int a) {
    sol.push_back(a);
}
int add(int a) {
    pos++;
    if (sol.size()==0) pb(rossz);
    if (a==1) add_or(sol);
    if (a==2) add_and(sol);
    if (a==3) add_xor(sol);
    if (a==4) add_not(p);

/*
    cout << sol.size() << " " << a << "\n";
    rep(sol.size()) cout << sol[i] << " ";
    cout << "\n";
*/
    if (a==4) valasz[pos]=!(valasz[p]);
    else {
        int si=sol.size(), db=0;
        rep(si) db+=valasz[sol[i]];
        if (a==1) valasz[pos]=(db>0);
        if (a==2) valasz[pos]=(db==si);
        if (a==3) valasz[pos]=(db%2);
    }
    sol.clear();
    return pos;
}
int solve(int k) {
    rep(f-k) {
        pb(eos), pb(osk[i]), pb(osk[i+k]);
        oseg[i]=add(2);
        pb(ekul), pb(kulk[i]), pb(kulk[i+k]);
        kseg[i]=add(2);
    }
    rep(f-k) pb(oseg[i]);
    oseg[0]=add(1);
    rep(f-k) pb(kseg[i]);
    kseg[0]=add(1);
    pb(oseg[0]), pb(kseg[0]);
    return add(1);
}
void construct_network(int n, int m, int k) {
    pos=n*m-1, db=n*m;
    rep(db) pb(i);
    rossz=add(3);
    rep(f) {
        int ert=i;
        rep(db) {
            int x=i/m, y=i%m;
            if (x+199-y==ert) pb(i);
        }
        kul[ert]=add(1);
        rep(db) {
            int x=i/m, y=i%m;
            if (x+y==ert) pb(i);
        }
        os[ert]=add(1);
        if (!i) kulk[i]=kul[i], osk[i]=os[i];
        else {
            pb(kulk[i-1]), pb(kul[i]);
            kulk[i]=add(3);
            pb(osk[i-1]), pb(os[i]);
            osk[i]=add(3);
        }
    }
    p=kulk[f-1], ekul=add(4);
    p=osk[f-1], eos=add(4);
    nincs=solve(k-1), van=solve(k);
    pb(van), pb(nincs);
    add(3);
}









/*
int b1, b2, b3, x, y;
int main()
{
    cin >> b1 >> b2 >> b3 >> x >> y;
    valasz[x]=1, valasz[y]=1;
    construct_network(b1, b2, b3);
    //rep(pos+1) cout << i << " " << valasz[i] << endl;
    cout << valasz[pos] << "\n";
    return 0;
}
*/
/*
1 26 24 1 25
*/
// prefix suffix 2-10 lehet 8 vagy 17 a függvény alapján
#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...