题解:P10565 [ICPC2024 Xi'an I] Chained Lights

· · 题解

\textbf{Solution}

诈骗题。

非常重要的是,本题的 press 是递归定义的,与平常所做的完全平方数类型的开关灯题不同。

考虑 a 的所有除自身以外的因数 d,参考 press 函数,容易发现对于每次对 d 的修改后,必然会修改 a

\text{cnt}_i 表示 i 被修改的次数,可以发现,

\text{cnt}_i=\sum\limits_{\mathclap{d\mid i\operatorname{and}d\not=i}}{\text{cnt}_d}+1

特别地,这个加 1 是因为遍历到 d​ 时,对此的修改。

容易发现,当 \text{cnt}_i​ 为奇数时,灯开;反之,灯灭。

综上所述,灯开着当且仅当 k=1 的情况。

\textbf{Code}

#include <bits/stdc++.h>

int main() {
  int T, n, k;
  for (std::cin >> T; T; --T) {
    std::cin >> n >> k;
    if (k ^ 1) puts("NO"); // k != 1
    else puts("YES"); // k == 1
  }
  return 0;
}