交大oj-1009-二哥炒股票 C++ 总结

二哥炒股票

这道题没有设置什么陷阱,题意清楚,不再赘述
直接上代码

#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;

struct Trade {
    int time;
    int stock;
    int mode;
    Trade(int time, int stock, int mode) :time(time), stock(stock), mode(mode) {};
};

struct StockPrice {
    int time;
    int price;
    StockPrice(int time, int price) :time(time), price(price) {};
};

vector<Trade> trade;
vector<StockPrice> price;
int tradeNum, priceNum;

int getPrice(int time)
{
    static int index = 0;
    for (; index < priceNum; index++) {
        if (price[index].time > time)
            break;
    }
    return price[index - 1].price;
}

int main()
{
    int i, t, a, d;
    cin >> tradeNum;
    for (i = 0; i < tradeNum; i++) {
        cin >> t >> a >> d;
        trade.push_back(Trade(t, a, d));
    }
    cin >> priceNum;
    for (i = 0; i < priceNum; i++) {
        cin >> t >> a;
        price.push_back(StockPrice(t, a));
    }
    //cin has ended
    double profit = 0;
    int trademoney;
    for (i = 0; i < tradeNum; i++) {
        trademoney = getPrice(trade[i].time) * trade[i].stock;
        if (trade[i].mode == 1) {   // buy
            profit -= (0.2 * trademoney > 5) ? (0.2 * trademoney) : 5;
            profit = profit - 0.1 * trade[i].stock - 1 - trademoney * 100;
        }
        else {  //sell
            profit -= (0.2 * trademoney > 5) ? (0.2 * trademoney) : 5;
            profit = profit - 0.1 * trade[i].stock - 1 + trademoney * 99.9;
        }
    }
    cout << fixed << setprecision(2) << profit << endl;

    return 0;
}

// 其实这道题还有非常容易的优化策略,遍历所有的交易记录,得到总交易额和总的交易股票数,加在一起再进行处理,可以减小操作量
// 这道题重要地方是数据的储存,使用struct再合适不过了

总结~

这道题重点是如何储存交易记录和股票价格变化记录,我最刚开始使用pair<int,int>,明显没有struct方便易用。
这个解法并不是很好,评测状态中有10ms以下的代码,猜想是遍历交易记录后再一起处理收益的问题,减少交易量。
不太想改了,但已经有了改进的思路,go on for next problem~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值