PAT1044 Shopping in Mars

个人学习记录,代码难免不尽人意。
做了这么多题难得本题不看答案一遍过,很是激动。

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.
在这里插入图片描述
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<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<map>
#include<cmath>
using namespace std;
int num[100010];
int main(){int n,m;scanf("%d%d",&n,&m);for(int i=0;i<n;i++){scanf("%d",&num[i]);}int i=0,j=0;int temp=0;bool flag=false;int cost=1000000000;vector<pair<int,int> > v;int count=0;while(i<n||j<n){
//   	cout << i << " " <<j << endl;if(temp<m){if(j==n) break;temp+=num[j];j=min(n,j+1);}else if(temp==m){flag=true;printf("%d-%d\n",i+1,j);if(j+1<n){temp=temp-num[i]+num[j];j++;}else{j=min(n,j+1);temp=temp-num[i];} i=min(n,i+1);}else{if(temp<cost){cost=temp;v.clear();v.push_back(make_pair(i+1,j));}else if(temp==cost){v.push_back(make_pair(i+1,j));}temp-=num[i];i=min(n,i+1);}}if(!flag&&!v.empty()){for(int k=0;k<v.size();k++){printf("%d-%d\n",v[k].first,v[k].second);}}return 0;
}

利用了《算法笔记》中讲述的“two points”思想,设置了i,j两个下标来从左到右遍历数组,其中记录num[i]到num[j]的和temp,判断temp和m的关系,分为三种情况:①如果temp小于m,则让j++,如果j已经等于边界n,则说明不可能再得到新结果了,直接break。②如果temp等于m,则此时i和j就是我们想要输出的结果,直接输出,然后让i和j都加一,相应的temp减去num[i]加上num[j]的值。③如果temp大于m,则让i++,相应的减去temp对应的值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1380476.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】反转链表、链表的中间节点、链表的回文结构(单链表OJ题)

正如标题所说&#xff0c;本文会图文详细解析三道单链表OJ题&#xff0c;分别为&#xff1a; 反转链表 &#xff08;简单&#xff09; 链表的中间节点 &#xff08;简单&#xff09; 链表的回文结构 &#xff08;较难&#xff09; 把他们放在一起讲的原因是&#xff1a; 反转链…

QGIS二次开发六:VS不借助QT插件创建UI界面

上一篇博客我们说了在VS中如何使用QT插件来创建UI界面&#xff0c;但是我们二次开发QGIS的第一篇博客就说了&#xff0c;最好使用OSGeo4W中自动下载的QT进行QGIS二次开发&#xff0c;这样兼容性是最好的&#xff0c;那么该如何在VS中不使用外部安装的QT以及QT的VS插件情况下进行…

提取有像素的掩码和原图

有些数据集给的掩码是全黑图片&#xff0c;需要将全黑的掩码剔除&#xff0c;保留有标签的掩码。 DDR-dataset 眼底图像处理 from PIL import Image import cv2 import osdef extract_mask_and_original(mask_path, original_path, output_folder):# 读取黑白掩码图片和同名原…

【Java】智慧工地云平台源码-支持私有化部署+硬件设备

智慧工地硬件设备包括&#xff1a;AI识别一体机、智能广播音响、标养箱、塔机黑匣子、升降机黑匣子、吊钩追踪控制设备、扬尘监测设备、喷淋设备。 1.什么是AI危险源识别 AI危险源识别是指基于智能视频分析技术&#xff0c;对视频图像信息进行自动分析识别&#xff0c;以实时监…

photoshop指定打开psd文件方式

1、打开考生文件夹下的psd文件 2、右击这个psd——打开——或打开方式&#xff08;选其他默认程序&#xff09; 3、路径一般在 C:\Program Files\Adobe 或者是C:\Program Files&#xff08;x86&#xff09;\Adobe 下&#xff0c;打开后找到Photoshop.exe后——打开 4、点击勾选…

C++文件类(整理自C语言中文网-全)

C文件类&#xff08;文件流类&#xff09;及用法详解 《C输入输出流》一章中讲过&#xff0c;重定向后的 cin 和 cout 可分别用于读取文件中的数据和向文件中写入数据。除此之外&#xff0c;C 标准库中还专门提供了 3 个类用于实现文件操作&#xff0c;它们统称为文件流类&…

C语言案例 分数列求和-11

题目&#xff1a;有一分数列&#xff1a;2 / 1,3 / 2,5 / 3,8 / 5,13 / 8,21 / 13 …求出这个数列的前20项之和。 程序分析 这是一个典型的分数列数学逻辑题&#xff0c;考究这类题目是需要从已知的条件中找到它们的分布规律 我们把前6荐的分子与分母分别排列出来&#xff0c;…

快速使用公网远程访问内网群晖NAS 7.X版 【内网穿透】

公网远程访问内网群晖NAS 7.X版 【内网穿透】 文章目录 公网远程访问内网群晖NAS 7.X版 【内网穿透】前言1. 在群晖控制面板找到“终端机和SNMP”2. 建立一条连接公网数据隧道3. 获取公网访问内网群晖NAS的数据隧道入口 前言 群晖NAS作为应用较为广泛的小型数据存储中心&#…

ⅰsee是什么意思_see是什么意思

展开全部 v. 看见&#xff0c;明白&#xff0c;e68a84e8a2ad3231313335323631343130323136353331333433626539了解&#xff0c;经历&#xff0c;设想 n. 主教教区&#xff0c;主角权限 用法&#xff1b; 1.see的基本意思是指一般视觉意义上的“看见”,也可指有意识地“观察”,引…

DBeaver下载地址

数据库IDE工具DBeaver&#xff0c;开源&#xff0c;免费&#xff0c;好用。 DBeaver Community Free Universal Database Tool 所有版本都有&#xff1a; Archive Files | DBeaver Community 如果想下载32位&#xff0c;最后一个版本是6.0.0

dbeaver 下载

1.下载安装 在官网&#xff08;dbeaver&#xff09;进行下载。 2.快捷键 1.ctrlenter 执行sql 2.ctrl\ 执行sql,保留之前窗口结果 3.ctrlshift↑ 向上复制一行 4.ctrlshift↓ 向下复制一行 5.ctrlaltF 对sql语句进行格式化&#xff0c;对于很长的sql语句很有用 6.ctrld 删…

大都会人寿线下培训第三天回顾

今天是大都会人寿培训的第三天&#xff0c;早上每个人都发表了自己写的爱的书信&#xff0c;由于我是个理性的人&#xff0c;一直自以为没多少感性的细胞&#xff0c;但是轮到我发言时&#xff0c;我却有想哭的感觉&#xff0c;可能是自女儿出生8年来自己时常不在她身边而感觉的…

中国人寿保险研发中心2021校招开始啦!

感兴趣的同学可以把简历发送至邮箱 chenhongyune-chinalife.com 往期推荐 Java 15 转正了&#xff0c;国内几大互联网公司均有贡献&#xff0c;其中腾讯最为突出&#xff01; Spring Boot 缓存应用实践 赠书&#xff1a;一本书带你吃透Nginx应用与运维 超全的 Linux Shell 文本…

大都会人寿线下培训第五天回顾

参加培训后&#xff0c;突然生活变得超级充实&#xff0c;每天培训&#xff0c;回来写作业&#xff0c;然后一周就过去了… 今天考试&#xff0c;昨晚突击了一遍&#xff0c;实在太困&#xff0c;想着今早考试前再看一遍得了&#xff0c;结果早上去晚了&#xff0c;没时间复习…

健康人寿保险服务平台

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;

中国平安真牛,把中国人寿给替了!!!!

刚才在Google搜中国人寿&#xff0c;看见中国人寿就点了&#xff0c;靠&#xff0c;进入中国平安了。 没想到&#xff0c;Google也能被收买&#xff01;

01- 机器学习经典流程 (中国人寿保费项目) (项目一)

删除特征: data data.drop([region, sex], axis1)特征数据调整: data.apply( ) # 体重指数&#xff0c;离散化转换&#xff0c;体重两种情况&#xff1a;标准、肥胖 def convert(df,bmi):df[bmi] fat if df[bmi] > bmi else standardreturn df data data.apply(convert,…

中国人寿旗下多地国寿金融中心吸引新机构入驻

写字楼市场需求与经济增长高度相关&#xff0c;当经济活动日益恢复&#xff0c;写字楼市场逐步迎来复苏。戴德梁行的《2020中国商业地产投资意向调查报告》显示&#xff0c;大多数投资人十分看好中国商业地产市场的长期发展&#xff0c;有82%的受访者表示计划投资写字楼和/或商…

Java集合知识回顾:从分类到工具类,掌握精髓

文章目录 1. 集合的分类2. Collection 接口3. Map 接口4. 泛型5. Collections 工具类总结 在Java编程世界中&#xff0c;集合是一项极为重要的知识&#xff0c;为我们的程序设计提供了强大的数据结构和处理手段。在本篇文章中&#xff0c;我们将回顾集合的分类以及相关的重要概…

04_Hudi 集成 Spark、保存数据至Hudi、集成Hive查询、MergeInto 语句

本文来自"黑马程序员"hudi课程 4.第四章 Hudi 集成 Spark 4.1 环境准备 4.1.1 安装MySQL 5.7.31 4.1.2 安装Hive 2.1 4.1.3 安装Zookeeper 3.4.6 4.1.4 安装Kafka 2.4.1 4.2 滴滴运营分析 4.2.1 需求说明 4.2.2 环境准备 4.2.2.1 工具类SparkUtils 4.2.2.2 日期转换…