zoukankan      html  css  js  c++  java
  • 201812-2 小明放学

    题目传送门:http://118.190.20.162/view.page?gpid=T81

    问题描述

    试题编号: 201812-2
    试题名称: 小明放学
    时间限制: 1.0s
    内存限制: 512.0MB
    问题描述:
    题目背景
      汉东省政法大学附属中学所在的光明区最近实施了名为“智慧光明”的智慧城市项目。具体到交通领域,通过“智慧光明”终端,可以看到光明区所有红绿灯此时此刻的状态。小明的学校也安装了“智慧光明”终端,小明想利用这个终端给出的信息,估算自己放学回到家的时间。
    问题描述
      一次放学的时候,小明已经规划好了自己回家的路线,并且能够预测经过各个路段的时间。同时,小明通过学校里安装的“智慧光明”终端,看到了出发时刻路上经过的所有红绿灯的指示状态。请帮忙计算小明此次回家所需要的时间。
    输入格式
      输入的第一行包含空格分隔的三个正整数 r、y、g,表示红绿灯的设置。这三个数均不超过 106
      输入的第二行包含一个正整数 n,表示小明总共经过的道路段数和路过的红绿灯数目。
      接下来的 n 行,每行包含空格分隔的两个整数 k、t。k=0 表示经过了一段道路,将会耗时 t 秒,此处 t 不超过 106;k=1、2、3 时,分别表示出发时刻,此处的红绿灯状态是红灯、黄灯、绿灯,且倒计时显示牌上显示的数字是 t,此处 t 分别不会超过 r、y、g。
    输出格式
      输出一个数字,表示此次小明放学回家所用的时间。
    样例输入
    30 3 30
    8
    0 10
    1 5
    0 11
    2 2
    0 6
    0 3
    3 10
    0 3
    样例输出
    46
    样例说明
      小明先经过第一段路,用时 10 秒。第一盏红绿灯出发时是红灯,还剩 5 秒;小明到达路口时,这个红绿灯已经变为绿灯,不用等待直接通过。接下来经过第二段路,用时 11 秒。第二盏红绿灯出发时是黄灯,还剩两秒;小明到达路口时,这个红绿灯已经变为红灯,还剩 11 秒。接下来经过第三、第四段路,用时 9 秒。第三盏红绿灯出发时是绿灯,还剩 10 秒;小明到达路口时,这个红绿灯已经变为红灯,还剩两秒。接下来经过最后一段路,用时 3 秒。共计 10+11+11+9+2+3 = 46 秒。
    评测用例规模与约定
      有些测试点具有特殊的性质:
      * 前 2 个测试点中不存在任何信号灯。
      测试点的输入数据规模:
      * 前 6 个测试点保证 n ≤ 103
      * 所有测试点保证 n ≤ 105

    题解:

    #include<iostream>
    using namespace std;
    
    int main() {
        long long r, y, g, n, k, t, ans = 0, temp = 0, wait = 0;
        cin >> r >> y >> g >> n;
        while (n--) {
            cin >> k >> t;
            temp = ans % (r + g + y);//确保在一个周期内
            switch (k) {
            case 0:
                wait = t;
                break;
            case 1:                 //红灯
                if (temp - t < 0) wait = t - temp;//到达时未变色还是红灯
                else if (temp - t < g) wait = 0;//到达时由红灯变为绿灯
                else if (temp - t - g > 0 && temp - t - g < y) wait = y - (temp - t - g) + r;//到达时由红灯变为绿灯再变为黄灯
                else wait = r - ((temp - t - g) - y);//到达时由红灯变为绿灯变为黄灯再变为红灯
                break;
            case 2:                 //黄灯
                if (temp - t < 0) wait = t - temp + r;//到达时未变色还是黄灯
                else if (temp - t < r) wait = r - (temp - t); //到达时由黄灯变为红灯
                else if (temp - t - r >= 0 && temp - t - r <= g) wait = 0;//到达时由黄灯变为红灯再变为绿灯
                else wait = y - (temp - t - r - g) + r;//到达时由黄灯变为红灯变为绿灯再变为黄灯
                break;
            default:                //绿灯
                if (temp - t < 0) wait = 0; //到达时未变色还是绿灯
                else if (temp - t >= 0 && temp - t < y) wait = r + y - (temp - t); //到达时由绿灯变为黄灯
                else if (temp - t - y >= 0 && temp - t - y < r) wait = r - (temp - t - y); //到达时由绿灯变为黄灯再变为红灯
                else wait = 0; //到达时由绿灯变为黄灯再变为红灯再变为绿灯
                break;
            }
            ans += wait;
        }
        cout << ans << endl;
        return 0;
    }
  • 相关阅读:
    chrome浏览器中安装以及使用Elasticsearch head 插件
    windows10 升级并安装配置 jmeter5.3
    linux下部署Elasticsearch6.8.1版本的集群
    【Rollo的Python之路】Python 爬虫系统学习 (八) logging模块的使用
    【Rollo的Python之路】Python 爬虫系统学习 (七) Scrapy初识
    【Rollo的Python之路】Python 爬虫系统学习 (六) Selenium 模拟登录
    【Rollo的Python之路】Python 爬虫系统学习 (五) Selenium
    【Rollo的Python之路】Python 爬虫系统学习 (四) XPath学习
    【Rollo的Python之路】Python 爬虫系统学习 (三)
    【Rollo的Python之路】Python sys argv[] 函数用法笔记
  • 原文地址:https://www.cnblogs.com/gzu_zb/p/10526324.html
Copyright © 2011-2022 走看看