Submission #1156946

#TimeUsernameProblemLanguageResultExecution timeMemory
1156946daveleAncient Machine (JOI21_ancient_machine)C++20
69 / 100
49 ms6456 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;
        }
    }

/////////////////////////////////////////////////////////////////////////////////

void Anna (int n, std::vector<char> S){
    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'){
            Send(1);
            last = i;
            break;
        }
        Send(0);
    }
    if (last==n) return;
    for (int i=last+1; i<=n; i++){
        if (s[i]=='Z'){
            if (i==n || s[i+1]!='Z') Send(1);
            else Send(0);
        }
        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;
        }
    }

/////////////////////////////////////////////////////////////////////////////////

void Bruno (int n, int l, std::vector<int> b){
    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...