1 条题解
-
0
枚举
s[i]
的拆分方案,检查把s[i]
拆成L
和R
之后,L
和R
是否出现过。如果暴力枚举的话, 会超时。可以使用二分查找或者直接使用时间复杂度为 的map
。map
文档:http://wiki.33dai.cn/lang/csl/associative-container/#map#include <bits/stdc++.h> using namespace std; int t; int n; map<string, int> m; string s[112345]; int main() { cin >> t; while (t--) { cin >> n; m.clear(); for (int i = 1; i <= n; i++) { cin >> s[i]; m[s[i]]++; } for (int i = 1; i <= n; i++) { bool flag = false; //一开始认为找不到 //枚举s[i]的分界点,L:0~k-1、R:k~len-1 for (int k = 1; k < s[i].length(); k++) { string L = ""; string R = ""; for (int li = 0; li < k; li++) L += s[i][li]; for (int ri = k; ri < s[i].length(); ri++) R += s[i][ri]; if (m[L] > 0 && m[R] > 0) { flag = true; break; } } if (flag) cout << "1"; else cout << "0"; } cout << "\n"; } return 0; }
- 1
信息
- ID
- 1099
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 14
- 已通过
- 3
- 上传者