포함배제법칙 응용문제 관련

  • JAYS
    JAYS

    위키 페이지에 나와있는 포함배제법칙을 이용한 문제를 풀어보다가 해결이 잘 안되어 글을 남깁니다.

    현재 고민하고 있는 문제는 Codeforces에 있는 Jzzhu and Numbers 입니다. Editorial도 읽어보고 정답판정을 받은 코드도 읽어보았습니다만 어려움을 겪고 있습니다.

    두 가지 부분에서 막히고 있는데 하나는 정답의 개수를 표현하는 최종수식(Editorial에 표현된 \sum(-1)^{g(x)}2^{f(x)})이고 다른 하나는 XOR 연산을 이용해 n*2^n Loop에서 계산하는 부분입니다. 이 두 가지 부분에 대한 도움을 구하고자 질문을 남깁니다.

    위키페이지에 좋은 글 남겨주셔서 많이 배우고 있습니다. 항상 감사합니다.


    9년 전
2개의 댓글이 있습니다.
  • restart
    restart

    전체 가짓수는 2^{n}-1입니다.(1 \le k이므로) 여기서 어떤 조합에 대해서 a_{i1}&a_{i2}&…a_{ik}의 값 p0이 아닌 가짓수를 뺍시다. U_{i}pi번째 비트가 켜져 있게끔 만드는 조합의 집합이라 한다면, 빼야 할 값은 |U_{0} \cup U_{1} \cup … \cup U_{20}|입니다. 그런데 f(x)의 정의에 따르면 2^{f(x)}-1p에서 x를 포함하게끔 만드는 조합의 가짓수가 되고, 편의상 아래서는 이 값을 f(x)로 부르면
    |U_{0}|=f(1_{2})이고 |U_{1}|=f(10_{2})이고 |U_{2}|=f(100_{2}).. 이런식으로 나갑니다. 또한 |U_{0} \cap U_{1}|=f(11_{2})이고 |U_{1} \cap U_{2}|=f(110_{2}) ... |U_{0} \cap U_{1} \cap U_{2}| = f(111_{2}) ... 뭐 이런식이 됩니다. g(x)만큼 교집합이 이루어지게 되는 거죠. 이제 포함배제 원리를 적용하면
    |U_{0} \cup U_{1} \cup … \cup U_{20}|=\sum_{x=1}^{2^{20}} (-1)^{g(x)-1}(2^{f(x)}-1)이 되고 전체 가짓수와 빼면 해당 식이 나옵니다.
    2^{f(x)}-1에서 뒷부분 -1은 다 모으면 _nC_0-_nC_1+_nC_2…_nC_n꼴로 그냥 없어집니다.


    9년 전 link
  • JAYS
    JAYS

    U_i의 정의를 보니 이해가 됩니다. 자세히 적어주신 덕분에 해결하였습니다. 감사합니다 :)


    9년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.