• poj 3061 尺取法或二分


    经典尺取法,复杂度O(n)。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 using namespace std;
     5 
     6 const int INF = 999999;
     7 const int N = 100000;
     8 int a[N];
     9 
    10 int main ()
    11 {
    12     int t;
    13     scanf("%d", &t);
    14     while ( t-- )
    15     {
    16         int n, s;
    17         scanf("%d%d", &n, &s);
    18         for ( int i = 0; i < n; i++ ) scanf("%d", a + i);
    19         int p = 0, q = 0, sum = 0, len = INF;
    20         while ( 1 )
    21         {
    22             while ( q < n && sum < s )
    23             {
    24                 sum += a[q++];
    25             }
    26             if ( sum < s ) break;
    27             len = min( len, q - p );
    28             sum -= a[p++];
    29         }
    30         if ( len == INF ) len = 0;
    31         printf("%d
    ", len);
    32     }
    33     return 0;
    34 }

    二分也可以做,复杂度多了个log。

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <cstdio>
     5 using namespace std;
     6 
     7 typedef long long ll;
     8 const int INF = 999999;
     9 const int N = 100001;
    10 ll sum[N];
    11 
    12 int main ()
    13 {
    14     int t;
    15     scanf("%d", &t);
    16     while ( t-- )
    17     {
    18         int n, s;
    19         scanf("%d%d", &n, &s);
    20         sum[0] = 0;
    21         for ( int i = 1; i <= n; i++ )
    22         {
    23             scanf("%lld", sum + i);
    24             sum[i] += sum[i - 1];
    25         }
    26         int len = INF;
    27         for ( int i = n; i > 0; i-- )
    28         {
    29             if ( sum[i] < s ) break;
    30             int pos = upper_bound( sum, sum + i, sum[i] - s ) - sum;
    31             if ( pos != i )
    32             {
    33                 len = min( len, i - pos + 1 );
    34             }
    35         }
    36         if ( len == INF ) len = 0;
    37         printf("%d
    ", len);
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    使用Python验证常见的50个正则表达式
    空气开关为何叫空气开关?它跟空气有何关系?
    YOLO 算法最全综述:从 YOLOv1 到 YOLOv5
    深入理解部分 SQL 语句执行慢的原因
    KNN(k-nearest-neighbor)算法
    聚类分析方法
    SQL Database学习笔记
    statistic学习笔记
    MapReduce中的排序
    weka打开提示内存不足的解决方法
  • 原文地址:https://www.cnblogs.com/huoxiayu/p/4679935.html
Copyright © 2020-2023  润新知