PAT 甲级 1044 Shopping in Mars
https://pintia.cn/problem-sets/994805342720868352/problems/994805439202443264
Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diamond has a value (in Mars dollars M$). When making the payment, the chain can be cut at any position for only once and some of the diamonds are taken off the chain one by one. Once a diamond is off the chain, it cannot be taken back. For example, if we have a chain of 8 diamonds with values M$3, 2, 1, 5, 4, 6, 8, 7, and we must pay M$15. We may have 3 options:
- Cut the chain between 4 and 6, and take off the diamonds from the position 1 to 5 (with values 3+2+1+5+4=15).
- Cut before 5 or after 6, and take off the diamonds from the position 4 to 6 (with values 5+4+6=15).
- Cut before 8, and take off the diamonds from the position 7 to 8 (with values 8+7=15).
Now given the chain of diamond values and the amount that a customer has to pay, you are supposed to list all the paying options for the customer.
If it is impossible to pay the exact amount, you must suggest solutions with minimum lost.
Input Specification:
Each input file contains one test case. For each case, the first line contains 2 numbers: N (≤), the total number of diamonds on the chain, and M (≤), the amount that the customer has to pay. Then the next line contains N positive numbers D1⋯DN (Di≤103 for all ,) which are the values of the diamonds. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print i-j in a line for each pair of i ≤ j such that Di + ... + Dj = M. Note that if there are more than one solution, all the solutions must be printed in increasing order of i.
If there is no solution, output i-j for pairs of i ≤ j such that Di + ... + Dj > with (Di + ... + Dj −) minimized. Again all the solutions must be printed in increasing order of i.
It is guaranteed that the total value of diamonds is sufficient to pay the given amount.
Sample Input 1:
16 15
3 2 1 5 4 6 8 7 16 10 15 11 9 12 14 13
Sample Output 1:
1-5
4-6
7-8
11-11
Sample Input 2:
5 13
2 4 5 7 9
Sample Output 2:
2-4
4-5
代码:
#include <bits/stdc++.h>
using namespace std; const int maxn = 1e5 + 10;
int N, M, K;
int minn = 99999;
int num[maxn], sum[maxn]; vector<int> BinarySearch(int key) {
vector<int> rec;
for(int i = 1; i <= N; i ++) {
int L = i, R = N, mid;
while(L <= R) {
mid = (L + R) / 2;
if(sum[mid] - sum[i - 1] == key) {
rec.push_back(i);
rec.push_back(mid);
break;
}
else if(sum[mid] - sum[i - 1] > key)
R = mid - 1;
else L = mid + 1;
}
}
return rec;
} int main() {
memset(sum, 0, sizeof(sum));
scanf("%d%d", &N, &M);
for(int i = 1; i <= N; i ++) {
scanf("%d", &num[i]);
sum[i] = sum[i - 1] + num[i];
} vector<int> ans = BinarySearch(M);
if(ans.size()) {
for(int i = 0; i < ans.size(); i ++) {
if(i % 2 == 0) printf("%d-", ans[i]);
else printf("%d\n", ans[i]);
}
} else {
for(int i = 1; i <= N; i ++) {
int l = i, r = N, midd;
while(l <= r) {
midd = (l + r) / 2;
int temp = sum[midd] - sum[i - 1];
if(temp - M < 0) l = midd + 1;
else if(temp - M > 0)
r = midd - 1; if(temp > M) minn = min(minn, temp);
}
} vector<int> res = BinarySearch(minn);
for(int i = 0; i < res.size(); i ++) {
if(i % 2 == 0) printf("%d-", res[i]);
else printf("%d\n", res[i]);
}
}
return 0;
}
求前缀和 然后二分
PAT 甲级 1044 Shopping in Mars的更多相关文章
- PAT 甲级 1044 Shopping in Mars (25 分)(滑动窗口,尺取法,也可二分)
1044 Shopping in Mars (25 分) Shopping in Mars is quite a different experience. The Mars people pay ...
- PAT甲级——A1044 Shopping in Mars
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 ...
- PAT 1044 Shopping in Mars[二分][难]
1044 Shopping in Mars(25 分) Shopping in Mars is quite a different experience. The Mars people pay by ...
- 1044 Shopping in Mars (25 分)
1044 Shopping in Mars (25 分) Shopping in Mars is quite a different experience. The Mars people pay b ...
- pat甲级1044二分查找
1044 Shopping in Mars(25 分) Shopping in Mars is quite a different experience. The Mars people pay by ...
- 1044 Shopping in Mars
Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diam ...
- PTA(Advanced Level)1044.Shopping in Mars
Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diam ...
- 1044 Shopping in Mars (25 分)
Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diam ...
随机推荐
- Android开发学习笔记(二)——编译和运行原理(1)
http://www.cnblogs.com/Pickuper/archive/2011/06/14/2078969.html 接着上一篇的内容,继续从全局了解Android.在清楚了Android的 ...
- luogu P3809 【模板】后缀排序
嘟嘟嘟 今天学了一个后缀数组,还是挺好理解的. 因为我不会基数排序,所以只会\(O(n \log ^ 2 n)\)的sort版. 首先,后缀数组就是把该字符串的所有后缀按字典序排序得到的一个数组.注意 ...
- 【转】BASE64编码简介
BASE64是一种编码方式,通常用于把二进制数据编码为可写的字符形式的数据. 这是一种可逆的编码方式. 编码后的数据是一个字符串,其中包含的字符为:A-Z.a-z.0-9.+./ 共64个字符:26 ...
- Qt 编程指南 4 按钮2 打开网页和文件夹
功能: 按键打开文件夹和网页 效果: 教程 1 添加两个链接按钮 分别命名 commandLinkButtonFolder 和 commandLinkButtonWeb 2 创建项目 改变调试 ...
- solidity学习-cryptoPunks为实例
在这里使用cryptoPunks为实例来进行solidity的介绍,一般这些内容理解了就能够进行相对简单的智能合约的编写了,同时会添加一些我认为也十分重要的内容学习文档为http://solidity ...
- 图、dfs、bfs
graphdfsbfs 1.clone graph2.copy list with random pointer3.topological sorting4.permutations5.subsets ...
- HTML 浏览器抓包
1.浏览器 2.抓包 3.查看get/post/cookie 一 谷歌浏览器 二 抓包查看get/post数据.cookie 截图:
- Android多线程—HandlerThread解析
一.HandlerThread作用 1.实现多线程:在工作线程之后执行任务(比如一些耗时任务) 2.异步通信.消息传递:实现工作线程与主线程(UI线程)之间的通信,即将工作线程的执行结果传递给主线程, ...
- lesson 4:凯撒密码问题
一·问题描述 二·解决过程 1.设计思路 ①人机交互界面 ②加密函数(将字符串的每一个字符提取出来,通过对字符的阿斯克码值进行运算操作实现加密过程,特殊的特殊对待) ③解密函数(与加密函数算法类似) ...
- docker[caffe&&pycaffe]
0 引言 今天花了一天,完成了整个caffe的dockerfile编写,其支持python3.6.6,这里主要的注意点是protobuf的版本(在3.6.0之后,只支持c11),还有在制作镜像的时候注 ...