QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#481571#3098. Ancient Machinenhuang6850 44ms9720kbC++202.6kb2024-07-17 08:49:022024-07-17 08:49:03

Judging History

你现在查看的是最新测评结果

  • [2024-07-17 08:49:03]
  • 评测
  • 测评结果:0
  • 用时:44ms
  • 内存:9720kb
  • [2024-07-17 08:49:02]
  • 提交

Anna

#include "Anna.h"
#include <bits/stdc++.h>

namespace {

constexpr int LG = 63;
constexpr int SZ = 44;
std::vector<std::array<int64_t, 2>> dp;
void init() {
  dp.resize(LG + 1);
  dp[1][0] = 1;
  dp[1][1] = 1;
  for (int i = 2; i <= LG; ++i) {
    dp[i][0] = dp[i - 1][0] + dp[i - 1][1];
    dp[i][1] = dp[i - 1][0];
  }
}

} // namespace

void Anna(int N, std::vector<char> S) {
  const int n = N;
  std::string s(S.begin(), S.end());
  init();
  s.resize((n + LG - 1) / LG * LG, 'X');
  bool x = false;
  for (int i = 0; i < std::ssize(s); i += LG) {
    int64_t val = 0;
    for (int j = 0; j < LG; ++j) {
      if (s[i + j] == 'X' && !x) {
        val |= int64_t{1} << j;
        x = true;
      } else if (x && s[i + j] == 'Z' &&
                 (i + j == std::ssize(s) - 1 || s[i + j + 1] != 'Z')) {
        val |= int64_t{1} << j;
      }
    }
    int64_t num = 0;
    for (int j = LG - 1; j >= 0; --j) {
      if (((int64_t{1} << j) & val) != 0) {
        num += dp[j + 1][0];
      }
    }
    for (int j = 0; j < SZ; ++j) {
      Send(((int64_t{1} << j) & num) != 0 ? 1 : 0);
    }
  }
}

Bruno

#include "Bruno.h"
#include <bits/stdc++.h>

namespace {

constexpr int LG = 63;
constexpr int SZ = 44;
std::vector<std::array<int64_t, 2>> dp;
void init() {
  dp.resize(LG + 1);
  dp[1][0] = 1;
  dp[1][1] = 1;
  for (int i = 2; i <= LG; ++i) {
    dp[i][0] = dp[i - 1][0] + dp[i - 1][1];
    dp[i][1] = dp[i - 1][0];
  }
}

} // namespace

void Bruno(int N, int L, std::vector<int> A) {
  const int n = N;
  const int l = L;
  const std::vector<int> a = std::move(A);
  init();
  std::vector<bool> res(n);
  int st = -1;
  for (int i = 0; i < l; i += SZ) {
    int64_t num = 0;
    for (int j = 0; j < SZ; ++j) {
      if (a[i + j] == 1) {
        num |= int64_t{1} << j;
      }
    }
    int64_t val = 0;
    for (int j = LG - 1; j >= 0; --j) {
      if (num >= dp[j][0]) {
        val |= int64_t{1} << j;
        num -= dp[j][0];
      }
    }
    for (int j = 0; j < LG; ++j) {
      if (((int64_t{1} << j) & val) != 0) {
        if (st == -1) {
          st = i + j;
        }
        res[j] = true;
      }
    }
  }
  for (int i = 0; i < st; ++i) {
    Remove(i);
  }
  int orig = st;
  while (true) {
    int fi = static_cast<int>(std::find_if(res.begin() + st + 1, res.end(),
                                           [](bool b) { return b; }) -
                              res.begin());
    for (int j = fi - 1; j > st; --j) {
      Remove(j);
    }
    if (fi == n) {
      break;
    }
    Remove(fi);
    st = fi;
  }
  Remove(orig);
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 4128kb

input:

18
Y X Y Z X Z X X Z Z Y Y Z Y Y Z X X

output:

44
11000100000100000000000000000000000000000000

input:

44
11000100000100000000000000000000000000000000

output:

0 44 0

result:

wrong answer your query is valid but your solution is not optimal: read 0 but expected 3

Subtask #2:

score: 0
Wrong Answer

Test #12:

score: 0
Wrong Answer
time: 44ms
memory: 9720kb

input:

100000
X Z X Z Z X Y Z Y X Y X Z Z Z Y X Z Y X Y Y X Y Y Y Z Y Z Z Y X X Y X X Y Y X X X Z Y Y Y Z Z Z Z Y X Y Y Z Z Z X Y Z X X X X Y X Y X X Z X Z Z Z X Y X X X Z X Z X X X Y Y Y Y Z X X Y Z Y Y X Z X Z Z Z Z Z Y Z Y X Y Y Y Y X Z Z Y Z Z Y Z Z Z X Z Z X X Z Z Z Z X X Z Y Y Z Y Y Z Z Y Y Z Y Z Y Z...

output:

69872
101001000001111001010010010100010000001110000010100111111100001101101101010101101101001000111001010100111010010000010111101010000110110001110000000110111110111111011110100100010100101000000111101100011101101110110011111001010011001111111000000110110110101000010110111111100001100000111001111001...

input:

69872
101001000001111001010010010100010000001110000010100111111100001101101101010101101101001000111001010100111010010000010111101010000110110001110000000110111110111111011110100100010100101000000111101100011101101110110011111001010011001111111000000110110110101000010110111111100001100000111001111001...

output:

0 69872 6

result:

wrong answer your query is valid but your solution is not optimal: read 6 but expected 22133