3 条题解

  • 0
    @ 2023-9-12 17:20:39

    暑假的救赎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
      @ 2023-7-24 19:57:44

      根据题目描述,我们需要判断给定的 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
        @ 2023-7-3 20:29:03

        image

        #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
        上传者