河南理工大学算法协会暑期集训积分赛网络同步赛-Numbers of interval-尺取法

Posted ofshk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了河南理工大学算法协会暑期集训积分赛网络同步赛-Numbers of interval-尺取法相关的知识,希望对你有一定的参考价值。

技术图片

 

原题链接:https://hpuoj.com/contest/24/problem/E/

思路:一般的尺取法,不断更新左端点的值。

 

 1 #include<iostream>
 2 #include<iomanip>
 3 #include<string.h>
 4 #include<set>
 5 #include<map>
 6 #include<stdio.h>
 7 #include<queue>
 8 #define inf 0x3f3f3f3f
 9 const int N=1000020;
10 using namespace std;
11 typedef long long ll;
12 
13 int a[N];
14 
15 int main()
16 
17     std::ios::sync_with_stdio(false);
18     cin.tie(0);
19     cout.tie(0);
20     int n,k;
21     cin>>n>>k;
22     memset(a,0,sizeof(a));
23     // memset(sum,0,sizeof(sum));
24     //  sum[0]=0;
25     int l=1;
26     ll sum=0,ans=0;//ans要设成ll,不然第二组数据就过不去
27     for(int i=1; i<=n; i++)
28     
29         cin>>a[i];
30         //sum[i]=sum[i-1]+a[i];
31         sum+=a[i];
32         while(l<=i&&sum>=k)
33         
34             //  l++;
35             ans=ans+n-i+1;
36             sum-=a[l];
37             l++;
38         
39     
40     cout<<ans<<endl;
41     return 0;
42 

 

这是直接调用库函数的一种写法(和上面的原理一样):

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e6+100;
 4 typedef long long ll;
 5 long long a[N],sum[N];
 6 int main()
 7 
 8     int n,k;
 9     cin>>n>>k;
10     for(int i=1; i<=n; i++) 
11     
12         cin>>a[i];
13         sum[i]=sum[i-1]+a[i];
14     
15     
16     long long ans=0;
17     for(int l=1; l<=n; l++)
18     
19         int id=lower_bound(sum+1,sum+n+1,k+sum[l-1])-sum;
20         ans+=(n-id+1);
21     
22     cout<<ans<<endl;
23     return 0;
24 

 

以上是关于河南理工大学算法协会暑期集训积分赛网络同步赛-Numbers of interval-尺取法的主要内容,如果未能解决你的问题,请参考以下文章

HPU暑期集训积分赛1

HPU暑期集训积分赛2

两所大学中的智能车竞赛校内赛

研赛数模集训·第二弹《神经网络算法简介& Matlab 实现》线上讲座通知

河南工业大学2017校赛题解

中南大学2018年ACM暑期集训前期训练题集(入门题) X: 又一道简单题