제출 #1263221

#제출 시각아이디문제언어결과실행 시간메모리
1263221silentloop레지스터 (IOI21_registers)C++20
22 / 100
1 ms328 KiB
#include <bits/stdc++.h> using namespace std; #define forn(i, n) for (int i = 0; i < int(n); i++) #define pb push_back #define mp make_pair #define fst first #define snd second #define all(x) (x).begin(), (x).end() #define sz(x) int((x).size()) #define ll long long void append_move(int t, int x); void append_store(int t, std::vector<bool> v); void append_and(int t, int x, int y); void append_or(int t, int x, int y); void append_xor(int t, int x, int y); void append_not(int t, int x); void append_left(int t, int x, int s); void append_right(int t, int x, int s); void append_add(int t, int x, int y); void append_print(int t); int B=2000; int open(int &sig, int k, int op, int act) { int i, tam=1, ant; k=k-act; ant=op; if(k==1) { return op; } while(tam*2<=k) { sig++; append_right(sig,ant,tam); append_or(sig,ant,sig); ant=sig; tam=tam*2; } if(tam<k) { sig++; append_right(sig,ant,abs(tam-k)); append_or(sig,sig,ant); } return sig; } void construct_instructions(int s, int n, int k, int q) { int i, j, act=0, sig, uno, allUno, op, a, in; sig=1; vector<int>pert(k,0), pref(k,0), pert2(k,0); vector<bool> v2(B,1); for(i=0; i<k; i++) { act=k-(i+1); vector<bool>v(B,0),v3(B,1); for(j=0; j<n; j++) { v[act]=1; v3[act]=0; act+=k; } sig++; pert2[i]=sig; append_store(sig,v3); if(i==1) pref[i]=pert2[i-1]; else { sig++; pref[i]=sig; append_store(sig,v2); } act=k-(i+1); for(j=0; j<n; j++) { v2[act]=0; act+=k; } } vector<bool>v(B,0); v[0]=1; sig++; uno=sig; append_store(sig,v); for(i=0; i<B; i++) v[i]=1; sig++; allUno=pref[0]; in=sig; for(i=0; i<k; i++) { sig=in; sig++; append_or(sig,0,pert2[i]); sig++; op=sig; append_xor(sig,sig-1,allUno); sig++; append_add(sig,sig-2,uno); sig++; append_right(sig,sig-1,B-1); sig++; a=sig; append_add(sig,allUno,sig-1); sig++; append_or(sig,open(sig, k, op, i),a); sig++; append_not(sig,sig-1); append_and(sig,sig,pref[i]); append_or(0,0,sig); } sig++; append_not(sig,0); int ant, tam=n; while(tam>1) { ant=tam; tam=(tam+1)/2; sig++; append_right(sig,sig-1,tam*k); sig++; append_or(sig,sig-1,sig-2); } append_not(0,sig); /*forn(i, sig+1) append_print(i);*/ }
#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...