您的位置:首页 > 运维架构

1044. Shopping in Mars (25)

2017-04-15 14:16 357 查看
题目:https://www.patest.cn/contests/pat-a-practise/1044

#include<cstdio>
#include<cstring>
using namespace std;

int sum[100010]={0},nearS=100010,N=0,M=0;
//在[L,R)寻找第一个比x大的元素
int upper_bound(int L, int R, int x)
{
int left = L, right = R,mid;
while(left<right)
{
mid = (left+right)/2;
if(sum[mid]>x)
right = mid;
else
left = mid + 1;
}
return left;
}
int main()
{
int i=0,j=0;

scanf("%d%d",&N,&M);
for(i=1; i<=N; i++)
{
scanf("%d",&sum[i]);
sum[i] = sum[i] + sum[i-1];
}
for(i=1; i<=N; i++)
{
int j = upper_bound(i, N+1, sum[i-1]+M);
if((sum[j-1]-sum[i-1]) == M) //j-1,是因为,如果和等于M,找到的j会比合适的大1!
{
nearS = M;
break;
}
else if((sum[j]-sum[i-1])<nearS && j<=N)
{
nearS = sum[j]-sum[i-1];
}
}
for(int i=1; i<=N; i++)
{
int j = upper_bound(i, N+1, sum[i-1]+nearS);
if(sum[j-1]-sum[i-1] == nearS)
printf("%d-%d\n",i,j-1);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: