zoukankan      html  css  js  c++  java
  • 河南理工大学算法协会暑期集训积分赛(二)网络同步赛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 }
  • 相关阅读:
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    Interesting Finds: 2010 02.08 ~ 02.13
  • 原文地址:https://www.cnblogs.com/OFSHK/p/11259339.html
Copyright © 2011-2022 走看看