Submission #1236084

#TimeUsernameProblemLanguageResultExecution timeMemory
1236084guanexBroken Device (JOI17_broken_device)C++20
81 / 100
19 ms1556 KiB
#include "Annalib.h"
#include<bits/stdc++.h>

using namespace std;

void Anna( int N, long long X, int K, int P[] ){
  vector<int> vec;
  for(int i = 0; i < 61; ++i){
    if(X & (1LL << i)){
      vec.push_back(1);
    }else{
      vec.push_back(0);
    }
  }
  while((int)vec.size() >= 1 && vec[(int)vec.size()-1] == 0){
    vec.pop_back();
  }
  if((int)vec.size() % 2 == 1){
    vec.push_back(0);
  }
  vector<int> message(N, 1);
  for(int i = 0; i < K; ++i){
    message[P[i]] = 0;
  }
  int j = 0;
  for(int i = 0; i < N; ++i){
    if(j > (int)vec.size()){
      Set(i, 0);
      continue;
    }
    if(i == N-1){
      Set(i, 0);
      continue;
    }
    if(vec[j] == 0){
      if(vec[j+1] == 1){
        if(i % 2 == 0){
          if(message[i] == 1 &&  message[i+1] == 1){
            Set(i, 1);
            Set(i+1, 1);
            i++;
            j += 2;
          }else{
            Set(i, 0);
            continue;
          }
        }else{
          Set(i, 0);
          continue;
        }
      }else{
        if(i % 2 == 0){
          if(message[i] == 1){
              Set(i, 1);
              Set(i+1, 0);
              i++;
              j+=2;
          }else{
            Set(i, 0);
            continue;
          }
        }else{
          Set(i, 0);
          continue;
        }
      }
    }else{
      if(vec[j+1] == 1){
        if(i % 2 == 1){
          if(message[i] == 1 &&  message[i+1] == 1){
            Set(i, 1);
            Set(i+1, 1);
            i++;
            j += 2;
          }else{
            Set(i, 0);
            continue;
          }
        }else{
          Set(i, 0);
          continue;
        }
      }else{
        if(i % 2 == 1){
          if(message[i] == 1){
              Set(i, 1);
              Set(i+1, 0);
              i++;
              j+=2;
          }else{
            Set(i, 0);
            continue;
          }
        }else{
          Set(i, 0);
          continue;
        }
      }
    }
  }
}
#include "Brunolib.h"
#include<bits/stdc++.h>

using namespace std;

long long Bruno( int N, int A[] ){
  long long ans = 0;
  long long pot = 1;
  for(int i = 0; i < N; ++i){
    if(A[i] == 1){
      if(i % 2 == 1){
        if(A[i+1] == 1){
          ans += (pot * 3);
        }else{
          ans += pot;
        }
      }else{
        if(A[i+1] == 1){
          ans += pot*2;
        }
      }
      i++;
      pot *= 4;
    }
  }
  return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...