codeforces 867e 思维

本文介绍了一种使用优先队列实现的股票交易策略算法,通过记录每日买入价格并择机卖出,以达到最大化收益的目的。算法详细说明了如何利用优先队列进行买入与卖出操作,并附带AC代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Buy Low Sell High

题意:给出n天股票的价格,每天可以选择买入或者卖出一个股票,或者什么都不做,问最后一天的收益最多是多少(把所有股票卖掉)

思路:用优先队列将买入的股票存起来,每次取出最大值,若比当前的股票价钱低,则卖出,然后注意,无论当天是否卖出股票,都一定要买入,如果当天不能卖出股票,自然要买入,因为这个买入是不需要计算到支出里面去的,只有卖出的时候需要计算支出(即卖出价格与买入价格做差),当天卖出也要买入,原因是当天在整个n天是时间中并不一定是需要卖出的,这里买入类似于求最大流回流的作用

AC代码:

#include "iostream"
#include "iomanip"
#include "string.h"
#include "stack"
#include "queue"
#include "string"
#include "vector"
#include "set"
#include "map"
#include "algorithm"
#include "stdio.h"
#include "math.h"
#pragma comment(linker, "/STACK:102400000,102400000")
#define bug(x) cout<<x<<" "<<"UUUUU"<<endl;
#define mem(a,x) memset(a,x,sizeof(a))
#define step(x) fixed<< setprecision(x)<<
#define mp(x,y) make_pair(x,y)
#define pb(x) push_back(x)
#define ll long long
#define endl ("\n")
#define ft first
#define sd second
#define lrt (rt<<1)
#define rrt (rt<<1|1)
using namespace std;
const ll mod=1e9+7;
const ll INF = 1e18+1LL;
const int inf = 1e9+1e8;
const double PI=acos(-1.0);
const int N=3e5+100;

priority_queue<ll,vector<ll>,greater<ll> > Q;
ll n,x,ans;
int main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>n;
    for(int i=1; i<=n; ++i){
        cin>>x;
        ll now=inf;
        if(!Q.empty()) now=Q.top();
        if(x>now){
            ans+=x-now;
            Q.pop();
            Q.push(x);
        }
        Q.push(x);
    }
    cout<<ans<<endl;
    return 0;
}

 

转载于:https://www.cnblogs.com/max88888888/p/7668910.html

### Codeforces Div. 2 比赛介绍 Codeforces 是一个在线编程竞赛平台,其中Div. 2比赛面向的是那些评分低于2100分的参赛者[^1]。这类比赛旨在挑战并提升程序员解决问题的能力和技术水平。 ### 参与方式 为了参加Codeforces Div. 2的比赛,参与者首先需要注册账号,并确保个人评级满足参与条件。每次比赛前会有一个虚拟房间分配过程,在此期间选手可以选择加入特定的房间或接受随机安排。比赛通常持续两小时,其间可以尝试解决多个不同难度级别的算法问题。 ### 题目难度 Codeforces Div. 2 的题目按照难度分为几个等级,一般情况下: - **A类题**:相对容易入门级的问题,适合新手练习基础逻辑思维和编码技巧。 - **B类题**:稍微复杂一点的任务,可能涉及到更深入的数据结构应用或是简单的动态规划概念。 - **C/D类题**:这些属于中等到较难程度的问题,往往要求更高的抽象能力和创造性解法设计能力。 - **E/F及以上类别**:非常具有挑战性的高级别难题,不仅考验全面的知识体系掌握情况还涉及到了尖端的研究成果运用[^2]。 ```python # 示例代码用于展示如何连接到Codeforces API获取即将举行的赛事列表 import requests def get_upcoming_contests(): url = "https://codeforces.com/api/contest.list?gym=false" response = requests.get(url).json() upcoming_contests = [] for contest in response['result']: if 'DIV_2' in contest['name'].upper() and contest['phase'] == 'BEFORE': upcoming_contests.append(contest) return upcoming_contests ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值