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

二哥炒股票

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

#include 
#include 
#include 
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;
vector 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,明显没有struct方便易用。
这个解法并不是很好,评测状态中有10ms以下的代码,猜想是遍历交易记录后再一起处理收益的问题,减少交易量。
不太想改了,但已经有了改进的思路,go on for next problem~

你可能感兴趣的:(交大oj)