# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
925397 | 2024-02-11T14:31:44 Z | bachhoangxuan | Ancient Machine (JOI21_ancient_machine) | C++17 | 0 ms | 0 KB |
#include "Anna.h" #include <bits/stdc++.h> using namespace std; namespace{ int F[50]; } int bit_to_fib(string s){ int total=0,pos=39; while(pos>=0){ if(s[pos]=='1') total+=F[pos],pos-=2; else pos--; } return total; } void Anna(int N, std::vector<char> S) { F[0]=1;F[1]=2; for(int i=0;i<=40;i++) F[i]=(F[i-1]+F[i-2]); int f=-1,lst=-1; string res; for(int i=0;i<N;i++){ if(f==-1){ if(S[i]=='X') f=i; res+='0'; } else if(S[i]=='Z'){ if(S[i-1]=='Z') res.back()='0'; res+='1'; } else res+='0'; } while(N%40!=0) res+='0',N++; if(f==-1) f=(1<<17)-1; for(int i=0;i<17;i++) Send(f>>i&1); for(int i=0;i<N;i+=40){ string cur; for(int j=0;j<40;j++) cur+=S[i+j]; int total=bit_to_fib(cur); for(int i=0;i<28;i++) Send(total>>i&1); } }