uva 617- Nonstop Travel(暴力+数学)

来源:互联网 发布:虚拟机安装ubuntu出错 编辑:程序博客网 时间:2024/06/12 03:36

题目链接:uva 617 - Nonstop Travel


题目大意:在一条路上有n个红绿灯,给出红绿灯的位置,以及绿灯,黄灯和红灯的时间,问现在以什么样的速度可以不同停止便通过这条路段。(速度只在30~60km/h)


解题思路:枚举速度,然后判断即可。

注意说黄灯也是可以过的,以及红绿灯的距离是以米为单位的。


#include <cstdio>#include <cstring>const int N = 10;struct state {double dis;intr, y, g;}d[N];struct can {int l, r;void put() {if (l == r)printf("%d", l);elseprintf("%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;}


1 0
原创粉丝点击