Submission #1153702

#TimeUsernameProblemLanguageResultExecution timeMemory
1153702aycnlAncient Machine (JOI21_ancient_machine)C++20
5 / 100
28 ms3516 KiB
#include "Anna.h" #include <bits/stdc++.h> using namespace std; #define ii pair <int, int> #define ff first #define ss second #define bit(i) (1 << (i)) #define fto(i, a, b) for (int i = (a); i <= (b); ++i) #define fdto(i, a, b) for (int i = (a); i >= (b); --i) #define flto(i, a, b) for (int i = (a); (1 << i) <= (b); ++i) #define pb push_back #define pf push_front #define endl "\n" #define oo (int)(998244353) #define maxN 305 #define l(s) s.length() #define vi vector <int> #define vii vector <ii> #define fat(x, y) for (auto x : y) #define fit(x, y) for (int x : y) #define fiit(x, y) for (ii x : y) #define EPS 1e-9 #define pi (acos(-1)) #define ll long long void Anna(int N, std::vector<char> S) { for (char c : S) { if (c == 'X') Send(0), Send(0); if (c == 'Y') Send(0), Send(1); if (c == 'Z') Send(1), Send(0); } }
#include "Bruno.h" #include <bits/stdc++.h> using namespace std; #define ii pair <int, int> #define ff first #define ss second #define bit(i) (1 << (i)) #define fto(i, a, b) for (int i = (a); i <= (b); ++i) #define fdto(i, a, b) for (int i = (a); i >= (b); --i) #define flto(i, a, b) for (int i = (a); (1 << i) <= (b); ++i) #define pb push_back #define pf push_front #define endl "\n" #define oo (int)(998244353) #define maxN 305 #define l(s) s.length() #define vi vector <int> #define vii vector <ii> #define fat(x, y) for (auto x : y) #define fit(x, y) for (int x : y) #define fiit(x, y) for (ii x : y) #define EPS 1e-9 #define pi (acos(-1)) #define ll long long int n; vi a; int f[bit(18) + 1]; int dp(int mask) { if (mask == bit(n) - 1) return 0; if (f[mask] != -1) return f[mask]; int res = 0; fto(i, 0, n-1) if (!(mask&bit(i))) { if (a[i] != 1) res = max(res, dp(mask|bit(i))); else { int okl = 0, okr = 0; fdto(j, i-1, 0) if (!(mask&bit(j))) { if (a[j] == 0) okl = 1; break; } fto(j, i+1, n-1) if (!(mask&bit(j))) { if (a[j] == 2) okr = 1; break; } res = max(res, dp(mask|bit(i)) + (okl&&okr)); } } return f[mask] = res; } void Bruno(int N, int L, std::vector<int> A) { n = N; fto(i, 0, N-1) { if (A[i*2] == 0 && A[i*2+1] == 0) a.pb(0); if (A[i*2] == 0 && A[i*2+1] == 1) a.pb(1); if (A[i*2] == 1 && A[i*2+1] == 0) a.pb(2); } memset(f, -1, sizeof f); dp(0); int mask = 0; while (1) { if (mask == bit(n) - 1) break; fto(i, 0, n-1) if (!(mask&bit(i))) { if (a[i] != 1) { if (dp(mask) == dp(mask|bit(i))) { Remove(i); mask |= bit(i); break; } } else { int okl = 0, okr = 0; fdto(j, i-1, 0) if (!(mask&bit(j))) { if (a[j] == 0) okl = 1; break; } fto(j, i+1, n-1) if (!(mask&bit(j))) { if (a[j] == 2) okr = 1; break; } if (dp(mask) == dp(mask|bit(i)) + (okl && okr)) { Remove(i); mask |= bit(i); break; } } } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...