3 条题解
-
0
暑假的救赎day7 不知道哈希的意义
#include <bits/stdc++.h> using namespace std; int n; string s; int main() { cin >> s >> n; for(int i=1; i <= n ;i++) { int l1,l2,r1,r2; cin >> l1 >> r1 >> l2 >> r2; string p = s.substr(l1-1,r1-l1+1); string t = s.substr(l2-1,r2-l2+1); if(p == t) { cout << "Yes"; } else { cout << "No"; } cout << endl; } }
-
0
根据题目描述,我们需要判断给定的 DNA 序列中的两个区间所对应的 DNA 序列是否完全相同。为了解决这个问题,我们可以通过比较两个区间的子串是否相等来判断兔子的 DNA 序列是否一模一样。
以下是一个可能的解决方案的示例代码:
include <iostream> #include <string> using namespace std; bool checkSameDNA(const string& DNA, int l1, int r1, int l2, int r2) { string sub1 = DNA.substr(l1 - 1, r1 - l1 + 1); string sub2 = DNA.substr(l2 - 1, r2 - l2 + 1); return sub1 == sub2; } int main() { string DNA; cin >> DNA; int m; cin >> m; for (int i = 0; i < m; i++) { int l1, r1, l2, r2; cin >> l1 >> r1 >> l2 >> r2; // 检查两个区间的 DNA 序列是否完全相同 bool isSame = checkSameDNA(DNA, l1, r1, l2, r2); // 输出结果 if (isSame) { cout << "Yes" << endl; } else { cout << "No" << endl; } } return 0; }
-
0
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6 + 10, M = 1e9 + 7; unsigned long long f[N], p[N]; char s[N]; int main() { scanf("%s", s + 1); int n = strlen(s + 1); p[0] = 1; for (int i = 1; i <= n; i++) { f[i] = f[i - 1] * 131 + (s[i] - 'a' + 1); p[i] = p[i - 1] * 131; } int m; cin >> m; int l1, r1, l2, r2; for (int i = 0; i < m; i++) { cin >> l1 >> r1 >> l2 >> r2; if (f[r1] - f[l1 - 1] * p[r1 - l1 + 1] == f[r2] - f[l2 - 1] * p[r2 - l2 + 1]) { printf("Yes\n"); } else { printf("No\n"); } } return 0; }
- 1
信息
- ID
- 238
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- (无)
- 递交数
- 70
- 已通过
- 36
- 上传者