0 of 2 Questions completed
Questions:
You have already completed the quiz before. Hence you can not start it again.
Quiz is loading…
You must sign in or sign up to start the quiz.
You must first complete the following:
0 of 2 Questions answered correctly
Your time:
Time has elapsed
You have reached 0 of 0 point(s), (0)
Earned Point(s): 0 of 0, (0)
0 Essay(s) Pending (Possible Point(s): 0)
22题:
对于一个1 到 n 的排列 P(即 1 到 n 中每一个数在 P 中出现了恰好一次),令 q[i]
为第 i 个位置之后第一个比 P[i]
值更大的位置,如果不存在这样的位置,则 q[i] = n + 1
。举例来说,如果 n = 5
且 P 为 1 5 4 2 3
,则 q 为2 6 6 5 6
。
下列程序读入了排列 P ,使用双向链表求解了答案。试补全程序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <iostream> using namespace std; const int N = 100010; int n; int L[N], R[N], a[N]; int main() { cin >> n; for (int i = 1; i <= n; ++i) { int x; cin >> x; ① ; } for (int i = 1; i <= n; ++i) { R[i] = ② ; L[i] = i - 1; } for (int i = 1; i <= n; ++i) { L[ ③ ] = L[a[i]]; R[L[a[i]]] = R[ ④ ]; } for (int i = 1; i <= n; ++i) { cout << ⑤ << " "; } cout << endl; return 0; } |
填空一: ,填空二: ,填空三: ,填空四: ,填空五:
第 23 题
一只小猪要买 N 件物品(N 不超过 1000)。
它要买的所有物品在两家商店里都有卖。第 i 件物品在第一家商店的价格是 ai ,在第二家商店的价格是 bi ,两个价格都不小于 0 且不超过 10000。如果在第一家商店买的物品的总额不少于 50000,那么在第一家店买的物品都可以打 95 折(价格变为原来的 0.95 倍)。
求小猪买齐所有物品所需最少的总额。
输入:第一行一个数 N。接下来 N 行,每行两个数。第 i 行的两个数分别代表 ai,bi。
输出:输出一行一个数,表示最少需要的总额,保留两位小数。
试补全程序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#include <cstdio> #include <cstdlib> using namespace std; const int Inf = 1000000000; const int threshold = 50000; const int maxn = 1000; int n, a[maxn], b[maxn]; bool put_a[maxn]; int total_a, total_b; double ans; int f[threshold]; int main() { scanf("%d", &n); total_a = total_b = 0; for (int i = 0; i < n; ++i) { scanf("%d%d", a + i, b + i); if (a[i] <= b[i]) total_a += a[i]; else total_b += b[i]; } ans = total_a + total_b; total_a = total_b = 0; for (int i = 0; i < n; ++i) { if ( ① ) { put_a[i] = true; total_a += a[i]; } else { put_a[i] = false; total_b += b[i]; } } if ( ② ) { printf("%.2f", total_a * 0.95 + total_b); return 0; } f[0] = 0; for (int i = 1; i < threshold; ++i) f[i] = Inf; int total_b_prefix = 0; for (int i = 0; i < n; ++i) if (!put_a[i]) { total_b_prefix += b[i]; for (int j = threshold - 1; j >= 0; --j) { if ( ③ >= threshold && f[j] != Inf) ans = min(ans, (total_a + j + a[i]) * 0.95 + ④ ); f[j] = min(f[j] + b[i], j >= a[i] ? ⑤ : Inf); } } printf("%.2f", ans); return 0; } |
填空一:
填空二:
填空三:
填空四:
填空五: