#include "Anna.h"
#include <bits/stdc++.h>
#ifndef TEST
#define LIM_A 50
#define LIM_B 35
typedef long long ll;
#else
#define LIM_A 100
#define LIM_B 69
typedef __int128 ll;
#endif // TEST
using namespace std;
namespace {
int n;
bool arr[100002];
ll DP[502][2];
ll power[102];
}
void doSmall(vector<char> &S){
int xOpen = -1;
for(int i=0; i<n; i++){
if(xOpen == -1){
if(S[i] != 'X') Send(0);
else{
Send(1);
xOpen = i;
}
continue;
}
if(S[i] == 'Z' && S[i+1] != 'Z') Send(1);
else Send(0);
}
}
void Anna(int N, vector<char> S) {
int LIM = (N + LIM_A - 1) / LIM_A;
LIM = 100000 / LIM_A;
n = N;
// if(n<=70000){
// doSmall(S);
// return;
// }
power[0] = 1;
for(int i=1; i<=LIM_A; i++){
power[i] = power[i-1] * 2;
}
int xOpen = -1;
int strange = 0;
for(int i=0; i<n; i++){
if(xOpen == -1){
if(S[i] != 'X'){}
else{
arr[i] = 1;
xOpen = i;
}
continue;
}
if(S[i] == 'Z' && S[i+1] != 'Z'){
if(arr[i-1] == 1) strange = i;
else arr[i] = 1;
}
}
DP[0][0] = 1;
for(int i=1; i<=LIM_A; i++){
DP[i][0] = DP[i-1][0] + DP[i-1][1];
DP[i][1] = DP[i-1][0];
}
for(int d=0; d<LIM; d++){
int L = d*LIM_A, R = L+LIM_A;
int cnt = accumulate(arr+L, arr+R, 0);
ll sum = 0;
for(int i=LIM_A, x=L; x<R; x++, i--){
if(arr[x]){
sum += DP[i][0];
}
}
for(int i=0; i<LIM_B; i++){
ll tmp = sum;
for(int a=0; a<i; a++) tmp /= ll(2);
Send(tmp%2);
}
}
for(int d=0; d<20; d++) Send((strange>>d)&1);
}
#include "Bruno.h"
#include <bits/stdc++.h>
#ifndef TEST
#define LIM_A 50
#define LIM_B 35
typedef long long ll;
#else
#define LIM_A 100
#define LIM_B 69
typedef __int128 ll;
#endif // TEST
using namespace std;
namespace {
int n;
int arr[100002];
ll DP[502][2];
ll power[102];
vector<int> X, Z;
} // namespace
void Bruno(int N, int L, vector<int> A) {
n = N;
int LIM = (N + LIM_A - 1) / LIM_A;
LIM = 100000 / LIM_A;
// if(n<=70000){
// for(int i=0; i<n; i++){
// arr[i] = A[i];
// }
// }
DP[0][0] = 1;
for(int i=1; i<=LIM_A; i++){
DP[i][0] = DP[i-1][0] + DP[i-1][1];
DP[i][1] = DP[i-1][0];
}
power[0] = 1;
for(int i=1; i<=LIM_A; i++){
power[i] = power[i-1] * 2;
}
for(int d=0; d<LIM; d++){
int L = d*LIM_A, R = d*LIM_A+LIM_A;
ll sum = 0;
for(int x=0; x<LIM_B; x++){
if(A[d*LIM_B+x]) sum += power[x];
}
for(int i=LIM_A, x=L; x<R; i--, x++){
if(sum >= DP[i][0]){
arr[x] = 1;
sum -= DP[i][0];
}
}
}
ll tmp = 0;
for(ll x=0; x<20; x++){
if(A[LIM*LIM_B+x]) tmp += (1<<x);
}
if(tmp) arr[tmp] = 1;
int f = -1;
for(int i=0; i<n; i++){
if(f == -1){
if(!arr[i]) Remove(i);
else f=i;
continue;
}
if(arr[i]){
Remove(i);
continue;
}
int j = i;
while(j+1<n && !arr[j+1]) j++;
for(int k=j; k>=i; k--) Remove(k);
i=j;
}
if(f != -1) Remove(f);
}
Compilation message
Anna.cpp: In function 'void Anna(int, std::vector<char>)':
Anna.cpp:80:13: warning: unused variable 'cnt' [-Wunused-variable]
80 | int cnt = accumulate(arr+L, arr+R, 0);
| ^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
16 ms |
1840 KB |
Output is correct |
2 |
Correct |
19 ms |
1832 KB |
Output is correct |
3 |
Correct |
16 ms |
1904 KB |
Output is correct |
4 |
Correct |
16 ms |
1904 KB |
Output is correct |
5 |
Correct |
16 ms |
1912 KB |
Output is correct |
6 |
Correct |
16 ms |
1924 KB |
Output is correct |
7 |
Correct |
16 ms |
1912 KB |
Output is correct |
8 |
Correct |
19 ms |
2096 KB |
Output is correct |
9 |
Correct |
16 ms |
1912 KB |
Output is correct |
10 |
Correct |
16 ms |
1892 KB |
Output is correct |
11 |
Correct |
16 ms |
1904 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Partially correct |
63 ms |
7996 KB |
Partially correct |
2 |
Partially correct |
64 ms |
7916 KB |
Partially correct |
3 |
Partially correct |
66 ms |
7904 KB |
Partially correct |
4 |
Partially correct |
65 ms |
7928 KB |
Partially correct |
5 |
Partially correct |
77 ms |
7996 KB |
Partially correct |
6 |
Partially correct |
64 ms |
7908 KB |
Partially correct |
7 |
Partially correct |
73 ms |
7940 KB |
Partially correct |
8 |
Partially correct |
72 ms |
7900 KB |
Partially correct |
9 |
Partially correct |
62 ms |
8012 KB |
Partially correct |
10 |
Partially correct |
62 ms |
7972 KB |
Partially correct |
11 |
Partially correct |
74 ms |
7940 KB |
Partially correct |
12 |
Partially correct |
72 ms |
8008 KB |
Partially correct |
13 |
Partially correct |
78 ms |
7488 KB |
Partially correct |
14 |
Partially correct |
71 ms |
7960 KB |
Partially correct |
15 |
Partially correct |
83 ms |
7896 KB |
Partially correct |
16 |
Partially correct |
64 ms |
8004 KB |
Partially correct |
17 |
Partially correct |
71 ms |
7424 KB |
Partially correct |
18 |
Partially correct |
74 ms |
7480 KB |
Partially correct |
19 |
Partially correct |
70 ms |
7412 KB |
Partially correct |
20 |
Partially correct |
66 ms |
7892 KB |
Partially correct |
21 |
Partially correct |
84 ms |
7868 KB |
Partially correct |
22 |
Partially correct |
80 ms |
7468 KB |
Partially correct |
23 |
Partially correct |
66 ms |
7896 KB |
Partially correct |
24 |
Partially correct |
60 ms |
7876 KB |
Partially correct |
25 |
Partially correct |
80 ms |
7428 KB |
Partially correct |
26 |
Partially correct |
70 ms |
7428 KB |
Partially correct |
27 |
Partially correct |
66 ms |
7456 KB |
Partially correct |
28 |
Partially correct |
67 ms |
7412 KB |
Partially correct |
29 |
Partially correct |
74 ms |
7304 KB |
Partially correct |
30 |
Partially correct |
70 ms |
7440 KB |
Partially correct |
31 |
Partially correct |
67 ms |
7492 KB |
Partially correct |
32 |
Partially correct |
72 ms |
7940 KB |
Partially correct |
33 |
Partially correct |
64 ms |
7964 KB |
Partially correct |