QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#147401 | #4564. Digital Circuit | APROHACK | 4 | 495ms | 47912kb | C++23 | 2.9kb | 2023-08-23 04:27:57 | 2023-08-25 01:28:01 |
Judging History
answer
#include "circuit.h"
#include <bits/stdc++.h>
#define ll long long
#define ff first
#define ss second
#define pb push_back
using namespace std;
int n, m;
vector<int>child[200001];
bool state[200001];
ll encen[200001][2]; // encendido y apagado
const ll MOD = 1000002022;
ll past[2002][2002];
void generate(int node);
int parent[200002];
bool casito = true;
void init(int N, int M, std::vector<int> P, std::vector<int> A) {
n = N;
m = M;
if( m != n+1 )casito = false;
for(int i = 0 ; i < n+m ; i ++){
if(P[i] != -1){
child[P[i]].pb(i);
if(P[i] != (i-1)/2)casito = false;
}
parent[i] = P[i];
}
int temp = m;
while(temp != 1){
if(temp % 2 == 1)casito = false;
temp /= 2;
}
//assert(casito);
for(int i = N ; i <= N+M ; i ++)state[i] = A[i-N];
memset(past, -1, sizeof past);
generate(0);
}
ll mem[2002][2002];
ll currentIt = -1 ;
void newDp(){
currentIt++;
}
ll dp(int parent, ll i, int k){
if(k < 0)return 0;
if(i == child[parent].size() and k > 0)return 0;
else if(i == child[parent].size()) return 1;
if(past[i][k] == currentIt)return mem[i][k];
past[i][k] = currentIt;
return mem[i][k] = ((dp(parent, i+1, k-1) * encen[child[parent][i]][0] % MOD) + ((dp(parent, i+1, k) * encen[child[parent][i]][1])%MOD))%MOD;
}
void generate(int node){
if(node >= n){
if(state[node]){
encen[node][0] = 1;
encen[node][1] = 0;
}else{
encen[node][0] = 0;
encen[node][1] = 1;
}
return ;
}
for(int i = 0 ; i < child[node].size() ; i ++){
generate(child[node][i]);
}
newDp();
ll enc = 0;
for(ll i = 1 ; i <= child[node].size() ; i ++){
enc += dp(node, 0, i) * i % MOD;
enc %= MOD;
}
ll allWays = 1;
for(int i = 0 ; i < child[node].size() ; i ++){
allWays *= (encen[child[node][i]][0] + encen[child[node][i]][1])%MOD;
allWays %= MOD;
}
allWays *= (ll)child[node].size();
allWays %= MOD;
encen[node][0] = enc;
encen[node][1] = ((allWays - enc) + MOD) % MOD;
//cout << "for node " << node << " there are " << encen[node][0] << ", " << encen[node][1] << "\n";
}
void recargar(int node){
//cout << "recargando " << node << endl;
if(node >= n){
if(state[node]){
encen[node][0] = 1;
encen[node][1] = 0;
}else{
encen[node][0] = 0;
encen[node][1] = 1;
}
if(parent[node] != -1)recargar(parent[node]);
return ;
}
newDp();
ll enc = 0;
for(ll i = 1 ; i <= child[node].size() ; i ++){
enc += dp(node, 0, i) * i % MOD;
enc %= MOD;
}
ll allWays = 1;
for(ll i = 0 ; i < child[node].size() ; i ++){
allWays *= (encen[child[node][i]][0] + encen[child[node][i]][1]) % MOD;
allWays %= MOD;
}
allWays *= (ll) child[node].size();
allWays %= MOD;
encen[node][0] = enc;
encen[node][1] = ((allWays - enc) + MOD) % MOD;
if(parent[node] != -1)recargar(parent[node]);
}
int count_ways(int L, int R) {
for(int i = L ; i <= R ; i ++){
state[i] = !state[i];
}
if(true or ( L == R and casito and (n > 1000 or m > 1000) ) )recargar(L);
else generate(0);
return encen[0][0];
}
詳細信息
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 2ms
memory: 42128kb
input:
1 2 -1 0 0 0 0 1 1 2 2 1 2 2 2 1 2 -1 -1 -2 -2
output:
1 2 1 1 2
result:
wrong answer 5th lines differ - expected: '0', found: '1'
Subtask #2:
score: 0
Wrong Answer
Test #9:
score: 0
Wrong Answer
time: 4ms
memory: 45232kb
input:
1 2 -1 0 0 0 0 1 1 2 2 1 2 2 2 1 2 -1 -1 -2 -2
output:
1 2 1 1 2
result:
wrong answer 5th lines differ - expected: '0', found: '1'
Subtask #3:
score: 0
Skipped
Dependency #1:
0%
Subtask #4:
score: 4
Accepted
Test #43:
score: 4
Accepted
time: 123ms
memory: 46316kb
input:
32767 32768 -1 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50...
output:
431985922 394586018 431985922 469385826 506785730 469385826 431985922 469385826 431985922 469385826 506785730 469385826 431985922 394586018 357186114 319786210 357186114 394586018 431985922 394586018 357186114 394586018 431985922 469385826 506785730 469385826 431985922 394586018 357186114 319786210 ...
result:
ok 71356 lines
Test #44:
score: 0
Accepted
time: 156ms
memory: 47912kb
input:
65535 65536 -1 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50...
output:
913758140 928668562 913758140 898847718 883937296 869026874 883937296 898847718 913758140 928668562 913758140 898847718 883937296 898847718 913758140 928668562 913758140 898847718 913758140 928668562 943578984 928668562 913758140 928668562 913758140 898847718 883937296 869026874 883937296 898847718 ...
result:
ok 100002 lines
Test #45:
score: 0
Accepted
time: 173ms
memory: 47860kb
input:
65535 65536 -1 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50...
output:
152530276 137619854 122709432 107799010 92888588 77978166 63067744 48157322 33246900 18336478 3426056 988517656 973607234 958696812 943786390 928875968 913965546 899055124 884144702 869234280 854323858 839413436 824503014 809592592 794682170 779771748 764861326 749950904 735040482 720130060 70521963...
result:
ok 100002 lines
Test #46:
score: 0
Accepted
time: 153ms
memory: 47556kb
input:
65535 65536 -1 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50...
output:
14910422 29820844 44731266 59641688 74552110 89462532 104372954 119283376 134193798 149104220 164014642 178925064 193835486 208745908 223656330 238566752 253477174 268387596 283298018 298208440 313118862 328029284 342939706 357850128 372760550 387670972 402581394 417491816 432402238 447312660 462223...
result:
ok 100002 lines
Subtask #5:
score: 0
Wrong Answer
Dependency #4:
100%
Accepted
Test #47:
score: 0
Wrong Answer
time: 495ms
memory: 46440kb
input:
32767 32768 -1 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50...
output:
2777846 40177750 2777846 965379964 927980060 927980060 927980060 927980060 927980060 927980060 927980060 927980060 890580156 890580156 890580156 890580156 890580156 853180252 853180252 853180252 890580156 890580156 890580156 853180252 890580156 890580156 890580156 890580156 927980060 927980060 89058...
result:
wrong answer 3rd lines differ - expected: '105182172', found: '2777846'
Subtask #6:
score: 0
Skipped
Dependency #2:
0%
Subtask #7:
score: 0
Skipped
Dependency #3:
0%
Subtask #8:
score: 0
Skipped
Dependency #1:
0%