(ファイルIO):入力:eat.in出力:eat.out
制限時間:1000msのスペースの制約:131072キロバイトの特定の制限
後藤ProblemSet
タイトル説明
クラスの後に子羊の後、牧草地に放牧する必要があります。今注目のデモ村の羊の検査であること村の羊は、指導者たちは、羊の牧草地の村を見てみたかったです。
村の羊牧場を連続羊を放牧の量を変化させた各牧場で配布されています。指導者たちは、いくつかの連続した牧草地を見たいと思ってますが、以上見たくありません
羊。村の指導者たちは、ほとんどが可能限り、いくつかの牧草地を訪問し、より多くのスタイルの村の羊を見てみたいです。
さて、あなたはどのようないくつかの牧草地、村のリーダーを訪問するとの要件を満たすために指導者と市長を支援することを決定しました。
入力
整数最初の行を
と
、多くの連続牧場羊の村の共有だけでなく、指導者たちは羊の最大数を確認する方法を示します。
二行目
二つの整数間の1つのスペースで区切られた整数は、i番目のi番目の牧草上に発現さaiを
羊の放牧。ナンバーから
へ
。
出力
出力ライン、2つの数の合計、数字はスペースで区切って、訪問数の開始と終了を示します。常に多数の小さな数から方向を取ります。加えて、同じ長さの可能性があれば、出力の小さな数は、回答のための出発点。データは、少なくとも、答えがあることを確認してください。
サンプル入力
。5〜10
。6 3 1 2 7
サンプル出力
24
データ範囲の制限
データの%、
。
データの%、
。
データの%、
。
ヒント
連続での合計よりも多くを満たしていないために
、あります
と
二つの可能性であり、優先出力
へ
のGe牧草地。
問題解決のためのアイデアは
、ほとんどの最適化と組み合わせる接頭辞、その後、暴力を行います。。
コード
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
long long n,t,a[100010],maxn,p,q,i;
int main(){
freopen("eat.in","r",stdin);
freopen("eat.out","w",stdout);
scanf("%d%lld",&n,&t);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
a[i]+=a[i-1];
}
i=0,maxn=0;
while(i<n-maxn)
{
i++;
for(int j=i+maxn;j<=n;j++)
{
if(a[j]-a[i-1]<=t)
{
maxn=max(maxn,j-i+1);
p=i;
q=j;
}
else
break;
}
}
printf("%d %d",p,q);
}