赞
踩
这个写出来的人脑子太强了
代码:
#include <iostream> #include <algorithm> using namespace std; int n, k;//站点数,乘客总数 const int maxn = 1e4 + 10, mod = 1e9 + 7, inf = 0x3f3f3f3f;//这个maxn可能是最大乘客数加了个常数 long long ans[maxn]; int main(){ cin >> n >> k; for (int i = 1; i <= k; i++){ int tme, s, t;//起始时间 起始站点 终止站点 cin >> tme >> s >> t; if (s == t) continue; int tmp = max(s, t) - min(s, t);//经过的站点数 因为有可能是顺时针也有可能是逆时针 ans[tme]++;//在开始时间打上1 ans[tme + min(tmp, n - tmp) * 5] --;//在结束时间打上-1 //上面两行是为了后续统计最大同时运行车数 //数组的当前数加上上一个数为当前同时运行的出租车数 //到开始时间(tme)加一 结束站点减一 } long long res = 0; for (int i = 1; i < maxn; i++) { ans[i] += ans[i - 1]; res = max(res, ans[i]); } cout << res << '\n'; system("pause"); return 0; }
理解不了可以看看下面这个数组的更新情况 感觉华为的题都比较 巧妙
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。