제출 #630128

#제출 시각아이디문제언어결과실행 시간메모리
630128flashmt디지털 회로 (IOI22_circuit)C++17
18 / 100
3008 ms15012 KiB
#include <bits/stdc++.h>
#include "circuit.h"
using namespace std;
const int BASE = 1e9 + 2022;
const int N = 100100;

int n, m;
vector<int> a[N];
vector<int> states;
vector<long long> coef, ways;
long long ans;

void dfsWay(int x)
{
  if (empty(a[x]))
    return;
  for (int y : a[x])
  {
    dfsWay(y);
    ways[x] *= ways[y];
    ways[x] %= BASE;
  }
  ways[x] *= size(a[x]);
  ways[x] %= BASE;
}

void dfsCoef(int x)
{
  vector<long long> prefix(size(a[x]));
  for (int i = 0; i < size(a[x]); i++)
  {
    prefix[i] = ways[a[x][i]];
    if (i)
      prefix[i] = prefix[i] * prefix[i - 1] % BASE;
  }

  long long suffix = 1;
  for (int i = int(size(a[x])) - 1; i >= 0; i--)
  {
    int y = a[x][i];
    coef[y] = suffix;
    if (i)
      coef[y] = coef[y] * prefix[i - 1] % BASE;
    suffix *= ways[y];
    suffix %= BASE;
  }

  for (int y : a[x])
  {
    coef[y] = coef[y] * coef[x] % BASE;
    dfsCoef(y);
  }
}

void init(int N, int M, vector<int> P, vector<int> A)
{
  n = N;
  m = M;
  for (int i = 1; i < n + m; i++)
    a[P[i]].push_back(i);
  states = A;
  ways.assign(n + m, 1);
  dfsWay(0);
  coef.assign(n + m, 1);
  dfsCoef(0);
  for (int i = 0; i < m; i++)
    if (states[i])
      ans = (ans + coef[n + i]) % BASE;
}

int count_ways(int L, int R)
{
  for (int i = L; i <= R; i++)
  {
    states[i - n] ^= 1;
    if (states[i - n]) ans = (ans + coef[i]) % BASE;
    else ans = (ans - coef[i] + BASE) % BASE;
  }
  return ans;
}

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

circuit.cpp: In function 'void dfsCoef(int)':
circuit.cpp:30:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |   for (int i = 0; i < size(a[x]); 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...