Submission #719021

#TimeUsernameProblemLanguageResultExecution timeMemory
719021baojiaopisuDigital Circuit (IOI22_circuit)C++17
2 / 100
30 ms2120 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; using ull = unsigned long long; using pii = pair<int, int>; using pll = pair<ll, ll>; using pld = pair<ld, ld>; #define fi first #define se second #define left BAO #define right ANH #define pb push_back #define pf push_front #define mp make_pair #define ins insert #define btpc __builtin_popcount #define btclz __builtin_clz #define sz(x) (int)(x.size()); #define all(x) x.begin(), x.end() #define debug(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] " mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int d4x[4] = {1, 0, -1, 0}; int d4y[4] = {0, 1, 0, -1}; int d8x[8] = {0, 1, 1, 1, 0, -1, -1, -1}; int d8y[8] = {1, 1, 0, -1, -1, -1, 0, 1}; template<class X, class Y> bool minimize(X &x, const Y &y) { if (x > y) { x = y; return true; } return false; } template<class X, class Y> bool maximize(X &x, const Y &y) { if (x < y) { x = y; return true; } return false; } const int MOD = 1000002022; //998244353 template<class X, class Y> void add(X &x, const Y &y) { x = (x + y); if(x >= MOD) x -= MOD; } template<class X, class Y> void sub(X &x, const Y &y) { x = (x - y); if(x < 0) x += MOD; } /* Author : Le Ngoc Bao Anh, 12A5, LQD High School for Gifted Student*/ const ll INF = 1e9; const int N = 1000 + 10; vector<int> g[N]; ll dp[N][2], f[N][N]; int n, m; vector<int> state; void init(int N, int M, vector<int> p, vector<int> A) { for(int i = 1; i < N + M; i++) { g[p[i]].pb(i); } n = N; m = M; state = A; } void dfs(int u) { if(u >= n) return; for(int i = 0; i <= g[u].size(); i++) f[u][i] = 0; f[u][0] = 1; for(auto v : g[u]) { dfs(v); for(int i = g[u].size(); i >= 0; i--) { f[u][i] = f[u][i] * dp[v][0] % MOD; if(i > 0) f[u][i] += f[u][i - 1] * dp[v][1] % MOD; f[u][i] %= MOD; } } dp[u][0] = dp[u][1] = 0; for(int i = 0; i <= g[u].size(); i++) { dp[u][1] += f[u][i] * i % MOD; dp[u][0] += f[u][i] * (g[u].size() - i) % MOD; dp[u][0] %= MOD; dp[u][1] %= MOD; } } ll count_ways(int l, int r) { l -= n; r -= n; for(int i = l; i <= r; i++) state[i] ^= 1; for(int i = n; i < n + m; i++) { dp[i][1] = state[i - n]; dp[i][0] = state[i - n] ^ 1; } dfs(0); return dp[0][1]; }

Compilation message (stderr)

circuit.cpp: In function 'void dfs(int)':
circuit.cpp:87:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |  for(int i = 0; i <= g[u].size(); i++) f[u][i] = 0;
      |                 ~~^~~~~~~~~~~~~~
circuit.cpp:99:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   99 |  for(int i = 0; i <= g[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...