Submission #786989

#TimeUsernameProblemLanguageResultExecution timeMemory
786989thimote75Digital Circuit (IOI22_circuit)C++17
2 / 100
3053 ms1872 KiB
#include "circuit.h" #include <bits/stdc++.h> #define num long long using namespace std; const int MOD = 1000002022; using idata = vector<signed>; using ndata = vector<num>; ndata C; ndata Gamma; idata status; idata target; int N, M; void init(int _N, int _M, idata P, idata A) { N = _N; M = _M; C .resize(N); Gamma.resize(N + 1, 1); status = A; target.resize(M); for (int i = 0; i < M; i ++) target[i] = P[i + N]; for (int i = 1; i < N + M; i ++) C[P[i]] ++; for (int i = N - 1; i >= 0; i --) Gamma[i] = (C[i] * Gamma[i + 1]) % MOD; } int count_ways(int L, int R) { L -= N; R -= N; for (int i = L; i <= R; i ++) status [i] = 1 - status[i]; idata localC(N); idata localD(N); int size_last = 0; num res = 0; for (int i = 0; i < M; i ++) { if (status[i] == 0) continue ; localC[target[i]] ++; } num avec = localC[N - 1]; num sans = C[N - 1] - localC[N - 1]; if (sans == 0 && N != 1) localC[N - 2] ++; for (int i = N - 2; i >= 0; i --) { if (localC[i] == C[i]) { avec = Gamma[i]; sans = 0; if (i != 0) localC[i - 1] ++; continue ; } avec = localC[i] * sans * Gamma[i + 1] + avec; avec %= MOD; sans = (C[i] - 1 - localC[i]) * Gamma[i + 1]; sans %= MOD; } return avec; }

Compilation message (stderr)

circuit.cpp: In function 'int count_ways(int, int)':
circuit.cpp:43:7: warning: unused variable 'size_last' [-Wunused-variable]
   43 |   int size_last = 0;
      |       ^~~~~~~~~
circuit.cpp:44:7: warning: unused variable 'res' [-Wunused-variable]
   44 |   num res       = 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...