|
发表于 2022-5-31 21:07:58
|
显示全部楼层
本楼为最佳答案
 - #include <stdio.h>
- int bloom(int f, int m) {
- // f: 花, m: 月份
- switch (f)
- {
- case 1:
- return m >= 1 && m <= 3;
- case 2:
- return m >= 3 && m <= 4;
- case 3:
- return m >= 4 && m <= 5;
- case 4:
- return m >= 9 && m <= 10;
- }
- return 0;
- }
- void foo(int* a, int* b) {
- int t;
- if ((*a) > (*b)) {
- t = (*a);
- (*a) = (*b);
- (*b) = t;
- }
- }
- int main(void) {
- int n, p, q, m, x, u, v;
- scanf("%d", &n);
- int P[n + 1];
- P[0] = 0;
- for (int i = 1; i <= n; ++i) {
- scanf("%d", &P[i]);
- }
- scanf("%d%d", &p, &q);
- foo(&p, &q); // 确保 p < q
- scanf("%d", &m);
- int res[m];
- for (int test = 0, sum, max; test < m; ++test) {
- sum = 0;
- max = 0;
- scanf("%d%d%d", &x, &u, &v);
- foo(&u, &v);
- // 状况1
- for (int i = u; i != v; ++i) {
- if (i > n) i = 1;
- if (i == v) {
- sum += bloom(P[i], x);
- break;
- }
- sum += bloom(P[i], x);
- }
- max = max > sum ? max : sum;
- sum = 0;
- // 状况2
- for (int i = u; ; --i) {
- if (i < 1) i = n;
- if (i == v) {
- sum += bloom(P[i], x);
- break;
- }
- sum += bloom(P[i], x);
- }
- max = max > sum ? max : sum;
- sum = 0;
- // 状况3
- if (u != p && v != q) {
- for (int i = u, move = 1; i != v; i += move) {
- if (i > n) i = 1;
- if (i < 1) i = n;
- if (i == v) {
- sum += bloom(P[i], x);
- break;
- }
- sum += bloom(P[i], x);
- if (i == p) {
- i = q;
- sum += bloom(P[i], x);
- move = -move;
- }
- else if (i == q) {
- i = p;
- sum += bloom(P[i], x);
- move = -move;
- }
- }
- max = max > sum ? max : sum;
- sum = 0;
- // 状况4
- for (int i = u, move = -1; i != v; i += move) {
- if (i > n) i = 1;
- if (i < 1) i = n;
- if (i == v) {
- sum += bloom(P[i], x);
- break;
- }
- sum += bloom(P[i], x);
- if (i == p) {
- i = q;
- sum += bloom(P[i], x);
- move = -move;
- }
- else if (i == q) {
- i = p;
- sum += bloom(P[i], x);
- move = -move;
- }
- }
- max = max > sum ? max : sum;
- sum = 0;
- }
- res[test] = max;
- }
- for (int i = 0; i < m; ++i) {
- res[i] ? printf("%d\n", res[i]) : printf("So Sad\n");
- }
- return 0;
- }
复制代码- 10
- 1 1 2 4 3 2 4 4 3 3
- 3 9
- 5
- 1 1 5
- 1 3 9
- 3 5 10
- 7 1 10
- 10 2 9
- 2
- 2
- 4
- So Sad
- 3
复制代码 |
|