1 solutions

  • 4
    @ 2024-4-16 13:49:35

    题意

    在一个数列里求三个连续的区间,三个区间的和分别为 PPQQRR

    思路

    首先老师优化思路 1 有用,先写上。

    然后解释一下优化思路 2:

    由于是求区间和,所以公式是 P=SySxP = S_y - S_xSS 是区间和数组)

    移项就是 Sx+P=SyS_x + P = S_y,其他两个也是这样的道理

    代码

    #include <bits/stdc++.h>
    // 不开 long long 见祖宗
    #define int long long
    using namespace std;
    int a[200005],s[200005];
    signed main(int argc, char **argv){
    	int n,p,q,r;
    	cin >> n >> p >> q >> r;
    	for (int i = 1;i <= n;i++){
    		cin >> a[i];
    		s[i] = s[i - 1] + a[i];
    	}
    	for (int i = 0;i <= n;i++){// 这里从 0 开始
    		if (binary_search(s,s + n + 1,s[i] + p) && binary_search(s,s + n + 1,s[i] + p + q) && binary_search(s,s + n + 1,s[i] + p + q + r)){
    			printf("Yes");
    			return 0;
    		}
    	}
    	printf("No");
      
        // 别看这里
    //	srand(time(0));
    //	int x = rand() % 23;
    //	if (x < 9)	cout << "Yes";
    //	else	cout << "No";
    	return 0;
    }
    
    • 1

    Information

    ID
    1056
    Time
    1000ms
    Memory
    512MiB
    Difficulty
    9
    Tags
    (None)
    # Submissions
    394
    Accepted
    19
    Uploaded By