1 条题解
-
0
首先字符集大小是 考虑状压,即把字符串映射为二进制。
对于 的每个下标可以用调和级数和状压映射出其二进制数,每个人的天赋直接遍历字符串映射为二进制。
两个二进制数 ,即 属于 。
#include <bits/stdc++.h> using i64 = long long; using u32 = unsigned; using u64 = unsigned long long; void solve() { int n; std::cin >> n; std::vector<std::pair<int, int>> a(n); for (int i = 0; i < n; ++i) { std::string s; std::cin >> s >> a[i].second; for (auto j : s) { int t = j - 'a'; a[i].first |= 1 << t; } } std::string t; std::cin >> t; const int N = t.size(); std::vector<int> f(N + 1); for (int i = 1; i <= N; ++i) { for (int j = i; j <= N; j += i) { int tt = t[i - 1] - 'a'; f[j] |= 1 << tt; } } for (auto [u, v] : a) { std::cout << ((u | f[v]) == f[v] ? "YES" : "NO") << "\n"; } } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int t; std::cin >> t; while (t--) { solve(); } return 0; }
- 1
信息
- ID
- 142
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 15
- 已通过
- 5
- 上传者