鱼C论坛

 找回密码
 立即注册
查看: 1379|回复: 1

[已解决]超车问题

[复制链接]
发表于 2021-3-12 21:56:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
假设有一条单向通行的隧道,有一天有m辆编号为1到m的小轿车从这条隧道入口进入然后从出口驶出。每辆车只会经过这个隧道一次。全部的车都以恒定的速度经过隧道。
隧道的入口和出口处均设置有交通执法摄像头。从这两个交通执法摄像头,我们可以很清楚地知道每辆车进入和驶出隧道的顺序。没有两辆车会同时进入隧道,并且也没有两辆车会同时驶出隧道。
交通法规禁止车辆在隧道中超车。如果车辆i在隧道中超了车辆j,那么车辆i的车主就会面临罚款。每辆车的车主最多被罚款一次,即使他在隧道中超车多次。
我们对车辆i超车辆j的定义如下:如果车辆i晚于车辆j进入隧道,并且车辆i早于车辆j驶出隧道,那么车辆i就视为超车了车辆j。
给出车辆按时间顺序进入隧道的顺序和驶出隧道的顺序,编程计算有多少个车主会被罚款。
最佳答案
2021-3-12 23:09:10
  1. #include <iostream>
  2. #include <vector>

  3. void get(std::vector<size_t> &a, std::vector<size_t> &b) {
  4.     a.clear(); b.clear();
  5.     size_t count; std::cin >> count;
  6.     for(size_t i = 0; i < count; ++i) {
  7.         size_t num; std::cin >> num;
  8.         a.push_back(num);
  9.     }
  10.     for(size_t i = 0; i < count; ++i) {
  11.         size_t num; std::cin >> num;
  12.         b.push_back(num);
  13.     }
  14. }

  15. const std::vector<size_t> verify(const std::vector<size_t> &a, const std::vector<size_t> &b) {
  16.     std::vector<size_t> va = a, vb = b, vc;
  17.     while(!va.empty()) {
  18.         if(va[0] == vb[0]) {
  19.             va.erase(va.begin());
  20.             vb.erase(vb.begin());
  21.         } else {
  22.             vc.push_back(vb[0]);
  23.             for(auto iter = va.begin(); iter != va.end(); ++iter) {
  24.                 if(*iter == vb[0]) {va.erase(iter); break;}
  25.             }
  26.             vb.erase(vb.begin());
  27.         }
  28.     }
  29.     return vc;
  30. }

  31. int main() {
  32.     std::vector<size_t> a, b, c;
  33.     get(a, b); c = verify(a, b);
  34.     for(const auto &num: c) {
  35.         std::cout << num << " ";
  36.     }
  37.     std::cout << std::endl;
  38.     return 0;
  39. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-12 23:09:10 | 显示全部楼层    本楼为最佳答案   
  1. #include <iostream>
  2. #include <vector>

  3. void get(std::vector<size_t> &a, std::vector<size_t> &b) {
  4.     a.clear(); b.clear();
  5.     size_t count; std::cin >> count;
  6.     for(size_t i = 0; i < count; ++i) {
  7.         size_t num; std::cin >> num;
  8.         a.push_back(num);
  9.     }
  10.     for(size_t i = 0; i < count; ++i) {
  11.         size_t num; std::cin >> num;
  12.         b.push_back(num);
  13.     }
  14. }

  15. const std::vector<size_t> verify(const std::vector<size_t> &a, const std::vector<size_t> &b) {
  16.     std::vector<size_t> va = a, vb = b, vc;
  17.     while(!va.empty()) {
  18.         if(va[0] == vb[0]) {
  19.             va.erase(va.begin());
  20.             vb.erase(vb.begin());
  21.         } else {
  22.             vc.push_back(vb[0]);
  23.             for(auto iter = va.begin(); iter != va.end(); ++iter) {
  24.                 if(*iter == vb[0]) {va.erase(iter); break;}
  25.             }
  26.             vb.erase(vb.begin());
  27.         }
  28.     }
  29.     return vc;
  30. }

  31. int main() {
  32.     std::vector<size_t> a, b, c;
  33.     get(a, b); c = verify(a, b);
  34.     for(const auto &num: c) {
  35.         std::cout << num << " ";
  36.     }
  37.     std::cout << std::endl;
  38.     return 0;
  39. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 21:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表