1044. Shopping in Mars (25)

来源:互联网 发布:郑州八度网络怎么样 编辑:程序博客网 时间:2024/05/29 16:47

题目: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;}


0 0
原创粉丝点击