试卷总分:100分
选择题 15题 30分
判断题 10题 20分
编程题 2题 50分
struct Node { int val; Node* next; }; void insertAfterHead(Node* head, int x) { Node* newNode = new Node; newNode->val = x; // 在此处填入代码 }
struct Node { int val; Node* next; }; void printList(Node* head) { if (head == nullptr) return; Node* p = head; // 在此处填入代码 cout << endl; }
struct Node { int val; Node* prev; Node* next; }
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
vector sieve(int n) { vector is_prime(n + 1, true); vector primes; if (n >= 0) is_prime[0] = false; if (n >= 1) is_prime[1] = false; for (int i = 2; i <= n; ++i) { if (is_prime[i]) { primes.push_back(i); } for (int j = 0; j < primes.size() && i * primes[j] <= n; j++) { is_prime[i * primes[j]] = false; if (/* 在此处填入代码 */) break; } } return primes; }
long long power(long long x, int n) { if (n == 0) return 1; long long res = power(x, n / 2); if (n % 2 == 0) return res * res; else return res * res * x; }
int n = 40; int cnt = 0; while (n % 2 == 0) { cnt++; n /= 2; } cout << cnt;
int lowerBound(vector& a, int x) { int l = 0, r = a.size(); while (l < r) { int mid = l + (r - l) / 2; if (a[mid] >= x) /* 在此处填入代码 */; else l = mid + 1; } return l; }
int binary_cut(vector& wood, int K) { int l = 1; int r = 0; for (int len : wood) r = max(r, len); while (l < r) { int mid = l + (r - l) / 2; if (check(wood, K, mid)) /* 在此处填入代码 */; else l = mid + 1; } return l; }
int partition(vector& arr, int low, int high) { int pivot = arr[low]; int i = low, j = high; while (i < j) { while (i < j && arr[j] >= pivot) j--; while (i < j && arr[i] <= pivot) i++; if (i < j) swap(arr[i], arr[j]); } // 在此处填入代码 return i; }
const int MAXN = 100005; int a[MAXN]; int tempArr[MAXN]; void mergeArray(int left, int mid, int right) { int i = left; int j = mid + 1; int k = left; while (i <= mid && j <= right) { if (a[i] <= a[j]) { tempArr[k++] = a[i++]; } else { tempArr[k++] = a[j++]; } } while (i <= mid) { tempArr[k++] = a[i++]; } while (j <= right) { tempArr[k++] = a[j++]; } for (int p = left; p <= right; p++) { a[p] = tempArr[p]; } } void mergeSort(int left, int right) { if (left >= right) { return; } int mid = left + (right - left) / 2; mergeSort(left, mid); mergeSort(mid + 1, right); mergeArray(left, mid, right); }
int minBoxes(vector& w, int limit) { sort(w.begin(), w.end()); int l = 0, r = w.size() - 1; int boxes = 0; while (l <= r) { if (w[l] + w[r] <= limit) { // 在此处填入代码 } else { r--; } boxes++; } return boxes; }
if (a[i] < b[i]) { a[i + 1]--; // 在此处填入代码 } t = a[i] - b[i];
p->next = head->next; p->prev = head; head->next->prev = p; head->next = p;
int gcd1(int a, int b) { return b ? gcd1(b, a % b) : a; } int gcd2(int a, int b) { while (b) { int t = b; b = a % b; a = t; } return a; }
void merge(int arr[], int left, int mid, int right) { int n1 = mid - left + 1; int n2 = right - mid; int L[n1], R[n2]; for (int i = 0; i < n1; i++) L[i] = arr[left + i]; for (int j = 0; j < n2; j++) R[j] = arr[mid + 1 + j]; int i = 0, j = 0, k = left; while (i < n1 && j < n2) { if (L[i] <= R[j]) arr[k++] = L[i++]; else arr[k++] = R[j++]; } while (i < n1) arr[k++] = L[i++]; while (j < n2) arr[k++] = R[j++]; }
void f1(int n) { for (int i = 1; i < n; i *= 2); } void f2(int n) { if (n <= 1) return; f2(n - 1); f2(n - 1); }
时间限制:1.0s
内存限制:512.0MB
老师正在和小朋友们分糖果。
小朋友们先在自己的手上写一个数字,然后坐成一排。
老师分发糖果的规则是:每个小朋友获得自己以及左侧所有小朋友的手上数字之和个糖果。
现在小朋友们都已经在自己手上写上了数字。
请帮小朋友们安排合适的座位顺序,使得小朋友们分到的糖果总量最大,输出这个最大值。
输入2行,
第一行为一个正整数 n,表示小朋友的个数;
n
第二行为 n 个正整数 a1, a2, ..., an,表示小朋友们手上的数字,整数之间以空格分隔。
a1, a2, ..., an
输出一个整数,表示小朋友们可能分到的最大糖果总数量。
5 7 5 8 9 3
111
小朋友安排座位后从左向右每人手上数字依次是:9,8,7,5,3。
这时可以得到最多的糖果:(9) + (9+8) + (9+8+7) + (9+8+7+5) + (9+8+7+5+3) = 111。
(9) + (9+8) + (9+8+7) + (9+8+7+5) + (9+8+7+5+3) = 111
1 ≤ n ≤ 1000,1 ≤ ai ≤ 1000。
1 ≤ n ≤ 1000
1 ≤ ai ≤ 1000
小明去参加晚宴。晚宴中有 n 个菜肴,每个菜肴都有一个美味度,第 i 个菜肴的美味度为 vi。晚宴规定小明只能恰好选取两道菜肴,并且这两道菜肴的美味度必须要互质(即最大公约数为1)。请帮助小明选取两道菜肴,使得两道菜肴美味度之和最大。
i
vi
第一行为一个正整数 n,表示菜肴的个数;
第二行为 n 个整数 v1, v2, ..., vn,表示菜肴的美味度,整数之间以空格分隔。
v1, v2, ..., vn
输出一个整数,表示两道互质菜肴美味度之和的最大值。
5 3 5 7 35 105
38
最优选择是3和35。
注意到,105与其他任意菜肴的最大公约数都大于1,因此无法参与合法选择。
2 ≤ n ≤ 1000,1 ≤ vi ≤ 1000000
2 ≤ n ≤ 1000
1 ≤ vi ≤ 1000000
数据保证不存在相同美味度的菜肴。
数据保证至少存在一种选取两道菜肴的方案。