分析:

  考察二分,简单模拟会超时,优化后时间正好,但二分速度快些,注意以下几点:

    (1):如果一个序列D1 ... Dn,如果我们计算Di到Dj的和, 那么我们可以计算D1到Dj的和sum1,D1到Di的和sum2, 然后结果就是sum1 - sum2;

    (2): 那么我们二分则要搜索的就是m + sum[i]的值。

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>
#include <cctype>
#include <iomanip>
#include <cmath>
#include <map> using namespace std; const int Max_Int = 0x7fffffff;
const int Max_required = ; int sum[Max_required];
int value[Max_required]; struct Node
{
int start;
int end;
};
vector<Node> V_node; int binary_find(int target, int n)
{
int low = , high = n; while (low <= high)
{
int mid = (low + high) >> ;
if (sum[mid] == target)
return mid;
else if (sum[mid] < target)
low = mid + ;
else high = mid - ;
}
return low;
} int main()
{
int n, m;
while (scanf("%d%d", &n, &m) != EOF)
{
for (int i = ; i <= n; i++)
{
scanf("%d", &value[i]);
sum[i] = sum[i - ] + value[i];
} int Min = Max_Int;
for (int i = ; i <= n; i++)
{
int target = m + sum[i];
int res = binary_find(target, n);
//printf("res = %d\n", res);
if (sum[res] - sum[i] - m >= && sum[res] - sum[i] - m <= Min)
{
if (sum[res] - sum[i] - m < Min)
{
V_node.clear();
Min = sum[res] - sum[i] - m;
Node node;
node.start = i + ;
node.end = res;
V_node.push_back(node);
}
else if (sum[res] - sum[i] - m == Min)
{
Node node;
node.start = i + ;
node.end = res;
V_node.push_back(node);
} }
} for (int i = ; i < V_node.size(); i++)
printf("%d-%d\n", V_node[i].start, V_node[i].end);
}
return ;
}

  

1044. Shopping in Mars (25)的更多相关文章

  1. PAT 甲级 1044 Shopping in Mars (25 分)(滑动窗口,尺取法,也可二分)

    1044 Shopping in Mars (25 分)   Shopping in Mars is quite a different experience. The Mars people pay ...

  2. 1044 Shopping in Mars (25 分)

    Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diam ...

  3. PAT Advanced 1044 Shopping in Mars (25) [⼆分查找]

    题目 Shopping in Mars is quite a diferent experience. The Mars people pay by chained diamonds. Each di ...

  4. 1044 Shopping in Mars (25分)(二分查找)

    Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diam ...

  5. PAT (Advanced Level) 1044. Shopping in Mars (25)

    双指针. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...

  6. PAT甲题题解-1044. Shopping in Mars (25)-水题

    n,m然后给出n个数让你求所有存在的区间[l,r],使得a[l]~a[r]的和为m并且按l的大小顺序输出对应区间.如果不存在和为m的区间段,则输出a[l]~a[r]-m最小的区间段方案. 如果两层fo ...

  7. 【PAT甲级】1044 Shopping in Mars (25 分)(前缀和,双指针)

    题意: 输入一个正整数N和M(N<=1e5,M<=1e8),接下来输入N个正整数(<=1e3),按照升序输出"i-j",i~j的和等于M或者是最小的大于M的数段. ...

  8. pat1044. Shopping in Mars (25)

    1044. Shopping in Mars (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Shop ...

  9. 1044 Shopping in Mars (25 分)

    1044 Shopping in Mars (25 分) Shopping in Mars is quite a different experience. The Mars people pay b ...

随机推荐

  1. c语言实现二维数组排序,一个4*5的数组,要求每行都进行升序排列,并求出每行的平均值。

    #include<stdio.h>#define N 5#define M 4void main(){ int x,i,j,k,t,a[M][N]; float sum=0.0; floa ...

  2. C预处理和C库

    #include <stdio.h> #define MAN(x) "n"##x int main(void) { printf("%s",MAN( ...

  3. delphi控件属性和事件

    常用[属性]  Action:该属性是与组件关联的行为,允许应用程序集中响应用户命令  Anchors:与组件连接的窗体的位置点  Align:确定组件的对齐方式  AutoSize:确定组件是否自动 ...

  4. tinyxml学习一

    在TinyXML中,根据XML的各种元素来定义了一些类:         TiXmlBase:整个TinyXML模型的基类.         TiXmlAttribute:对应于XML中的元素的属性. ...

  5. 树莓派_360wifi2_佳能MP236打印机

    入手树莓派后一直没时间弄,设想用360wifi做无线网卡,也一直不得解,今天成功写下经验 本人刷的是官方系统,版本为3.12.28,首先更新系统内核,参考以下网址: http://groenholdt ...

  6. tomacat启动慢

    tomcat目录下有多个工程,tomcat每次启动的时候都会去加载,删除不需要的工程,

  7. 2,SFDC 管理员篇 - 组织架构

    1,组织架构 Setup | Administrator | Manage User| Role 组织层级有三种模式,基于区域划分,基于产品划分,基于公司规模划分层级(目标客户群体划分层级或渠道划分) ...

  8. JS转义 escape()、encodeURI()、encodeURIComponent()区别详解

    JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod ...

  9. Android开发--环境的配置

    一 Android开发环境:JDK.eclipse ADT.海马模拟器或者夜神模拟器.配置之前先保证运行内存足够大,不然会导致运行卡. 二 JDK(不用安装) 1.jdk官方下载地址:http://w ...

  10. 解决阿里云数据库RDS报错The table '/home/mysql/data3015/tmp/#sql_13975_23' is full

    查询任何一条语句都显示 The table '/home/mysql/data3015/tmp/#sql_13975_23' is full 查看了下数据库利用磁盘空间没有满, 阿里云的处理方式: 1 ...