A

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. using namespace std;
  5. int main() {
  6. int n, t, count = 0;
  7. vector<int> v;
  8. cin >> n;
  9. while (n--) {
  10. cin >> t;
  11. if (t % 2) {
  12. v.push_back(t);
  13. }
  14. }
  15. sort(v.begin(), v.end());
  16. n = v.size();
  17. for (int i = 0; i < n; i++) {
  18. cout << v[i];
  19. if (i != n - 1) cout << ',';
  20. }
  21. return 0;
  22. }

B

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. #include <string>
  5. using namespace std;
  6. typedef struct NODE {
  7. string name;
  8. double time;
  9. }node;
  10. int cmp(node a, node b) {
  11. return a.time < b.time;
  12. }
  13. int main() {
  14. vector<node> v;
  15. int n, k;
  16. cin >> n >> k;
  17. for (int i = 0; i < n; i++) {
  18. node t;
  19. cin >> t.name;
  20. cin >> t.time;
  21. v.push_back(t);
  22. }
  23. sort(v.begin(), v.end(),cmp);
  24. cout << v[k - 1].name;
  25. return 0;
  26. }

C

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int main() {
  5. int n;
  6. cin >> n;
  7. vector<int> a(n,0);
  8. for (int i = 0; i < n; i++) {
  9. cin >> a[i];
  10. }
  11. long long count = 0;
  12. for (int i = 0; i < n-1; i++) {
  13. for (int j = 0; j < n - i - 1; j++) {
  14. if (a[j] > a[j + 1]) {
  15. swap(a[j], a[j + 1]);
  16. count++;
  17. }
  18. }
  19. }
  20. cout << count;
  21. return 0;
  22. }

D

  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. using namespace std;
  5. int main() {
  6. map<int, int> m;
  7. int m_value = 0, n,t;
  8. cin >> n;
  9. for (int i = 0; i < n; i++) {
  10. cin >> t;
  11. m[t]++;
  12. }
  13. map<int, int>::iterator i;
  14. for (i = m.begin(); i != m.end(); i++) {
  15. if (i->second > m_value) m_value = i->second;
  16. }
  17. for (i = m.begin(); i != m.end(); i++) {
  18. if (i->second == m_value) {
  19. cout << i->first;
  20. break;
  21. }
  22. }
  23. return 0;
  24. }

E

  1. #include <iostream>
  2. #include <set>
  3. using namespace std;
  4. int main() {
  5. set<int> s;
  6. int n, t;
  7. cin >> n;
  8. while (n--) {
  9. cin >> t;
  10. s.insert(t);
  11. }
  12. cout << s.size() << endl;
  13. set<int, int>::iterator i = s.begin();
  14. for (; i != s.end(); i++) {
  15. cout << *i << ' ';
  16. }
  17. return 0;
  18. }

F

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <algorithm>
  4. #include <string>
  5. #include <vector>
  6. using namespace std;
  7. typedef struct NODE {
  8. string sex;
  9. double height = 0;
  10. }node;
  11. int cmp(node a, node b) {
  12. if (a.sex == "male" && b.sex == "male") return a.height < b.height;
  13. else if (a.sex == "female" && b.sex == "female") return a.height > b.height;
  14. else {
  15. if (a.sex == "male") return 1;
  16. else return 0;
  17. }
  18. }
  19. int main() {
  20. vector<node> v;
  21. node t;
  22. int n;
  23. cin >> n;
  24. while (n--) {
  25. cin >> t.sex >> t.height;
  26. v.push_back(t);
  27. }
  28. sort(v.begin(), v.end(),cmp);
  29. int len = v.size();
  30. for (int i = 0; i < len; i++) {
  31. printf("%.2lf ", v[i].height);
  32. }
  33. return 0;
  34. }

G快速排序掌握基础以及提升

  1. #include <iostream>
  2. using namespace std;
  3. int L[100005];
  4. void QSort(int L[], int left, int right) //快速排序
  5. {
  6. if (left >= right) return; //条出循环
  7. int temp = L[left]; //采用最左边的数作为支点
  8. int i = left, j = right;
  9. while (i < j)
  10. {
  11. while (i < j && L[j] >= temp) j--;
  12. L[i] = L[j]; //将比支点小的数移到低端
  13. while (i < j && L[i] <= temp) i++;
  14. L[j] = L[i]; //将比支点大的数移到高端
  15. }
  16. L[i] = temp; //支点移到i位置上**易错点**
  17. QSort(L, left, i - 1); //递归处理左边的数
  18. QSort(L, i + 1, right); //递归处理右边的数
  19. }
  20. int main()
  21. {
  22. int n;
  23. cin >> n;
  24. for (int i = 0; i < n; i++)
  25. cin >> L[i];
  26. QSort(L, 0, n - 1);
  27. for (int i = 0; i < n; i++)
  28. cout << L[i] << ' ';
  29. return 0;
  30. }

H - 线段覆盖(贪心与排序)

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5. typedef struct NODE {
  6. int s;
  7. int t;
  8. }node;
  9. int cmp(node a, node b) {
  10. if (a.s == b.s) return a.t < b.t;
  11. else return a.s < b.s;
  12. }
  13. int main() {
  14. vector<node> v(107);
  15. int end = 0, int_s, int_t, n;
  16. cin >> n;
  17. for (int i = 0; i < n; i++) {
  18. cin >> int_s >> int_t;
  19. v[i].s = int_s;
  20. v[i].t = int_t;
  21. }
  22. sort(v.begin(), v.begin() + n, cmp);
  23. /*贪心算法*/
  24. int ans = 0;
  25. for (int i = 0; i < n; i++) {
  26. if (v[i].s >= end) {
  27. ans++;
  28. end = v[i].t;
  29. }
  30. }
  31. cout << ans;
  32. return 0;
  33. }

