poj-3061

来源:互联网 发布:自贡网络电视台 编辑:程序博客网 时间:2024/06/06 03:14

首先计算出在前 i 项的和 然后快速枚举 计算最小值 :


#include <stdio.h>#include <math.h>#include <stdlib.h>#include <algorithm>#include <queue>#include <iostream>using namespace std;int a[100100];int sum[100100];int main (){   int t;   cin>>t;   while (t--)   {        int n,m;        cin>>n>>m;        for (int i=1;i<=n;i++)            cin>>a[i];        sum[0]= 0;        for (int i=1;i<=n;i++)            sum[i]=sum[i-1]+a[i];        int ans = n;        int ok =1 ,ko;        if ( sum[n] < m )            ok = 0;        int i = 1;        for (int j=1;j<=n;j++)        {            ko=0;            while (sum [j] - sum [i] >= m)            {                i++;                ko=1;            }            if (ko)            ans = min (ans , j - i + 1 );        }        if (ok)            printf("%d\n",ans);        else            printf ("0\n");   }   return 0;}


0 0
原创粉丝点击