제출 #974751

#제출 시각아이디문제언어결과실행 시간메모리
974751LucaIlie디지털 회로 (IOI22_circuit)C++17
46 / 100
3024 ms18956 KiB
#include "circuit.h" #include <bits/stdc++.h> using namespace std; const int MAX_N = 2e5; const int MOD = 1e9 + 2022; bool active[MAX_N]; int value[MAX_N], dpTot[MAX_N]; vector<int> adj[MAX_N], prefix[MAX_N], suffix[MAX_N]; int n, m; void dfsDpTot( int u ) { for ( int v: adj[u] ) dfsDpTot( v ); dpTot[u] = 1; if ( adj[u].size() == 0 ) return; for ( int v: adj[u] ) dpTot[u] = (long long)dpTot[u] * dpTot[v] % MOD; dpTot[u] = (long long)dpTot[u] * adj[u].size() % MOD; } void dfsCalcValues( int u, int val ) { if ( adj[u].size() == 0 ) { value[u] = val; return; } prefix[u].resize( adj[u].size() + 1 ); suffix[u].resize( adj[u].size() + 1 ); prefix[u][0] = 1; for ( int i = 0; i < adj[u].size(); i++ ) { int v = adj[u][i]; prefix[u][i + 1] = (long long)prefix[u][i] * dpTot[v] % MOD; } suffix[u][adj[u].size()] = 1; for ( int i = adj[u].size() - 1; i >= 0; i-- ) { int v = adj[u][i]; suffix[u][i] = (long long)suffix[u][i + 1] * dpTot[v] % MOD; } for ( int i = 0; i < adj[u].size(); i++ ){ int v = adj[u][i]; dfsCalcValues( v, (long long)val * prefix[u][i] % MOD * suffix[u][i + 1] % MOD ); } } void init( int N, int M, vector<int> P, vector<int> A ) { n = N + M, m = M; for ( int v = 1; v < n; v++ ) adj[P[v]].push_back( v ); for ( int v = 0; v < m; v++ ) active[v + n - m] = A[v]; dfsDpTot( 0 ); dfsCalcValues( 0, 1 ); } int count_ways( int L, int R ) { for ( int i = L; i <= R; i++ ) active[i] = !active[i]; int ans = 0; for ( int i = n - m; i < n; i++ ) ans = (ans + value[i] * active[i]) % MOD; return ans; }

컴파일 시 표준 에러 (stderr) 메시지

circuit.cpp: In function 'void dfsCalcValues(int, int)':
circuit.cpp:37:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |     for ( int i = 0; i < adj[u].size(); i++ ) {
      |                      ~~^~~~~~~~~~~~~~~
circuit.cpp:47:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |     for ( int i = 0; i < adj[u].size(); i++ ){
      |                      ~~^~~~~~~~~~~~~~~
#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...