0%

CF-1078-C. Secret message

题目大意

题目总结:秘密信息 (Secret message)

给定 kk 条长度均为 nn 的字符串(纸条)。你需要构造一个长度为 nn 的目标字符串 SS,满足以下要求:

  • 字符来源限制:对于 SS 中的每一个位置 ii0i<n0 \le i < n),该位置的字符必须是 kk 条纸条中第 ii 个位置出现的某一个字符。

  • 最小化信息度:字符串 SS 的“信息度” dd 必须尽可能小。

    • 信息度 dd 的定义:最小的正整数 dd,使得 SS 可以由一个长度为 dd 的字符串 tt 连续重复多次构成(即 S=t+t++tS = t + t + \dots + t)。这意味着 dd 必须是 nn 的约数。

样例解释

样例 1

输入:n=3,k=2n=3, k=2,纸条为 abcbaa

  • 位置 0 可选字符:{a, b}

  • 位置 1 可选字符:{b, a}

  • 位置 2 可选字符:{c, a}

  • 目标:尝试最小信息度 d=1d=1(即 SS 是由同一个字符重复 3 次)。

  • 检查:若 S="aaa"S = \text{"aaa"},第 0 位 ‘a’(在第一条纸条)、第 1 位 ‘a’(在第二条纸条)、第 2 位 ‘a’(在第二条纸条)均存在。因此 d=1d=1 可行。

  • 输出:aaa

样例 2

输入:n=9,k=2n=9, k=2,纸条为 iiinnnfffnnfiffinn

  • 尝试 d=1d=1:无法找到一个字符在所有 9 个位置都出现。

  • 尝试 d=3d=3:寻找长度为 3 的字符串 tt,使得 S=t+t+tS = t + t + t 满足条件。

  • 检查:若 t="inf"t = \text{"inf"},则 S="infinfinf"S = \text{"infinfinf"}

    • 第 0, 3, 6 位:‘i’ 分别在纸条 1, 2, 2 中出现。
    • 第 1, 4, 7 位:‘n’ 分别在纸条 1, 1, 1 中出现。
    • 第 2, 5, 8 位:‘f’ 分别在纸条 2, 1, 2 中出现。
  • 输出:infinfinf

样例 3

输入:n=4,k=2n=4, k=2,纸条为 acbdbdac

  • 尝试 d=1d=1:不满足。

  • 尝试 d=2d=2:寻找长度为 2 的字符串 tt,使得 S=t+tS = t + t 满足条件。

  • 检查:若 t="ac"t = \text{"ac"},则 S="acac"S = \text{"acac"}

    • 位置 0 (‘a’):在第一条。
    • 位置 1 (‘c’):在第二条。
    • 位置 2 (‘a’):在第二条。
    • 位置 3 (‘c’):在第一条。
  • 输出:acac

思路讲解

其实说白了这道题目就是想让你找一个字符串,一个字符串集的这个最小循环子串。啊,也就是找其最小循环节,但是其最小循环节呢是严格的这个最小循环节长度(即题目中的信息度),就是它不能够呃就是它不能够比如说呃roate,不能够呃循环移动的那种循环节,它是比较严格的那种循环节。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
auto check=[&](ll len,bool gen_ans=false) -> bool {
// 先生成一个长度为 len 的,每一位他能够所选的这个字符的集合(可以使用 Vector 套 bitset 表示.)。
vector<vector<int>> bi=gen_bi(0,len);
// 然后这里是不断的生成,就是继续生成这样子的集合,进行与运算的操作。
for (ll i=len;i<N;i+=len) {
bi=fac_and(bi,gen_bi(i,len));
}
for (int i=0;i<len;++i) {
bool ok=false;
for (int j=0;j<26;++j) {
if (bi[i][j]) {
if (gen_ans) {
ans.push_back('a'+j);
}
ok=true;
break;
}
}
if (!ok) {
return false;
}
}
if (gen_ans) {
string back_up=ans;
for (int i=2;i<=N/len;++i) {
ans+=back_up;
}
}
return true;
};

AC代码

https://codeforces.com/contest/2194/submission/361977470

心路历程(WA,TLE,MLE……)