uva 617- Nonstop Travel(暴力+数学)
2014-04-30 22:09
363 查看
题目链接:uva 617 - Nonstop Travel
题目大意:在一条路上有n个红绿灯,给出红绿灯的位置,以及绿灯,黄灯和红灯的时间,问现在以什么样的速度可以不同停止便通过这条路段。(速度只在30~60km/h)
解题思路:枚举速度,然后判断即可。
注意说黄灯也是可以过的,以及红绿灯的距离是以米为单位的。
题目大意:在一条路上有n个红绿灯,给出红绿灯的位置,以及绿灯,黄灯和红灯的时间,问现在以什么样的速度可以不同停止便通过这条路段。(速度只在30~60km/h)
解题思路:枚举速度,然后判断即可。
注意说黄灯也是可以过的,以及红绿灯的距离是以米为单位的。
#include <cstdio> #include <cstring> const int N = 10; struct state { double dis; int r, y, g; }d ; 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(数论+暴力枚举)
- UVA 617 - Nonstop Travel(数论+暴力枚举)
- uva 618 - Doing Windows(暴力+数学)
- UVALive 7267(数学暴力)
- UVa 11461 - Square Numbers【数学,暴力】
- UVA 12898 And Or 数学暴力
- UVALive 7511 L - Multiplication Table 数学模拟题,暴力
- uva 10620 - A Flea on a Chessboard(暴力+数学)
- UVA 617 - Nonstop Travel
- uva 1069 - Always an integer(数学+暴力)
- uva 467 - Synching Signals(暴力+数学)
- Joking with Fermat's Last Theorem UVA - 12665 (数学,暴力)
- Uva12325 暴力枚举
- UVA 140 - Bandwidth 暴力 全排列 回溯
- UVA - 140(Bandwidth )(全排列+暴力)
- 数学专项counting:UVa 10237
- UVA 11300(数学)
- UVA 11609 (组合数学)
- uva 1555(数学)
- UVa 11059 最大乘积 java 暴力破解