QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#481571 | #3098. Ancient Machine | nhuang685 | 0 | 44ms | 9720kb | C++20 | 2.6kb | 2024-07-17 08:49:02 | 2024-07-17 08:49:03 |
Judging History
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