Submission #1309108

#TimeUsernameProblemLanguageResultExecution timeMemory
1309108minh30082008Ancient Machine (JOI21_ancient_machine)C++20
0 / 100
34 ms6444 KiB
#include "Anna.h" //#include "Bruno.h" #include<bits/stdc++.h> #define fi first #define se second #define FOR(i, k, n) for(int i = k; i <= n; i++) #define FOR1(i, k, n) for(int i = k; i >= n; i--) #define pb push_back #define fastio ios::sync_with_stdio(0); cin.tie(0); cout.tie(0) #define vi vector<int> #define pii pair<int, int> #define vii vector<pii> #define ll long long #define vll vector<ll> #define pll pair<ll, ll> #define re return 0 #define mii map<int, int> #define input "ALONE.inp" #define output "ALONE.out" #define rf freopen(input, "r", stdin); freopen(output, "w", stdout) using namespace std; ll f[100]; void Anna(int n, vector<char> s) { int vt = -1; FOR(i, 0, n - 1) if(s[i] == 'X') { vt = i; break; } f[0] = 1; f[1] = 2; FOR(i, 2, 70) f[i] = f[i - 1] + f[i - 2]; vi vv; if(vt == -1) { FOR(i, 0, n - 1) vv.pb(0); } else { FOR(i, 0, vt - 1) vv.pb(0); vv.pb(1); if(vt + 1 < n) vv.pb(0); FOR(i, vt + 2, n - 1) if(s[i] == 'Z' && s[i - 1] != 'Z') vv.pb(1); else vv.pb(0); } int l = 0, r = 63; while(l < n) { r = min(r, n - 1); ll res = 0; FOR(i, l, r) if(vv[i]) res += f[i - l]; FOR(i, 0, 46) Send((res >> i) & 1); l = r + 1; r += 64; } }
//#include "Anna.h" #include "Bruno.h" #include<bits/stdc++.h> #define fi first #define se second #define FOR(i, k, n) for(int i = k; i <= n; i++) #define FOR1(i, k, n) for(int i = k; i >= n; i--) #define pb push_back #define fastio ios::sync_with_stdio(0); cin.tie(0); cout.tie(0) #define vi vector<int> #define pii pair<int, int> #define vii vector<pii> #define ll long long #define vll vector<ll> #define pll pair<ll, ll> #define re return 0 #define mii map<int, int> #define input "ALONE.inp" #define output "ALONE.out" #define rf freopen(input, "r", stdin); freopen(output, "w", stdout) using namespace std; ll f[100]; void Bruno(int n, int L, vi s) { f[0] = 1; f[1] = 2; FOR(i, 2, 70) f[i] = f[i - 1] + f[i - 2]; int l = 0, r = 63, d = 0; vi s1, tmp; while(l < n) { r = min(r, n - 1); ll res = 0; FOR(i, 0, 46) { if(d + i < L && s[d + i]) res |= (1ll << i); } tmp.clear(); FOR1(i, r - l, 0) if(res >= f[i]) { res -= f[i]; tmp.pb(1); } else tmp.pb(0); reverse(tmp.begin(), tmp.end()); for(auto x : tmp) s1.pb(x); l = r + 1; r += 64; d += 47; } int vt = n; FOR(i, 0, n - 1) { if(s1[i]) { vt = i; break; } Remove(i); // Xóa tất cả những gì trước X } if(vt == n) return; // Không tìm thấy X vector<int> vv; vv.pb(vt); // vv[0] là X FOR(i, vt + 1, n - 1) { if(s1[i] == 1) // Gặp tín hiệu xóa (Z) { while(vv.size() > 1) // Xóa các phần tử Y tích lũy, giữ lại X { Remove(vv.back()); vv.pop_back(); } Remove(i); // Xóa chính ký tự Z này } else { vv.pb(i); // Tích lũy vào stack } } // --- ĐOẠN SỬA --- // Xóa các phần tử còn dư trong stack, TRỪ phần tử đầu tiên (X) for(size_t i = 0; i < vv.size(); i++) Remove(vv[i]); // ---------------- return; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...