2024新一卷压轴

2024年新高考一卷压轴题。

数学解

这道题颇有线性Dp的思想,通过构造递推式求解。

对于无论是case 2还是case 3,S(m-1) 都不是解的所有情况,因为我们只是特殊地选取了一种分法,所以最后递推式一定要取 ”$\geq$“ 。

解答中提到case 1恰好只有 2 种选法,没有给出证明,但是是经过代码验证的,大概率是正确的。(当然不影响以下证明的完备性,因为取 ”$\geq$“ )

代码分析

接下来,让我们用代码跑一跑S(m)实际值的结果。(dfs暴搜,效率比较低,跑到 m=13

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
#include<bits/stdc++.h>
using namespace std;

bool dfs(vector<int>& v, int m) {
int flag = 0;

for (int k = 1; k <= 4 * m + 2; k++) {
if (v[k]) {
flag = k;
break;
}
}

if (!flag) return 1;

for (int delta = 1; flag + 3 * delta <= 4 * m + 2; delta++) {
if (v[flag] & v[flag + delta] & v[flag + 2 * delta] & v[flag + 3 * delta]) {
v[flag] = v[flag + delta] = v[flag + 2 * delta] = v[flag + 3 * delta] = 0;
if (dfs(v, m)) return 1;
v[flag] = v[flag + delta] = v[flag + 2 * delta] = v[flag + 3 * delta] = 1;
}
}
return 0;
}

bool check(int i, int j, int m) {
vector<int> v(4 * m + 3, 1);
v[i] = v[j] = 0;
return dfs(v, m);
}

void solve(int m) {
int cnt = 0;
for (int i = 1; i <= 4 * m + 1; i++) {
for (int j = i + 1; j <= 4 * m + 2; j++) {
cnt += check(i, j, m);
}
}
printf("m = %2d : cnt = %3d, m^2 + m + 1 = %3d, m^2 + 2m + 1 = %3d\n",
m, cnt, m * m + m + 1, m * m + 2 * m + 1);
}

int main() {
for (int m = 2; m <= 13; m++) {
solve(m);
}
return 0;
}

对每一个 $m$ 同时计算了 $m^2+m+1$ 和 $(m+1)^2$ 的值。因为发现 cnt 似乎总在这两个值之间,而且在$m\geq9$之后cnt就稳定在$(m+1)^2$了,也许是S(m)的上确界。运行结果:

UPD 6/11

有幸看到了一个视频,验证了我先前根据程序结果作出的猜想。视频链接:命题人可能都没找到的构造!?24高考数学压轴精确结果

得出的最终结果是:$S(m) = (m+1)^2-F(m)$
其中$F(m) = m(m\leq5)$,$F(6)=4$,$F(7)=2$,$F(m)=0(m\geq8)$