Skip to content

1288: 压缩火车

题目

题目描述

本题中,你提交的代码将被作为名为"src.hpp"的头文件而被提交,评测主程序将会include该头文件并检验该头文件的正确性。

题目背景

源自出题者真实案例。(真写火车票的时候用不着学 ta !)

助教们在完成传说中的火车票的大作业时,为了存储火车指定天数内各个站点的购票数,遇到了 Memory Limit Exceed 的麻烦。再压缩一点空间就可以帮助他们 AC 了!快来帮帮他们!

文件结构

完成该任务,你会额外用到头文件train.h

train.h ,不可修改

```h

ifndef TRAIN_H

define TRAIN_H

struct Train { static constexpr int DAYMAX = 5; static constexpr int STATIONMAX = 10; int ticketNums[DAYMAX][STATIONMAX]; };

endif //TRAIN_H

```

src.hpp,可修改, 可提交

```h

ifndef SRC_HPP

define SRC_HPP

include

include

include "train.h"

using namespace std;

vector v;

endif //SRC_HPP

```

你可以任意修改 src.hpp 。提交时只需提交这个文件里的代码即可。

样例测试程序

第一个测试点的程序为:

```cpp

include "train.h"

include "src.hpp"

void ast(bool x) { if (!x) { cout << "wrong answer!" << endl; exit(0); } } int main(){ Train train; train.ticketNums[3][3] = 1000000; for (int i = 0; i < 10 ; ++i) v.push_back(train); Train testtrain = v[3]; ast(testtrain.ticketNums[3][3] == 1000000); ast(sizeof(v.front()) * v.size() <= 1600); cout << "all correct in test1!" << endl; } ```

如果你没改 src.hpp ,上述程序会检验到v的内存占用过大,输出 wrong answer! 。你需要修改使得上述程序输出 all correct in test1!

细节

你想修改程序,减少内存占用。

经市场调研,保证每辆车上的座位都 <=1000000 个。即保证对任意合法 i , j ,有0 <= ticketNums[i][j] <= 1000000

可惜在真正的工程里,主函数里面 v 和 train 的波及范围太大,不知道怎么改,

当然,在主函数里,也会对v调用各种其他的 vector 的成员函数。

针对和v相关的操作,保证只有v.push_back(), v.pop_back() , v.front() , v.back() , v.size() 和 v[i]

并且,保证不会使用引用,指针和迭代器。同时保证不会直接访问v中某元素的 ticketNums ,如 v[i].ticketNums[j][k]; 而是会把 v[i] 中的对象直接取出或赋值,然后再访问ticketNums ,如 Train train = v[i]; v.back() = train, cout << train.ticketNums[j][k];

目的

修改,完成并提交 src.hpp ,要求使得 v 所占的内存是程序未修改时的至多 80\% 。内存占用以 sizeof(v.front()) * v.size() 来计算。

请开始吧!

输入格式

输出格式

样例输入

样例输出

all correct in test1!

数据范围

Oops! 本题目还没有解答!

助教老师们编题的速度,已经超过了解题的速度!

OJ翻了一新,但本解答集还大多用的是2017-2019级,甚至更早的同学们贡献的答案。

如果你已经AC了,可以的话,请您参考添加页面,与大家一起分享你的题解!