鱼C论坛

 找回密码
 立即注册
查看: 1224|回复: 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
#include <iostream>
#include <vector>

void get(std::vector<size_t> &a, std::vector<size_t> &b) {
    a.clear(); b.clear();
    size_t count; std::cin >> count;
    for(size_t i = 0; i < count; ++i) {
        size_t num; std::cin >> num;
        a.push_back(num);
    }
    for(size_t i = 0; i < count; ++i) {
        size_t num; std::cin >> num;
        b.push_back(num);
    }
}

const std::vector<size_t> verify(const std::vector<size_t> &a, const std::vector<size_t> &b) {
    std::vector<size_t> va = a, vb = b, vc;
    while(!va.empty()) {
        if(va[0] == vb[0]) {
            va.erase(va.begin());
            vb.erase(vb.begin());
        } else {
            vc.push_back(vb[0]);
            for(auto iter = va.begin(); iter != va.end(); ++iter) {
                if(*iter == vb[0]) {va.erase(iter); break;}
            }
            vb.erase(vb.begin());
        }
    }
    return vc;
}

int main() {
    std::vector<size_t> a, b, c;
    get(a, b); c = verify(a, b);
    for(const auto &num: c) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

void get(std::vector<size_t> &a, std::vector<size_t> &b) {
    a.clear(); b.clear();
    size_t count; std::cin >> count;
    for(size_t i = 0; i < count; ++i) {
        size_t num; std::cin >> num;
        a.push_back(num);
    }
    for(size_t i = 0; i < count; ++i) {
        size_t num; std::cin >> num;
        b.push_back(num);
    }
}

const std::vector<size_t> verify(const std::vector<size_t> &a, const std::vector<size_t> &b) {
    std::vector<size_t> va = a, vb = b, vc;
    while(!va.empty()) {
        if(va[0] == vb[0]) {
            va.erase(va.begin());
            vb.erase(vb.begin());
        } else {
            vc.push_back(vb[0]);
            for(auto iter = va.begin(); iter != va.end(); ++iter) {
                if(*iter == vb[0]) {va.erase(iter); break;}
            }
            vb.erase(vb.begin());
        }
    }
    return vc;
}

int main() {
    std::vector<size_t> a, b, c;
    get(a, b); c = verify(a, b);
    for(const auto &num: c) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 03:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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