AC代码
#include<stdio.h>
int num[100001],dp[100001],pre[100001];
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
dp[0]=num[0],pre[0]=0;
for(int i=1;i<n;i++)
{
int temp=dp[i-1]+num[i];
if(temp<=k){
dp[i]=temp;
pre[i]=pre[i-1];
}
else{
pre[i]=i;
dp[i]=num[i];
for(int j=pre[i-1];j<i;j++)
{
temp-=num[j];
if(temp==k)
{
dp[i]=temp;
pre[i]=j+1;break;
}
else if(temp<k)
{
dp[i]=temp+num[j];
pre[i]=j;break;
}
}
}
}
int min=1000000000;
for(int i=0;i<n;i++)
{
if(dp[i]<min&&dp[i]>=k)
{
min=dp[i];
}
}
for(int i=0;i<n;i++)
{
if(dp[i]==min)
{
printf("%d-%d\n",pre[i]+1,i+1);
}
}
return 0;
}