Submission #1319738

#TimeUsernameProblemLanguageResultExecution timeMemory
1319738PlayVoltzBroken Device (JOI17_broken_device)C++20
8 / 100
20 ms1516 KiB
#include "Annalib.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define pii pair<int, int> #define fi first #define se second void Anna(int n, long long x, int k, int p[]){ vector<bool> die(n, 0), res1(n, 0), res2(n, 0), res3(n, 0), res4(n, 0); for (int i=0; i<k; ++i)die[p[i]]=1; int first1=2, first2=2, first3=2, first4=2; long long b1=0, b2=0, b3=0, b4=0; for (int i=0; i<n/2&&b1<60; ++i){ if (die[i]&&die[i+n/2])continue; if (first1){ if (!die[i])res1[i]=1, --first1; continue; } if (!die[i]&&!die[i+n/2]){ if ((1ll<<b1)&x)res1[i]=1; else res1[i+n/2]=1; ++b1; } else if (die[i]){ if (!((1ll<<b1)&x))res1[i+n/2]=1, ++b1; } else{ if ((1ll<<b1)&x)res1[i]=1, ++b1; } } for (int i=0; i<n/2&&b2<60; ++i){ if (die[i]&&die[i+n/2])continue; if (first2){ if (!die[i+n/2])res2[i+n/2]=1, --first2; continue; } if (!die[i]&&!die[i+n/2]){ if ((1ll<<b2)&x)res2[i+n/2]=1; else res2[i]=1; ++b2; } else if (die[i]){ if ((1ll<<b2)&x)res2[i+n/2]=1, ++b2; } else{ if (!((1ll<<b2)&x))res2[i]=1, ++b2; } } for (int i=0; i<n/2&&b3<60; ++i){ if (die[i]&&die[i+n/2])continue; if (first3){ if (first3==2){ if (!die[i])res3[i]=1, --first3; } else{ if (!die[i+n/2])res3[i+n/2]=1, --first3; } continue; } if (b3%2){ if (!die[i]&&!die[i+n/2]){ if ((1ll<<b3)&x)res3[i]=1; else res3[i+n/2]=1; ++b3; } else if (die[i]){ if (!((1ll<<b3)&x))res3[i+n/2]=1, ++b3; } else{ if ((1ll<<b3)&x)res3[i]=1, ++b3; } } else{ if (!die[i]&&!die[i+n/2]){ if (!((1ll<<b3)&x))res3[i]=1; else res3[i+n/2]=1; ++b3; } else if (die[i]){ if ((1ll<<b3)&x)res3[i+n/2]=1, ++b3; } else{ if (!((1ll<<b3)&x))res3[i]=1, ++b3; } } } for (int i=0; i<n/2&&b4<60; ++i){ if (die[i]&&die[i+n/2])continue; if (first4){ if (first4==2){ if (!die[i+n/2])res4[i+n/2]=1, --first4; } else{ if (!die[i])res4[i]=1, --first4; } continue; } if (b4%2){ if (!die[i]&&!die[i+n/2]){ if (!((1ll<<b4)&x))res4[i]=1; else res4[i+n/2]=1; ++b4; } else if (die[i]){ if ((1ll<<b4)&x)res4[i+n/2]=1, ++b4; } else{ if (!((1ll<<b4)&x))res4[i]=1, ++b4; } } else{ if (!die[i]&&!die[i+n/2]){ if ((1ll<<b4)&x)res4[i]=1; else res4[i+n/2]=1; ++b4; } else if (die[i]){ if (!((1ll<<b4)&x))res4[i+n/2]=1, ++b4; } else{ if ((1ll<<b4)&x)res4[i]=1, ++b4; } } } if (b1==max({b1, b2, b3, b4}))for (int i=0; i<n; ++i)Set(i, res1[i]); else if (b2==max({b1, b2, b3, b4}))for (int i=0; i<n; ++i)Set(i, res2[i]); else if (b3==max({b1, b2, b3, b4}))for (int i=0; i<n; ++i)Set(i, res3[i]); else for (int i=0; i<n; ++i)Set(i, res4[i]); }
#include "Brunolib.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define pii pair<int, int> #define fi first #define se second long long Bruno(int n, int vect[]){ long long res=0, res2=0, b=0, res3=0, res4=0; int first=2, one=0; for (int i=0; i<n/2&&b<60; ++i){ if (first){ if (vect[i])one+=first, --first; else if (vect[i+n/2])--first; continue; } if (vect[i]){ res+=(1ll<<b); if (b%2)res3+=(1ll<<b); else res4+=(1ll<<b); ++b; } else if (vect[i+n/2]){ res2+=(1ll<<b); if (b%2)res4+=(1ll<<b); else res3+=(1ll<<b); ++b; } } if (one==3)return res; if (!one)return res2; if (one==1)return res4; return res3; }
#Verdict Execution timeMemoryGrader output
Fetching results...