제출 #1058016

#제출 시각아이디문제언어결과실행 시간메모리
1058016tolbi디지털 회로 (IOI22_circuit)C++17
18 / 100
3079 ms3160 KiB
#include "circuit.h" #include <bits/stdc++.h> using namespace std; constexpr int MOD = 1e9+2022; vector<vector<int>> arr; int N,M,P; array<int,2> dp[200023]; void init(int N, int M, std::vector<int> P, std::vector<int> A) { ::N=N,::M=M; arr.resize(N); for (int i = 1; i < N+M; i++){ arr[P[i]].push_back(i); } for (int i = N; i < N+M; i++){ dp[i][A[i-N]]=1; dp[i][A[i-N]^1]=0; } } int count_ways(int L, int R) { for (int i = L; i <= R; i++){ swap(dp[i][0],dp[i][1]); } for (int i = N-1; i >= 0; i--){ vector<int> curdp(1,0); curdp[0]=1; for (int j = 0; j < arr[i].size(); j++){ vector<int> ndp(curdp.size()+1); for (int k = 0; k < ndp.size(); k++){ if (k!=0){ ndp[k]=(1ll*curdp[k-1]*dp[arr[i][j]][1])%MOD; if (ndp[k]>=MOD) ndp[k]-=MOD; } if (k!=curdp.size()){ ndp[k]+=(1ll*curdp[k]*dp[arr[i][j]][0])%MOD; if (ndp[k]>=MOD) ndp[k]-=MOD; } } swap(ndp,curdp); } dp[i][0]=dp[i][1]=0; for (int j = 0; j < curdp.size(); j++){ dp[i][0]+=(1ll*(arr[i].size()-j)*curdp[j])%MOD; dp[i][1]+=(1ll*j*curdp[j])%MOD; if (dp[i][0]>=MOD) dp[i][0]-=MOD; if (dp[i][1]>=MOD) dp[i][1]-=MOD; } } return dp[0][1]; }

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

circuit.cpp: In function 'int count_ways(int, int)':
circuit.cpp:29:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |   for (int j = 0; j < arr[i].size(); j++){
      |                   ~~^~~~~~~~~~~~~~~
circuit.cpp:31:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |    for (int k = 0; k < ndp.size(); k++){
      |                    ~~^~~~~~~~~~~~
circuit.cpp:36:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |     if (k!=curdp.size()){
      |         ~^~~~~~~~~~~~~~
circuit.cpp:44:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |   for (int j = 0; j < curdp.size(); j++){
      |                   ~~^~~~~~~~~~~~~~
#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...