链接:https://ac.nowcoder.com/acm/contest/295/B

题目描述

White Cloud has built n stores numbered from 1 to n.
White Rabbit wants to visit these stores in the order from 1 to n.
The store numbered i has a price a[i] representing that White Rabbit can spend a[i] dollars to buy a product or sell a product to get a[i] dollars when it is in the i-th store.
The product is too heavy so that White Rabbit can only take one product at the same time.
White Rabbit wants to know the maximum profit after visiting all stores.
Also, White Rabbit wants to know the minimum number of transactions while geting the maximum profit.
Notice that White Rabbit has infinite money initially.

输入描述:

The first line contains an integer T(0<T<=5), denoting the number of test cases.
In each test case, there is one integer n(0<n<=100000) in the first line,denoting the number of stores.
For the next line, There are n integers in range [0,2147483648), denoting a[1..n].

输出描述:

For each test case, print a single line containing 2 integers, denoting the maximum profit and the minimum number of transactions.

输入

1
5
9 10 7 6 8

输出

3 4

题目大意:

有n个商店,编号从1到n。编号为 i 的商店有一个价格 a[ i ]。

小白兔想按从1到n的顺序参观这些商店。

每到一个商店,小白兔可以在这里花费a[ i ]美元购买一种产品,或者出售一种产品以获得a[i]美元。

白兔身上只能携带一种产品。

要求的是白兔参观完所有商店后的最大利润是多少。并且希望在获取最大利润的同时,交易的数量是最少的。

ps:白兔一开始有无限的钱。

解题思路:

我们的思路 就是

当我们手里没商品的时候  我们需要选择一个买入商品的地方 如何选呢?

先买下第一个商品 花费记为o  紧接着的第二个商品 如果说价格低于o  那么其实我们不应该买第一个的  应该从第二个开始买

所以这个时候我们做更新操作  o的值更新为第二个 以此类推 如果接下来的还比o小 我们继续更新(此操作是在纠正买东西的位置)

当我们手里有商品的时候  我们需要选择一个卖出商品的地方 如何选呢?

当我们第一次遇到大于o的值的时候  我们就卖掉商品 那么获利就是a[ i ] - o   交易次数累加2  然后我们把o更新为a[ i ]

接着走如果遇到的还大于o  那么说明我们刚才卖的早了  应该在这里卖  所以我们将获利 再累加上a[ i ] - o 但是不改变交易次数(这个操作是在纠正卖商品的地点    如何控制什么时候改变交易次数呢   就是看手中有商品没  手中有的时候  卖掉时 交易次数+2  然后就把flag置为0 代表手中没商品  接下来遇到a[ i ]再比o大 就只更新o 不改变次数 )

以上两种情况交替使用 遍历一遍就得到了最大利润 和 最小交易次数(什么叫交替使用?  身上没商品的时候  选择买商品的位置  选好了  就要选择卖商品的位置  卖完了 就要选择买商品的位置)

最后再注意一点  当a[ i ]==o的时候 我们不进行任何操作 跳过即可 因为不会获利(注意  也不要改变flag的状态)

