首页 > 代码库 > uva 617- Nonstop Travel(暴力+数学)
uva 617- Nonstop Travel(暴力+数学)
题目链接:uva 617 - Nonstop Travel
题目大意:在一条路上有n个红绿灯,给出红绿灯的位置,以及绿灯,黄灯和红灯的时间,问现在以什么样的速度可以不同停止便通过这条路段。(速度只在30~60km/h)
解题思路:枚举速度,然后判断即可。
注意说黄灯也是可以过的,以及红绿灯的距离是以米为单位的。
#include <cstdio> #include <cstring> const int N = 10; struct state { double dis; int r, y, g; }d[N]; struct can { int l, r; void put() { if (l == r) printf("%d", l); else printf("%d-%d", l, r); } }s[6*N]; int n, m; bool judge (double v) { v /= 3600; for (int i = 0; i < n; i++) { int sum = d[i].r + d[i].y + d[i].g; double t = d[i].dis / v; int ti = (int)t; int k = ti / sum; t = t - k * sum; if (t > d[i].g + d[i].y) return false; } return true; } int main () { int cas = 1; while (scanf("%d", &n) == 1 && n != -1) { for (int i = 0; i < n; i++) scanf("%lf%d%d%d", &d[i].dis, &d[i].g, &d[i].y, &d[i].r); m = 0; for (int i = 30; i <= 60; i++) { if (judge(i)) { if (m == 0 || s[m-1].r + 1 < i) { s[m].l = s[m].r = i; m++; } else { s[m-1].r++; } } } printf("Case %d: ", cas++); if (m) { for (int i = 0; i < m - 1; i++) { s[i].put(); printf(", "); } s[m-1].put(); printf("\n"); } else printf("No acceptable speeds.\n"); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。