Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
认真写一次代码Source Code Problem: 1018 User: nimohunter Memory: 544K Time: 94MS Language: G++ Result: Accepted Source Code #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int size = 105; struct dev { int width, price; }; dev device[size][size]; int low_width[size*size], low_price[size][size], num[size]; bool cmp(dev a, dev b) { if (a.width == b.width) return a.price < b.price; return a.width < b.width; } int main() { //freopen("nimo.in", "r", stdin); int cas, n; scanf("%d", &cas); while (cas--) { scanf("%d", &n); int n_device = 0; for (int i = 0; i < n; i++) { scanf("%d", &num[i]); for (int j = 0; j < num[i]; j++) { scanf("%d%d", &device[i][j].width, &device[i][j].price); low_width[n_device++] = device[i][j].width; } } sort(low_width, low_width+n_device); //low_price[i][j] is the lowest price which width is larger than device[i][j].width for (int i = 0; i < n; i++) { sort(device[i], device[i]+num[i], cmp); low_price[i][num[i]-1] = device[i][num[i]-1].price; for (int j = num[i]-2; j >= 0; j--) low_price[i][j] = min(device[i][j].price, low_price[i][j+1]); } double ans = 0; for (int k = 0; k < n_device; k++) { // current choose width = low_width[k]; int sum_price = 0; bool flag = 0; for (int i = 0; i < n; i++) { int j; for (j = 0; j < num[i]; j++) if (device[i][j].width >= low_width[k]) break; if (j == num[i]) { //the largest width in this group cannot support current width flag = 1; break; } sum_price += low_price[i][j]; } if (flag) break; double tmp_ans = (double)low_width[k]/(double)sum_price; if (tmp_ans > ans) ans = tmp_ans; } printf("%.3f\n", ans); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator