1044. Shopping in Mars (25)
分析:
考察二分,简单模拟会超时,优化后时间正好,但二分速度快些,注意以下几点:
(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)的更多相关文章
- PAT 甲级 1044 Shopping in Mars (25 分)(滑动窗口,尺取法,也可二分)
1044 Shopping in Mars (25 分) Shopping in Mars is quite a different experience. The Mars people pay ...
- 1044 Shopping in Mars (25 分)
Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diam ...
- PAT Advanced 1044 Shopping in Mars (25) [⼆分查找]
题目 Shopping in Mars is quite a diferent experience. The Mars people pay by chained diamonds. Each di ...
- 1044 Shopping in Mars (25分)(二分查找)
Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diam ...
- PAT (Advanced Level) 1044. Shopping in Mars (25)
双指针. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...
- PAT甲题题解-1044. Shopping in Mars (25)-水题
n,m然后给出n个数让你求所有存在的区间[l,r],使得a[l]~a[r]的和为m并且按l的大小顺序输出对应区间.如果不存在和为m的区间段,则输出a[l]~a[r]-m最小的区间段方案. 如果两层fo ...
- 【PAT甲级】1044 Shopping in Mars (25 分)(前缀和,双指针)
题意: 输入一个正整数N和M(N<=1e5,M<=1e8),接下来输入N个正整数(<=1e3),按照升序输出"i-j",i~j的和等于M或者是最小的大于M的数段. ...
- pat1044. Shopping in Mars (25)
1044. Shopping in Mars (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Shop ...
- 1044 Shopping in Mars (25 分)
1044 Shopping in Mars (25 分) Shopping in Mars is quite a different experience. The Mars people pay b ...
随机推荐
- IOS开发中的几种设计模式介绍
ios开发学习中,经常弄不清楚ios的开发模式,今天我们就来进行简单的总结和探讨~ (一)代理模式 应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现. 优势:解耦合 敏捷 ...
- 少见的sql
1,values 的新用法,出现自2008 SELECT * FROM table AS a ,,,'qq3')) tem(id,name) ON a.id=tem.id insert into xx ...
- [HTML] CSS 渐变
CSS3 渐变 CSS3 渐变(gradients)可以让你在两个或多个指定的颜色之间显示平稳的过渡. 以前,你必须使用图像来实现这些效果.但是,通过使用 CSS3 渐变(gradients),你可以 ...
- C#_GDI+详细教程(图形图像编程基础)
第7章 C#图形图像编程基础 本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础.C#图像处理基础以及简单的图像处理技术. 7.1 GDI+绘图基础 编写图形程序时需要使用GDI( ...
- 利用反射及JDBC元数据编写通用查询方法
元数据:描述数据的数据,ResultSetMetaData是描述ResultSet的元数据对象,从它可以得到数据集有多少了,每一列的列名... ResultSetMetaData可以通过ResultS ...
- mac配置vim-go
基本的设置信息(参考网址:http://hessian.cn/p/1026.html): "还是配置/.vimrc文件. syn on "语法支持 set laststatus=2 ...
- OAuth2集成
目前很多开放平台如新浪微博开放平台都在使用提供开放API接口供开发者使用,随之带来了第三方应用要到开放平台进行授权的问题,OAuth就是干这个的,OAuth2是OAuth协议的下一个版本,相比OAut ...
- Setup Apache + PHP + MySql on Windows 10
The below steps recorded my experiences to setup the Apache + PHP + MySql on my Windows 10. 1. Downl ...
- Gradient Boosting Decision Tree学习
Gradient Boosting Decision Tree,即梯度提升树,简称GBDT,也叫GBRT(Gradient Boosting Regression Tree),也称为Multiple ...
- Linux_03------Linux的基本命令
/** * 基本命令格式 * 命令 [选项] [参数] */ /** * 目录处理命令 * mkdir dirname 创建目录 * mkdir -p dir1/dir 递归创建目录 * cd dir ...