Submission #835709

#TimeUsernameProblemLanguageResultExecution timeMemory
835709APROHACKDigital Circuit (IOI22_circuit)C++17
18 / 100
3086 ms30400 KiB
#include <bits/stdc++.h> #include "circuit.h" #include <vector> #define ll long long #define ff first #define ss second #define pb push_back using namespace std; int n, m; vector<int>child[100001]; bool state[100001]; ll encen[100001][2]; // encendido y apagado const int MOD = 1000002022; int past[2002][2002]; void init(int N, int M, std::vector<int> P, std::vector<int> A) { n = N; m = M; for(int i = 0 ; i < n+m ; i ++){ if(P[i] != -1){ child[P[i]].pb(i); } } for(int i = N ; i <= N+M ; i ++)state[i] = A[i-N]; memset(past, -1, sizeof past); } ll mem[2002][2002]; int currentIt = -1; void newDp(){ currentIt++; } ll dp(int parent, int 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] + dp(parent, i+1, k) * encen[child[parent][i]][1])%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(int i = 1 ; i <= child[node].size() ; i ++){ enc += dp(node, 0, i) * i; 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]); allWays %= MOD; } allWays *= 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"; } int count_ways(int L, int R) { ll ans = 0; for(int i = L ; i <= R ; i ++){ state[i] = !state[i]; } generate(0); return encen[0][0]; }

Compilation message (stderr)

circuit.cpp: In function 'long long int dp(int, int, int)':
circuit.cpp:36:7: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |  if(i == child[parent].size() and k > 0)return 0;
      |     ~~^~~~~~~~~~~~~~~~~~~~~~~
circuit.cpp:37:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |  else if(i == child[parent].size()) return 1;
      |          ~~^~~~~~~~~~~~~~~~~~~~~~~
circuit.cpp: In function 'void generate(int)':
circuit.cpp:54:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |  for(int i = 0 ; i < child[node].size() ; i ++){
      |                  ~~^~~~~~~~~~~~~~~~~~~~
circuit.cpp:59:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |  for(int i = 1 ; i <= child[node].size() ; i ++){
      |                  ~~^~~~~~~~~~~~~~~~~~~~~
circuit.cpp:64:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |  for(int i = 0 ; i < child[node].size() ; i ++){
      |                  ~~^~~~~~~~~~~~~~~~~~~~
circuit.cpp: In function 'int count_ways(int, int)':
circuit.cpp:77:5: warning: unused variable 'ans' [-Wunused-variable]
   77 |  ll ans = 0;
      |     ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...