做淘宝券推广的网站有哪些,android studio手机版下载,一个空间可以建多个网站,成都品牌策划设计公司解题思路#xff1a; 首先#xff0c;不能使用暴力枚举#xff0c;时间为O(n2)#xff0c;超时。以下为正确做法#xff1a; 假设找到一段区间#xff08;其和m#xff09;#xff0c;如上图黄色部分#xff0c;那么该区间加上i后面的元素形成的新区间和都m 首先不能使用暴力枚举时间为O(n2)超时。以下为正确做法 假设找到一段区间其和m如上图黄色部分那么该区间加上i后面的元素形成的新区间和都m因此以该区间为基础就有n-i1个区间符合要求。 那么我们只需要从1开始找到每一个恰好大于等于m的黄色区间再依次把每一个黄色区间为基础的区间的个数相加就得到答案。 AC代码
#include bits/stdc.h
using namespace std;
using ll long long;
const int N 1e59;
int a[N];
ll m;
// 依次找出区间和m的滑动窗口,j
int main()
{ll sum 0,ans 0;int n, j 1;cin n m;for(int i 1; i n; i){cin a[i];sum a[i];if(sum m){ans (n-i1);while(j i sum m){ // 数组从1开始序号递增所以当序号ij时区间合法 sum - a[j];j;if(sum m)ans (n-i1);} }}cout ans \n; return 0;
} 知识点 双指针滑动窗口