I - 奖学金(重载结构体运算符与sort)

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. const int MAXN = 3e2 + 1;
  5. struct NODE{
  6. int Chinese = 0;
  7. int Math = 0;
  8. int English = 0;
  9. int id;
  10. int operator>(const NODE b) {
  11. int total_a = Chinese + Math + English;
  12. int total_b = b.Chinese + b.Math + b.English;
  13. if (total_a > total_b) {
  14. return 1;
  15. }
  16. else if (total_a == total_b && Chinese > b.Chinese) {
  17. return 1;
  18. }
  19. else if (total_a == total_b && Chinese == b.Chinese && id < b.id) {
  20. return 1;
  21. }
  22. else return 0;
  23. }
  24. }stu[MAXN];
  25. int cmp(struct NODE a, struct NODE b) {
  26. return a > b;
  27. }
  28. int main() {
  29. int n, a, b, c;
  30. cin >> n;
  31. for (int i = 1; i <= n; i++) {
  32. cin >> a >> b >> c;
  33. stu[i].Chinese = a;
  34. stu[i].Math = b;
  35. stu[i].English = c;
  36. stu[i].id = i;
  37. }
  38. sort(stu + 1, stu + n + 1,cmp);
  39. for (int i = 1; i <= 5; i++) {
  40. cout << stu[i].id << ' ' << stu[i].Chinese + stu[i].Math + stu[i].English << endl;
  41. }
  42. return 0;
  43. }

J - 配对

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cmath>
  4. using namespace std;
  5. const int MAXN = 1e5 + 1;
  6. int array_a[MAXN];
  7. int array_b[MAXN];
  8. int main() {
  9. int n;
  10. cin >> n;
  11. for (int i = 0; i < n; i++) {
  12. cin >> array_a[i];
  13. }
  14. for (int i = 0; i < n; i++) {
  15. cin >> array_b[i];
  16. }
  17. sort(array_a, array_a + n);
  18. sort(array_b, array_b + n);
  19. int ans = 0;
  20. for (int i = 0; i < n; i++) {
  21. ans += abs(array_a[i] - array_b[i]);
  22. }
  23. cout << ans;
  24. return 0;
  25. }

K - 奶牛图书馆(greater())

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. const int MAXN = 2e4 + 1;
  5. int a[MAXN];
  6. int main() {
  7. int n, h;
  8. cin >> n >> h;
  9. for (int i = 0; i < n; i++) {
  10. cin >> a[i];
  11. }
  12. sort(a, a + n, greater<int>());
  13. int ans = 0,total = 0;
  14. for (int i = 0; i < n; i++) {
  15. total += a[i];
  16. ans++;
  17. if (total >= h) break;
  18. }
  19. cout << ans;
  20. return 0;
  21. }

L - 逆排序(递归排序/线段树)

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. const int MAXN = 1e2 + 1;
  5. int ans = 0;
  6. vector<int> v1(MAXN);
  7. vector<int> v2(MAXN);
  8. void msort(int l, int r) {
  9. if (l == r) return;
  10. int mid = (l + r) / 2;
  11. msort(l, mid);
  12. msort(mid + 1, r);
  13. int i = l;
  14. int j = mid + 1;
  15. int k = l;
  16. while (i <= mid && j <= r) {
  17. if (v1[i] <= v1[j]) v2[k++] = v1[i++];
  18. else {
  19. ans += mid - i + 1;
  20. v2[k++] = v1[j++];
  21. }
  22. }
  23. while (i <= mid) v2[k++] = v1[i++];
  24. while (j <= r) v2[k++] = v1[j++];
  25. for (int i = l; i <= r; i++) v1[i] = v2[i];
  26. }
  27. int main() {
  28. int n, t;
  29. cin >> n;
  30. for (int i = 1; i <= n; i++) {
  31. cin >> t;
  32. v1[i] = t;
  33. }
  34. msort(1, n);
  35. cout << ans;
  36. return 0;
  37. }

M - 排队接水

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <iomanip>
  4. using namespace std;
  5. const int MAXN = 2e3 + 1;
  6. double sum = 0.0;
  7. int n = 0;
  8. struct NODE {
  9. double time;
  10. int pos;
  11. }man[MAXN];
  12. int cmp(struct NODE a, struct NODE b) { return a.time < b.time; }
  13. double acc(int i) {
  14. if (i == 1) return 0.0;
  15. else return acc(i - 1) + man[i-1].time;
  16. }
  17. int main() {
  18. double t;
  19. cin >> n;
  20. for (int i = 1; i <= n; i++) {
  21. cin >> t;
  22. man[i].time = t;
  23. man[i].pos = i;
  24. }
  25. sort(man + 1, man + 1 + n,cmp);
  26. for (int i = 1; i <= n; i++) {
  27. cout << man[i].pos << ' ';
  28. sum += acc(i);
  29. }
  30. cout << endl;
  31. cout << fixed << setprecision(2) << sum / n * 1.0;
  32. return 0;
  33. }
  • 累计求sum的方法不如解答中的好,用个屁的递归