Submission #419553

#TimeUsernameProblemLanguageResultExecution timeMemory
419553alishahali1382Ancient Machine (JOI21_ancient_machine)C++17
100 / 100
87 ms8708 KiB
#include "Anna.h" #include <bits/stdc++.h> #pragma GCC optimize ("O2,unroll-loops") //#pragma GCC optimize("no-stack-protector,fast-math") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<pii, int> piii; typedef pair<ll, ll> pll; #define debug(x) cerr<<#x<<'='<<(x)<<endl; #define debugp(x) cerr<<#x<<"= {"<<(x.first)<<", "<<(x.second)<<"}"<<endl; #define debug2(x, y) cerr<<"{"<<#x<<", "<<#y<<"} = {"<<(x)<<", "<<(y)<<"}"<<endl; #define debugv(v) {cerr<<#v<<" : ";for (auto x:v) cerr<<x<<' ';cerr<<endl;} #define all(x) x.begin(), x.end() #define pb push_back #define kill(x) return cout<<x<<'\n', 0; const int inf=1000000010; const ll INF=1000000000000001000LL; const int mod=1000000007; const int MAXN=100010, FIB=63, LOG=44; ll fib[FIB+1]; bool A[MAXN]; string To_LOG(string S){ ll res=0; for (int i=0; i<FIB; i++){ if (S[i]=='1'){ res+=fib[FIB-i-1]; i++; } } // debug(res) string out=""; for (int i=0; i<LOG; i++) out+=(res>>i&1)+'0'; return out; } void Anna(int n, vector<char> S){ fib[0]=1; fib[1]=2; for (int i=2; i<=FIB; i++) fib[i]=fib[i-1]+fib[i-2]; // To_LOG("000000000000000000000000000000000000000000000000000000000000000"); // To_LOG("000000000000000000000000000000000000000000000000000000000000001"); // To_LOG("000000000000000000000000000000000000000000000000000000000000010"); // To_LOG("000000000000000000000000000000000000000000000000000000000000100"); // To_LOG("000000000000000000000000000000000000000000000000000000000000101"); int posx=n; for (int i=0; i<n; i++) if (S[i]=='X'){ posx=i; break ; } for (int i=0; i<17; i++) Send(posx>>i&1); // for (int i=0; i<posx; i++) Send(1); vector<int> vec; for (int i=posx; i<n; i++){ if (S[i]=='Z'){ if (i+1<n && S[i+1]=='Z') vec.pb(0); else vec.pb(1); } else vec.pb(0); } while (vec.size()%FIB) vec.pb(0); string out=""; for (int i=0; i<vec.size();){ string S=""; for (int j=0; j<FIB; j++) S+='0'+vec[i++]; out+=To_LOG(S); // debug2(S, To_LOG(S)) } for (char ch:out) Send(ch-'0'); }
#include "Bruno.h" #include <bits/stdc++.h> #pragma GCC optimize ("O2,unroll-loops") //#pragma GCC optimize("no-stack-protector,fast-math") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<pii, int> piii; typedef pair<ll, ll> pll; #define debug(x) cerr<<#x<<'='<<(x)<<endl; #define debugp(x) cerr<<#x<<"= {"<<(x.first)<<", "<<(x.second)<<"}"<<endl; #define debug2(x, y) cerr<<"{"<<#x<<", "<<#y<<"} = {"<<(x)<<", "<<(y)<<"}"<<endl; #define debugv(v) {cerr<<#v<<" : ";for (auto x:v) cerr<<x<<' ';cerr<<endl;} #define all(x) x.begin(), x.end() #define pb push_back #define kill(x) return cout<<x<<'\n', 0; const int inf=1000000010; const ll INF=1000000000000001000LL; const int mod=1000000007; const int MAXN=100010, FIB=63, LOG=44; int n, m, k, u, v, x, y, t, a, b, ans; char S[MAXN]; int stk[MAXN], sz; bool mark[MAXN]; ll fib2[FIB+1]; inline void Rem(int x){ // debug(x) // if (mark[x]) debug("fuck") Remove(x); mark[x]=1; } string ToFIB(string S){ // reverse(all(S)); ll res=0; for (int i=0; i<LOG; i++) if (S[i]=='1') res+=(1ll<<i); string out=""; for (int i=0; i<FIB; i++){ if (res>=fib2[FIB-i-1]){ out+="1"; res-=fib2[FIB-i-1]; i++; if (i<FIB) out+="0"; } else out+="0"; } return out; } void Bruno(int n, int m, vector<int> A){ fib2[0]=1; fib2[1]=2; for (int i=2; i<=FIB; i++) fib2[i]=fib2[i-1]+fib2[i-2]; // debug(ToFIB("10010000100101010110100110110100111000100100")) // debug(ToFIB("00000000000000000000000000000000000000000001")) // debug(ToFIB("00000000000000000000000000000000000000000010")) // debug(ToFIB("00000000000000000000000000000000000000000011")) int posx=0; for (int i=0; i<17; i++) posx|=(A[i]<<i); for (int i=0; i<posx; i++) Rem(i); string B=""; for (int i=17; i<m; ){ string S=""; for (int j=0; j<LOG; j++) S+='0'+A[i++]; B+=ToFIB(S); } for (int i=posx; i<n; i++){ if (B[i-posx]=='0'){ stk[++sz]=i; } else{ while (sz>1) Rem(stk[sz--]); Rem(i); } } while (sz) Rem(stk[sz--]); for (int i=0; i<n; i++) if (!mark[i]) Remove(i); }

Compilation message (stderr)

Anna.cpp: In function 'void Anna(int, std::vector<char>)':
Anna.cpp:71:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   71 |  for (int i=0; i<vec.size();){
      |                ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...