Submission #1067073

#TimeUsernameProblemLanguageResultExecution timeMemory
1067073TlenekWodoruVision Program (IOI19_vision)C++17
100 / 100
20 ms2140 KiB
#include<bits/stdc++.h> #include "vision.h" using namespace std; int n,m,k; int Zero,Jeden,temp; vector<int>A,An,A1,A2; vector<int>B,Bn,B1,B2; vector<int>P; vector<int>V[4]; int Num(int y, int x) { return y*m+x; } bool Bit(int x, int u) { return (x>>u)%2; } vector<int>Add(vector<int>A,vector<int>B) { const int siz=(int)A.size(); int ziom=Zero; vector<int>W; for(int i=0;i<siz;i++) { int a=A[i],b=B[i],c=ziom; int xorr=add_xor({a,b,c}); int andd=add_and({a,b,c}); int orr=add_or({a,b,c}); int Nxorr=add_not(xorr); int u1=andd,u2=add_and({orr,Nxorr}); W.push_back(xorr); ziom=add_or({u1,u2}); } return W; } void construct_network(int N, int M, int K) { n=N; m=M; k=K; for(int i=0;i<n;i++) { P.clear(); for(int j=0;j<m;j++) { P.push_back(Num(i,j)); } A.push_back(add_or(P)); } for(int i=0;i<m;i++) { P.clear(); for(int j=0;j<n;j++) { P.push_back(Num(j,i)); } B.push_back(add_or(P)); } temp=add_not(0); Jeden=add_or({0,temp}); Zero=add_and({0,temp}); An.resize(A.size()); A1.resize(A.size()); A2.resize(A.size()); Bn.resize(B.size()); B1.resize(B.size()); B2.resize(B.size()); for(int i=0;i<(int)A.size();i++) { An[i]=add_not(A[i]); } for(int i=0;i<(int)B.size();i++) { Bn[i]=add_not(B[i]); } P.clear(); for(int i=0;i<(int)A.size();i++) { P.push_back(A[i]); A1[i]=add_and(P); P.pop_back(); P.push_back(An[i]); } P.clear(); for(int i=(int)A.size()-1;i>=0;i--) { P.push_back(A[i]); A2[i]=add_and(P); P.pop_back(); P.push_back(An[i]); } P.clear(); for(int i=0;i<(int)B.size();i++) { P.push_back(B[i]); B1[i]=add_and(P); P.pop_back(); P.push_back(Bn[i]); } P.clear(); for(int i=(int)B.size()-1;i>=0;i--) { P.push_back(B[i]); B2[i]=add_and(P); P.pop_back(); P.push_back(Bn[i]); } for(int i=0;i<4;i++) { V[i].resize(10); } for(int i=0;i<10;i++) { P.clear(); for(int j=0;j<n;j++) { if(Bit(j,i)==0){continue;} P.push_back(A1[j]); } if((int)P.size()==0){V[0][i]=Jeden;} else { temp=add_or(P); V[0][i]=add_not(temp); } P.clear(); for(int j=0;j<n;j++) { if(Bit(j,i)==0){continue;} P.push_back(A2[j]); } if((int)P.size()==0){V[1][i]=Zero;} else { V[1][i]=add_or(P); } P.clear(); for(int j=0;j<m;j++) { if(Bit(j,i)==0){continue;} P.push_back(B1[j]); } if((int)P.size()==0){V[2][i]=Jeden;} else { temp=add_or(P); V[2][i]=add_not(temp); } P.clear(); for(int j=0;j<m;j++) { if(Bit(j,i)==0){continue;} P.push_back(B2[j]); } if((int)P.size()==0){V[3][i]=Zero;} else { V[3][i]=add_or(P); } } V[0]=Add(V[0],V[1]); V[0]=Add(V[0],V[2]); V[0]=Add(V[0],V[3]); k=(k-2+1024)%1024; P.clear(); for(int i=0;i<10;i++) { if(Bit(k,i)){P.push_back(V[0][i]);} else{P.push_back(add_not(V[0][i]));} } add_and(P); }
#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...