代码

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+7;
ll a[maxn];
int T,n;
int main(){scanf("%d",&T);while(T--){scanf("%d",&n);//o代表当前手里买的商品的价格//cnt代表交易次数//flag为1代表当前手里买了商品 为0代表手里没商品ll o,cnt=0,sum=0,flag=1;for(int i=1;i<=n;i++){scanf("%lld",&a[i]);if(i==1){o=a[1];flag=1;}else{if(a[i]<o){o=a[i];flag=1;}else if(a[i]>o){if(flag==1){sum+=a[i]-o;o=a[i];cnt+=2;flag=0;}else{sum+=a[i]-o;o=a[i];}}}}printf("%lld %lld\n",sum,cnt);}return 0;
}

Money----思维+模拟相关推荐

  1. CF--思维练习--CodeForces - 216C - Hiring Staff (思维+模拟)

    ACM思维题训练集合 A new Berland businessman Vitaly is going to open a household appliances' store. All he's ...

  2. CodeForces - 820D Mister B and PR Shifts(思维+模拟)

    题目链接:点击查看 题目大意:给出一个长度为 n 的排列 p,可以执行数次循环右移的操作,问的最小值是多少 题目分析:暴力的话用 n * n 很容易实现 ,但数据是 1e6 的,显然又不能用暴力去写, ...

  3. Gym - 101972H Beautiful Substrings(思维+模拟)

    题目链接:点击查看 题目大意:题目的意思挺难理解的..尤其是对我这种英语渣来说,简单说一下,就是先给出三个数字n,m,k,然后再给出两个字符串a和b,n和m代表的是字符串a和b的长度,然后描述题意: ...

  4. 2020 ICPC亚洲区域赛(沈阳)F-Kobolds and Catacombs(思维+模拟)

    F-Kobolds and Catacombs 考虑每一段,先找到最小的,然后把编号小于它的都化为一组,此时有一个最大值需要把小于最大值的在划分进来,然后又有编号小于它的,于是再把编号小于它的划分为一 ...

  5. 1001. Poker (思维 / 模拟)(2020年百度之星*程序设计大赛-初赛二)

    传送门 思路: 嗐,又是这种模拟题,每次都不长记性看数据范围,非得傻傻的去循环模拟T一次才知道思考.呜呜呜太菜了. 既然每次至少拿出m,且求的是最多次数,那我们每次就拿m出来. 先将m * p%上取整 ...

  6. 2020寒假训练第一周 思维+模拟

    这周相对来说比较简单都是基础题 同样 枯木逢春不在茂 年少且惜镜边人 直接看题吧!!!!奥利干! 1. 对于给定的一个字符串,统计其中数字字符出现的次数. Input输入数据有多行,第一行是一个整数n ...

  7. B. Most socially-distanced subsequence(思维+模拟)

    B. Most socially-distanced subsequence 题意: 给出一个数组 a a a,找到数组中的一个子序列 s s s(长为 x x x),满足" ∑ i = 1 ...

  8. 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)

    洛谷P1667 数列 题目描述 给定一个长度是n的数列A,我们称一个数列是完美的,当且仅当对于其任意连续子序列的和都是正的.现在你有一个操作可以改变数列,选择一个区间[X,Y]满足\(A_X +A_{ ...

  9. CodeForces - 1215C Swap Letters(暴力+思维+模拟)

    题目链接:点击查看 题目大意:给出两个只由字母a和字母b所组成的字符串,我们记为s和t,现在我们可以交换两个字符串任意位置的字母(只能在两个串之间交换,不能在自己串中交换),现在问能否通过一定次数的交 ...

  10. 小猫排队 (思维 模拟

    添加链接描述 #include <bits/stdc++.h> using namespace std; #define int long long const int N = 1e6 + ...

最新文章

  1. PHP中的json_encode和json_decode
  2. URLClassLoader的使用
  3. 奇妙的 CSS shapes(CSS图形)
  4. 逆向调试完成端口回包实践总结
  5. 使用 redmind 进行项目任务管理
  6. c++ string 字符_C/C++知识分享:C++标准库之 string 类型,各种运算全部掌握
  7. matlab 轴gui,MatlabüGUI学习笔记(4)——公共对象属性的轴,MatlabGUI,四,常用,之,Axes...
  8. 使用ZbarSDK实现扫描二维码以及条形码功能(iOS)
  9. Java关于继承中的内存分配
  10. oracle 进入empt,关于redhat6.2静默安装oracle11g出现的问题 大神救命
  11. Docker从理论到实践(一)------基础知识必备
  12. EXCEL等额本息还款计算器
  13. 演讲者模式投影到幕布也看到备注_PPT制作技巧:如何实现ppt放映不同界面(演讲者模式)?...
  14. 对音频压缩概念的一些误解--记一次与音视频压缩专家的对话
  15. Markdown文档编写规则:标题
  16. html 点击方块旋转,前端每日实战:86# 视频演示如何用纯 CSS 创作一个方块旋转动画...
  17. windows系统c++/VS2019编译gRPC
  18. 操作日志注解aspectj-autoproxy
  19. 用python制作weblogo/SeqLogo/序列保守性分析图
  20. Java开发中常见的危险信号

热门文章

  1. shell手册--笨鸟杰作
  2. 理解函数:对象(this,arguments),方法(apply(),call(),bind())。
  3. 开发问题小便签(1)
  4. HTML 学习笔记一
  5. 海南航空宁波到重庆的变态机票
  6. JavaScript获取网页中HTML元素的几种方法分析
  7. 关于ubuntu17.04之apt-get源失败 解决办法
  8. java.util.ConcurrentModificationException的解决办法
  9. 考前突击!等级考试高分攻略!(整理版)
  10. ubuntu mysql 5.7 出错_ubuntu mysql5.7 启动提示错误:/var/run/mysqld/mysqld.sock