제출 #1156947

#제출 시각아이디문제언어결과실행 시간메모리
1156947daveleAncient Machine (JOI21_ancient_machine)C++20
0 / 100
13 ms1724 KiB
#ifndef davele #include "Anna.h" #endif // davele #include <bits/stdc++.h> #define pii pair<int, int> #define fi first #define se second #define vi vector <int> #define pq priority_queue #define MASK(i) (1ll<<(i)) #define BIT(x, i) (((x) >> (i)) & 1) #define x0 ___x0 #define y0 ___y0 #define div ___div #define next ___next #define prev ___prev #define left ___left #define right ___right #define pos pisosi #define pb push_back #define pf push_front using namespace std; //const int mod = ; //void add (int &a, const int&b){ // a+=b; // if (a>=mod) a-=mod; //} // //void sub (int&a, const int&b){ // a-=b; // if (a<0) a+=mod; //} // //void mul (int&a, const int&b){ // a*=b; // a%=mod; //} template<class X, class Y> bool minimize(X &x, const Y&y){ if (x<=y) return false; else{ x = y; return true; } } template<class X, class Y> bool maximize (X &x, const Y&y){ if (x>=y) return false; else{ x = y; return true; } } ///////////////////////////////////////////////////////////////////////////////// const int limit = 1e5+5, compressed_len = 43, ini_len = 63; string s; long long fib[1000]; int ans[limit]; void prep(){ fib[0] = 1; fib[1] = 2; fib[2] = 3; for (int i=3; i<=91; i++) fib[i] = fib[i-1]+fib[i-2]; // } long long trans_to_int (int l, int r){ int len = r-l+1; long long ranks = 1; for (int i=l; i<=r; i++){ len--; if (ans[i]==1){ ranks+=fib[len]; } } return ranks; } int curpos; void Anna (int n, std::vector<char> S){ prep(); string s=" "; for (char x:S) s+=x; int last = n; for (int i=0; i<=n; i++){ if (i!=n && s[i+1]=='X'){ ans[++curpos] = 1; last = i; break; } ans[curpos++] = 0; } if (last!=n){ for (int i=last+1; i<=n; i++){ if (s[i]=='Z'){ if (i==n || s[i+1]!='Z') ans[curpos++] = 1; else ans[curpos++] = 0; } else ans[curpos++] = 0; } } for (int i=0; i<=n; i+=ini_len){ long long tmp = trans_to_int (i, i+ini_len-1); for (int j=0; j<=43; j++) if (MASK(j)&tmp) Send(1); else Send(0); } }
#ifndef davele #include "Bruno.h" #endif // davele #include <bits/stdc++.h> #define pii pair<int, int> #define fi first #define se second #define vi vector <int> #define pq priority_queue #define MASK(i) (1ll<<(i)) #define BIT(x, i) (((x) >> (i)) & 1) #define x0 ___x0 #define y0 ___y0 #define div ___div #define next ___next #define prev ___prev #define left ___left #define right ___right #define pos pisosi #define pb push_back #define pf push_front using namespace std; //const int mod = ; //void add (int &a, const int&b){ // a+=b; // if (a>=mod) a-=mod; //} // //void sub (int&a, const int&b){ // a-=b; // if (a<0) a+=mod; //} // //void mul (int&a, const int&b){ // a*=b; // a%=mod; //} template<class X, class Y> bool minimize(X &x, const Y&y){ if (x<=y) return false; else{ x = y; return true; } } template<class X, class Y> bool maximize (X &x, const Y&y){ if (x>=y) return false; else{ x = y; return true; } } ///////////////////////////////////////////////////////////////////////////////// const int limit = 1e5+5, compressed_len = 44, ini_len = 63; long long fib[1000]; int b[limit]; int N; int len = 0; void decode( long long val){ string tmp =""; for (int i=63; i>=1; i--){ if (val>b[i-1]){ tmp+="1"; val-=b[i-1]; } else tmp+="0"; } if (len+63<=N){ for (char x:tmp) b[len++] = x-'0'; } else{ int st = 63-(N-len)+1; for (int i=st; i=63; i++) b[len++] = tmp[i-1]-'0'; } } void prep(){ fib[0] = 1; fib[1] = 2; fib[2] = 3; for (int i=3; i<=91; i++) fib[i] = fib[i-1]+fib[i-2]; // } void Bruno (int n, int l, std::vector<int> tmp){ N = n+1; len = 0; prep(); // int numloop = l/44; int curbit = 0; // for (int loop = 1; loop<=numloop; loop++){ long long encode_val = 0; for (int i=0; i<=43; i++){ encode_val += MASK(tmp[curbit]); curbit++; } decode(encode_val); } // bool have1 = false; if (b[n]==1){ have1 = true; } for (int i = n; i>0; i--){ if (have1) break; if (b[i-1]==1){ have1 = true; break; } Remove(i-1); } if (!have1) return; for (int i=0; i<n; i++){ if (b[i]==1){ break; } Remove(i); } vector <int> list1; for (int i=0; i<=n; i++) if (b[i]==1){ list1.pb(i-1); if (list1.size()==1) list1.back()++; } if (list1.size()>1 && list1.back()+1<n){ Remove (list1.back()+1); } for (int i=1; i<list1.size(); i++){ int st = list1[i-1]+1; int en = list1[i]-1; for (int j=en; j>=st; j--) Remove(j); Remove(list1[i]); } Remove(list1[0]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...