题解 | #To Fill or Not to Fill#
To Fill or Not to Fill
https://www.nowcoder.com/practice/f7eba38f7cd24c45982831e0f38518f9
按价格贪心,写于2024.3.25复试前夜
#include <iostream> #include <cstring> #include <algorithm> #include <stack> #include <cmath> using namespace std; struct jiayouzhan { double pi; int di; }; // 加油站结构体 bool compare(struct jiayouzhan x, struct jiayouzhan y) { // if (x.di == y.di) return x.pi < y.pi; // 对油价排序 // else // return x.di < y.di; // 按距离升序排列 } int main() { int cmax, d, n, dvag, i, j; double result = 0; cin >> cmax >> d >> dvag >> n; struct jiayouzhan arr[n]; int weizhi[d]; for (i = 0; i < d; i++) { weizhi[i] = 0; // 代表距离有没有被走,0代表没被走 } for (int i = 0; i < n; i++) { cin >> arr[i].pi >> arr[i].di; // cout << arr[i].pi << arr[i].di << endl; } sort(arr, arr + n, compare); // 按油价排序 // for (i = 0; i < n; i++) // { // // cin >> arr[i].pi >> arr[i].di; // cout << arr[i].pi << "hdu" << arr[i].di << endl; // } int max_dis = cmax * dvag; // 计算灌满油的最大行驶距离 for (i = 0; i < n; i++) { for (j = arr[i].di; j < arr[i].di + max_dis && j < d; j++) { if (weizhi[j] != 1) { weizhi[j] = 1; result += arr[i].pi; } } } for (i = 0; i < d; i++) { if (weizhi[i] == 0) { cout << "The maximum travel distance = " << i << ".00" << endl; return 0; } } printf("%.2lf", result / dvag); // cout << result/dvag << endl; return 0; }