2021.11.26更新,第17行代码判断条件修正
2019.12.14更新,坑点加一(最终答案需要用long long存储)


题目链接:http://118.190.20.162/view.page?gpid=T81

题目分析

  • 算是一道模拟题吧,题目的核心在于求遇到交通的时刻,交通灯处于什么样的状态,以及根据交通灯的状态得出需要等待的时间。遇到这类问题,推荐在草稿纸上画图,理清楚思路再码。
  • 我们需要明确,交通灯的状态是循环的,而循环的周期就是(r+y+g)(r+y+g)(r+y+g),所以求解时可以将经过的时间段对周期取模
  • 根据交通灯的变化的时间将分成区间[0,t),[t,t+g),[t+g,t+g+y),[t+g+y,g+y+r)[0,t),[t,t+g),[t+g,t+g+y),[t+g+y,g+y+r)[0,t),[t,t+g),[t+g,t+g+y),[t+g+y,g+y+r),看取余得到的时间落在哪个区间就可以知道交通灯状态了。(注意不要忽略第四个区间

坑点:
题目没写明什么时候该走什么时候该等(吐槽 )

  1. 红灯:等到绿灯即可通行
  2. 绿灯:直接通行
  3. 黄灯:黄灯等完后还要等到红灯结束才能通行

以及最终的答案需要用long long存储(看题目数据范围的时候,就应该提前分析好用什么类型存储了

代码如下

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;
const int maxn = 1e5 + 10;
int r, y, g, n, k, t;
long long ans;
int getTime(int type, int t, int total) {//根据交通灯的初始状态进行分类讨论if (type == 1) {t = total - t;//根据最后时间段落在哪个区间进行分类讨论if (t < 0) return -t; //最终为红灯else if (t < g) return 0; //最终为绿灯else return t < (g + y) ? (y - (t - g)) + r : (r + g + y - t); //最终为黄灯或红灯} else if (type == 2) {t = total - t;if (t < 0) return r - t;else if (t < r) return r - t;else return t < (r + g) ? 0 : (r + g + y - t) + r;} else if (type == 3) {t = total - t;if (t < 0) return 0;else if (t < y) return y - t + r;else return t < (y + r) ? r - (t - y) : 0;} else {return t;}
}int main()
{//    freopen("1.in", "r" ,stdin);scanf("%d%d%d", &r, &y, &g);scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d%d", &k, &t);ans += getTime(k, t, ans % (r + y + g));}printf("%lld\n", ans);return 0;
}

最后再附上一组帮我找到bug的数据:

input:
30 3 30
8
0 50
1 20
0 11
2 2
0 50
0 25
3 10
0 3outpu:
173

ccf-csp #201812-2 小明放学 (100分 附解析)相关推荐

  1. ccf小明放学20分_关于完全平方数的好题(20年3月1日)

    家长是孩子最好的老师,这是奥数君第1132天给出奥数题讲解. 今天的题目是数论问题,详细讲解后小学五年级学生能听懂. 题目(5星难度):正整数a,b都是完全平方数,它们的和a+b也是完全平方数.小明说 ...

  2. CCF CSP 201609-2 火车购票(C++语言100分)[简单模拟题]

    1. 问题链接:CCF 201609-2 火车购票 试题编号: 201609-2 试题名称: 火车购票 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 请实现一个铁路购票系统的 ...

  3. CCF CSP 201609-2 火车购票 C++实现 100分

    问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10 ...

  4. CCF CSP 201812-2 小明放学 解题思路及经验总结

    更新:多谢weixin_44714465同学指出我的错误[详见49-52行代码,已改正!].CCF CSP的OJ居然没有把这个错误检测出来,不过为了追求严谨,我们还是应该及时改正! 题目描述 试题编号 ...

  5. ##CSP 201812-2 小明放学(C语言)(100分)

    题目背景 汉东省政法大学附属中学所在的光明区最近实施了名为"智慧光明"的智慧城市项目.具体到交通领域,通过"智慧光明"终端,可以看到光明区所有红绿灯此时此刻的状 ...

  6. CCF CSP 小明放学

    一.题目 试题编号: 201812-2 试题名称: 小明放学 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 题目背景 汉东省政法大学附属中学所在的光明区最近实施了名为"智慧光 ...

  7. CCF201812-2 小明放学(100分)【序列处理】

    题目背景 汉东省政法大学附属中学所在的光明区最近实施了名为"智慧光明"的智慧城市项目.具体到交通领域,通过"智慧光明"终端,可以看到光明区所有红绿灯此时此刻的状 ...

  8. csp试题2:小明放学

    csp试题2:小明放学 题目 分析 代码 总结 题目 题目背景        汉东省政法大学附属中学所在的光明区最近实施了名为"智慧光明"的智慧城市项目.具体到交通领域,通过&qu ...

  9. 【CCF】201812-2小明放学

    问题描述 试题编号: 201812-2 试题名称: 小明放学 时间限制: 1.0s 内存限制: 512.0MB 题目背景 汉东省政法大学附属中学所在的光明区最近实施了名为"智慧光明" ...

最新文章

  1. Windows XP Service Pack 3 RC2 简体中文版发布
  2. socket通信函数的深入分析
  3. 得到CRC16校验码的常见几个标准的算法及C语言实现
  4. Linux有关Shell算数运算的用法补充笔记
  5. windows隐藏python运行时的终端
  6. php server 性能,PHP中:$_SERVER[‘REQUEST_TIME’]和 time()有什么区别,那个性能快!...
  7. mysql 柱状图统计_js/jquery 进行动态统计 各种柱状图 饼状图 线条图 等
  8. urban数据集_JUST技术:CK实现时序数据管理
  9. Eclipse上安装maven插件时出错
  10. python编程入门指南-《中小学生Python编程入门指南》附录二
  11. mirdeep2使用笔记
  12. C++编程 Unicode转换成中文
  13. 关于MFC窗口句柄,窗口ID,窗口指针
  14. html5商城后台源码,商城后台管理系统HTML+css+jquery
  15. Provisional headers are shown 解决问题
  16. FFFfrance博客介绍
  17. Go:go mod vendor 使用
  18. Elastic:开发者上手指南
  19. workman用户组
  20. LLVM IR转CFG

热门文章

  1. [gic]-ARM gicv3/gicv4的详细介绍-2020/12
  2. 三方支付(支付宝为例)
  3. 生成有控制台的WIN32程序
  4. linux 添加虚拟网卡
  5. vulnhub_内网渗透测试的记录——网络安全
  6. 160个Crackme006
  7. 12、查看字符集和校对规则
  8. 2015年蓝桥杯省赛题解
  9. VScode的基础设置
  10. Thymeleaf抽取公共页面片段