题目大意:在一条路上有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; }
uva 617- Nonstop Travel(暴力+数学),码迷,mamicode.com
uva 617- Nonstop Travel(暴力+数学)
原文地址:http://blog.csdn.net/keshuai19940722/article/details/24814877