【1044】Shopping in Mars (25 分)

简介: 【1044】Shopping in Mars (25 分)【1044】Shopping in Mars (25 分)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std;  
//key:Sum[j]-Sum[i-1]==S
const int N=100010;
int sum[N];
int n,S,nearS=100000010;
//upper_bound函数返回在[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(){   
  scanf("%d%d",&n,&S); //元素个数,和值S
  sum[0]=0;  //初始化sum[0]=0
  for(int i=1;i<=n;i++){
    scanf("%d",&sum[i]);
    sum[i] += sum[i-1];  //求sum[i]
  }
  for(int i=1;i<=n;i++){ //枚举左端点
    int j=upper_bound(i,n+1,sum[i-1]+S); //求右端点
    if(sum[j-1]-sum[i-1] == S){  //查找成功(注意是j-1而不是j)
      nearS=S; //最接近S的值就是S
      break;
    }else if(j<=n && sum[j]-sum[i-1] <nearS){
      //存在大于S的解并小于nearS
      nearS=sum[j]-sum[i-1]; //更新当前nearS
    }
  }
  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); //输出左断点和右端点(注意是j-1而不是j)
    }
  }
  system("pause"); 
    return 0;   
}
相关文章
|
7月前
|
移动开发 JavaScript 前端开发
Mr_HJ / form-generator项目文档学习与记录(续1)
Mr_HJ / form-generator项目文档学习与记录(续1)
44 2
|
7月前
|
JSON JavaScript 数据格式
Mr_HJ / form-generator项目文档学习与记录(续)
Mr_HJ / form-generator项目文档学习与记录(续)
38 0
|
7月前
|
JSON JavaScript 前端开发
Mr_HJ / form-generator项目文档学习与记录
Mr_HJ / form-generator项目文档学习与记录
90 0
|
7月前
|
移动开发 前端开发
Mr_HJ / form-generator项目文档学习与记录(续2)
Mr_HJ / form-generator项目文档学习与记录(续2)
30 0
|
7月前
|
Scala 容器
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
109 2
|
7月前
Google Earth Engine(GEE)——如何建立一个逐日的时序图表chart用map进行遍历
Google Earth Engine(GEE)——如何建立一个逐日的时序图表chart用map进行遍历
54 0
|
算法 C++
【PAT甲级 - C++题解】1044 Shopping in Mars
【PAT甲级 - C++题解】1044 Shopping in Mars
85 0
|
数据挖掘
白话Elasticsearch37-深入聚合数据分析之案例实战Date Histogram Aggregation:统计每月电视销量
白话Elasticsearch37-深入聚合数据分析之案例实战Date Histogram Aggregation:统计每月电视销量
97 0
LeetCode 1103. 分糖果 II Distribute Candies to People
LeetCode 1103. 分糖果 II Distribute Candies to People
【CCCC】L3-003 社交集群 (30分),并查集模板,map排序
【CCCC】L3-003 社交集群 (30分),并查集模板,map排序
217 0