zoukankan      html  css  js  c++  java
  • LA 2678 Subsequence

    题意:给出n个整数,给定整数S,求长度最短的连续序列,使它们的和大于或等于S

    第一种,是求前缀和,然后用lower_bound来找

    第二种,尺取法,

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<set>
     9 #include<queue> 
    10 #include<algorithm>  
    11 using namespace std;
    12 
    13 typedef long long LL;
    14 const int INF = (1<<30)-1;
    15 const int mod=1000000007;
    16 const int maxn=100005;
    17 
    18 int n,S;
    19 int a[maxn],sum[maxn];
    20 
    21 int main(){
    22     while(scanf("%d %d",&n,&S) != EOF){
    23         memset(a,0,sizeof(a));
    24         memset(sum,0,sizeof(sum));
    25         for(int i = 0;i < n;i++) scanf("%d",&a[i]);
    26         sum[0] = a[0];
    27         for(int i = 1;i < n;i++) sum[i] = sum[i-1] + a[i];
    28         
    29     //    for(int i =0;i <= n;i++)
    30     //    printf("sum[%d] = %d
    ",i,sum[i]);
    31         if(sum[n-1] < S){
    32             printf("0
    ");
    33         }
    34         else{
    35             int res = INF;
    36         for(int s = 0;sum[s] + S <= sum[n-1];s++){
    37             int t = lower_bound(sum,sum + n,sum[s] + S) - sum;
    38             res = min(res,t-s);
    39         //    printf("res = %d
    ",res);
    40         }
    41         printf("%d
    ",res);
    42         }        
    43     }
    44     return 0;
    45 }
    View Code
     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<set>
     9 #include<queue> 
    10 #include<algorithm>  
    11 using namespace std;
    12 
    13 typedef long long LL;
    14 const int INF = (1<<30)-1;
    15 const int mod=1000000007;
    16 const int maxn=100005;
    17 
    18 int a[maxn];
    19 int n,S;
    20 
    21 void solve(){
    22     int t = 0,s = 0;
    23     int res = INF;
    24     int sum = 0;
    25     for(;;){
    26         while(t < n && sum < S){
    27             sum += a[t++];
    28         }
    29         if(sum < S) break;
    30         res = min(res,t - s);
    31         sum -= a[s++];
    32     }
    33     if(res > n) res = 0;
    34     printf("%d
    ",res);
    35 }
    36 
    37 int main(){
    38     while(scanf("%d %d",&n,&S) != EOF){
    39         memset(a,0,sizeof(a));
    40         for(int i = 0;i < n;i++) scanf("%d",&a[i]);
    41         solve();
    42     }
    43     return 0;
    44 }
    View Code
  • 相关阅读:
    2018暑假辽宁省集训划水记
    gcd以及exgcd入门讲解
    tuple必须加上逗号
    stressapptest工具
    Linux Centos7设置UTF-8编码,防止中文乱码
    [python3.7]列表
    【转载】]基于RedHatEnterpriseLinux V7(RHEL7)下SPEC CPU 2006环境搭建以及测试流程 介绍、安装准备、安装、config文件以及运行脚本介绍
    Linux Test Project(一)
    SPECCPU2006 Spec2006 使用说明
    测试用例使用!!!!!!!!!!!!!
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4629936.html
Copyright © 2011-2022 走看看