AT_xmascon22_g.Generator SAT

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个输入文件,每个文件包含 TT 组测试用例。每组测试用例给定整数 N,SN, S,请你回答以下问题:

定义整数序列 A0,A1,…,A4N−1A_0, A_1, \ldots, A_{4N-1},按照如下方式生成。数式和 C++ 伪代码如下所示:

  1. 令变量 s←Ss \gets S。
  2. 对于 i=0,1,…,4N−1i = 0, 1, \ldots, 4N - 1,依次令 Ai←⌊i/4⌋+1A_i \gets \lfloor i/4 \rfloor + 1。
  3. 对于 i=0,1,…,4N−1i = 0, 1, \ldots, 4N-1,依次令 s←(s×2022) mod 998244353s \gets (s \times 2022) \bmod 998244353,如果 s≢0(mod2)s \not\equiv 0 \pmod{2},则令 Ai←−AiA_i \gets -A_i。
  4. 对于 i=0,1,…,4N−1i = 0, 1, \ldots, 4N-1,依次令 s←(s×2022) mod 998244353s \gets (s \times 2022) \bmod 998244353,然后交换 As mod (i+1)A_{s \bmod (i+1)} 和 AiA_i 的值。
#include <vector>
std::vector<int> Generate(int N, long long S) {
  long long s = S;
  std::vector<int> A(4 * N);
  for (int i = 0; i < 4 * N; ++i) {
    A[i] = i / 4 + 1;
  }
  for (int i = 0; i < 4 * N; ++i) {
    s = (s * 2022) % 998244353;
    if (s % 2 != 0) {
      A[i] = -A[i];
    }
  }
  for (int i = 0; i < 4 * N; ++i) {
    s = (s * 2022) % 998244353;
    int j = s % (i + 1);
    int t = A[j];
    A[j] = A[i];
    A[i] = t;
  }
  return A;
}

在下面 NN 个条件中,判断是否存在一种从 2N2^N 种方案中选取 NN 个“好的整数”的方式,使得以下每个条件都成立。如果存在这样的方式,请输出其中一组方案:

  • 对于每组 A4j,A4j+1,A4j+2,A4j+3A_{4j}, A_{4j+1}, A_{4j+2}, A_{4j+3}(j=0,1,…,N−1j = 0, 1, \ldots, N-1),其中至少有一个是“好的整数”。

这里,“好的整数”的选法指:对于每个 j=1,2,…,Nj = 1, 2, \ldots, N,要么选择 +j+j 是好整数,要么 −j-j 是好整数(但不能同时选择),总共有 2N2^N 种选法。

请判断是否存在满足上述条件的选法。如果存在,请输出其中一组方案。

输入格式

输入的第一行包含一个整数 TT,表示测试用例的组数。接下来有 TT 组测试用例,每组测试用例如下格式:

N SN\ S

输出格式

对于每组测试用例,输出一行:

若存在满足所有条件的方案,输出一个长度为 NN 的字符串,第 jj 位为 '+' 表示 +j+j 是好整数,为 '-' 表示 −j-j 是好整数。

如果不存在满足条件的方案,输出 0。

输入输出样例

  • 输入#1

    2
    3 1
    4 20221224

    输出#1

    ++-
    +--+

说明/提示

样例解释 1

对于第 11 组测试用例:

  • (A0,A1,A2,A3)=(−3,−3,−2,+3)(A_0, A_1, A_2, A_3) = (-3, -3, -2, +3)
  • (A4,A5,A6,A7)=(+2,+1,−1,+3)(A_4, A_5, A_6, A_7) = (+2, +1, -1, +3)
  • (A8,A9,A10,A11)=(+2,+1,−2,+1)(A_8, A_9, A_{10}, A_{11}) = (+2, +1, -2, +1)

例如,若 +1,+2,−3+1, +2, -3 被选为好整数,即对应选择 ++-,则所有条件都能满足。

对于第 22 组测试用例:

  • (A0,A1,A2,A3)=(+3,−2,+2,−3)(A_0, A_1, A_2, A_3) = (+3, -2, +2, -3)
  • (A4,A5,A6,A7)=(+4,+1,+3,−1)(A_4, A_5, A_6, A_7) = (+4, +1, +3, -1)
  • (A8,A9,A10,A11)=(+4,+2,+1,+4)(A_8, A_9, A_{10}, A_{11}) = (+4, +2, +1, +4)
  • (A12,A13,A14,A15)=(−1,−2,−3,−4)(A_{12}, A_{13}, A_{14}, A_{15}) = (-1, -2, -3, -4)

例如,若 +1,−2,−3,+4+1, -2, -3, +4 被选为好整数,即选择 +--+,则所有条件都能满足。

数据范围

  • 1≤T≤101 \le T \le 10。
  • 1≤N≤1051 \le N \le 10^5。
  • 0≤S<9982443530 \le S < 998244353。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页