【PAT甲级】1033. To Fill or Not to Fill (25)
2016-10-21 18:15
281 查看
陷阱:没有距离为0加油站,则汽车无法行驶( ´◔ ‸◔’)
#include <stdio.h> #include <algorithm> using namespace std; typedef struct Sta { double price; double dist; double gas_ds; } Sta; double c_max; double d; double d_avg; int n; double full_dist;//加满后可以行驶的距离 double run_dist;//已经行驶的距离 Sta s[501]; bool com(Sta a, Sta b) { return a.dist < b.dist; } int findnext(int a, int b); int main(int argc, char *argv[]) { scanf("%lf %lf %lf %d", &c_max, &d, &d_avg, &n); int i, j, k; int flag = 1; for (i = 0; i < n; i++) { scanf("%lf %lf", &s[i].price, &s[i].dist); s[i].gas_ds = 0; flag = flag * s[i].dist; } if (flag != 0.0) { printf("The maximum travel distance = 0.00\n"); return 0; } n++; s[n - 1].dist = d; sort(s, s + n, com); full_dist = c_max * d_avg; run_dist = 0.0; int lastmin = 0; double lastpos = 0.0; for (i = 0; i < n - 1; i++) { if (s[i + 1].dist - s[i].dist > full_dist) { run_dist = s[i].dist + full_dist; break; } else { if (s[i].price < s[lastmin].price) { s[lastmin].gas_ds = s[i].dist - lastpos; lastmin = i; lastpos = s[i].dist; } else { if (s[i + 1].dist - s[lastmin].dist <= full_dist) { } else { do { s[lastmin].gas_ds = s[lastmin].dist + full_dist - lastpos; lastpos = s[lastmin].dist + full_dist; lastmin = findnext(lastmin + 1, i); } while (s[i + 1].dist - s[lastmin].dist > full_dist); } } } } s[lastmin].gas_ds = s[n - 1].dist - lastpos; if (run_dist > 0.0) { printf("The maximum travel distance = %.2f\n", run_dist); } else { double sum = 0.0; for (i = 0; i < n - 1; i++) { if (s[i].gas_ds > 0) { sum += s[i].gas_ds * s[i].price; } } sum = sum / d_avg; printf("%.2lf\n", sum); } return 0; } int findnext(int a, int b) { if (a > b) return -1; int minIndex = a; for (int i = a; i <= b; i++) { if (s[i].price < s[minIndex].price) { minIndex = i; } } return minIndex; }
相关文章推荐
- PAT甲级真题及训练集(25)--1094. The Largest Generation (25)
- 1097. Deduplication on a Linked List (25) PAT甲级
- PAT 甲级1003. Emergency (25) DIJKSTRA
- 浙江大学PAT_甲级_1083. List Grades (25)
- 浙江大学PAT_甲级_1047. Student List for Course (25)
- 1044. Shopping in Mars (25) PAT 甲级
- PAT甲级1002. A+B for Polynomials (25)
- PAT甲级1002. A+B for Polynomials (25)
- PAT甲级1009. Product of Polynomials (25)
- PAT甲级1032. Sharing (25)
- PAT甲级练习题A1021. Deepest Root (25)
- 1003. Emergency (25) PAT 甲级
- PAT(甲级)1010. Radix (25)
- 1029. Median (25)-PAT甲级真题(two points)
- PAT 1126. Eulerian Path (25)-甲级
- [PAT甲级]1003. Emergency (25)(求城市间最短路径和最大救援队数目)
- PAT甲级1002. A+B for Polynomials (25)
- PAT 甲级 1020. Tree Traversals (25)
- PAT 甲级 1032. Sharing (25)
- 1070. Mooncake (25)-PAT甲级