ccf-csp #201812-2 小明放学 (100分 附解析)
2020-04-07 18:30
1641 查看
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),看取余得到的时间落在哪个区间就可以知道交通灯状态了。(注意不要忽略第四个区间)
坑点:
题目没写明什么时候该走什么时候该等(吐槽 )
- 红灯:等到绿灯即可通行
- 绿灯:直接通行
- 黄灯:黄灯等完后还要等到红灯结束才能通行
以及最终的答案需要用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 + r) ? (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 3 outpu: 173
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- 解决Java Web项目无法读取配置文件问题
- ccf-csp #201703-2 学生排队
- ccf-csp #201709-2 公共钥匙盒
- 解决Eclipse查看源代码出现Source not found的问题
- ccf-csp #201903-4 消息传递接口
- ccf-csp #201912-1 报数
- PHP7 安装 memcache
- 高校学生领取云服务器教程
- CentOS7安装wdCP面板,快速搭建web运行环境(图文详解)
- 剑指Offer #10 矩形覆盖(问题分析)
- 「软件测试基础」理论篇之软件测试概论
- wdCP面板升级MySQL版本为5.6
- Java基础之JDK 8下载、安装和环境变量配置
- 面试官问你HTTP状态码,你敢答吗?
- 手撕设计模式之单例模式(详细解析)
- Java的Arrays.sort()良心总结
- Spring Boot实现简单的用户权限管理(超详细版)
- HDU - 1716无需思考暴力做法
- C++ STL容器总结之vector(超详细版)
- 达摩院悬壶,看医疗 AI 如何济世