Loading... # abc437 ## 题面 ### A - 英尺 分值:100 分 #### 题目描述 1 英尺等于 12 英寸。 请问 A 英尺 B 英寸换算成英寸是多少英寸? #### 约束条件 1. $1 \leq A \leq 8$ 2. $0 \leq B \leq 11$ 3. 所有输入值均为整数 #### 输入格式 输入通过标准输入按以下格式给出: ``` A B ``` #### 输出格式 将答案输出在一行中。省略单位(英寸)进行输出。 #### 输入样例 1 ``` 6 7 ``` #### 输出样例 1 ``` 79 ``` 6 英尺 7 英寸换算成英寸为 $6 \times 12 + 7 = 79$ 英寸。 #### 输入样例 2 ``` 4 11 ``` #### 输出样例 2 ``` 59 ``` 4 英尺 11 英寸换算成英寸为 $4 \times 12 + 11 = 59$ 英寸。 #### 输入样例 3 ``` 8 0 ``` #### 输出样例 3 ``` 96 ``` 8 英尺 0 英寸换算成英寸为 $8 \times 12 + 0 = 96$ 英寸。 --- ### **B - 幸运抽奖** #### **题目描述** 有一个 $H$ 行 $W$ 列的网格。每个格子中写着一个整数,所有整数互不相同。从上到下第 $i$ 行、从左到右第 $j$ 列的格子中写有整数 $A_{i,j}$。 现在,主持人喊出了 $N$ 个互不相同的整数 $B_1, \dots, B_N$。 对于每一行,计算出主持人喊出的整数中,有多少个出现在该行中。这些数量的最大值是多少? #### **约束条件** $1 \leq H \leq 3$ $1 \leq W \leq 5$ $1 \leq N \leq 90$ $1 \leq A_{i,j} \leq 90$ $A_{i,j}$ 互不相同 $1 \leq B_i \leq 90$ $B_i$ 互不相同 所有输入值均为整数 #### **输入格式** 输入通过标准输入给出,格式如下: ``` H W N A_{1,1} ... A_{1,W} ... A_{H,1} ... A_{H,W} B_1 ... B_N ``` #### **输出格式** 输出一行,包含答案。 #### **输入样例 1** ``` 3 4 5 12 3 5 7 6 10 11 9 1 2 4 8 2 4 9 6 11 ``` #### **输出样例 1** ``` 3 ``` #### **输入样例 2** ``` 3 5 2 81 63 31 16 15 30 3 6 54 24 26 41 48 64 66 44 79 ``` #### **输出样例 2** ``` 0 ``` #### **输入样例 3** ``` 3 5 12 78 19 70 58 83 12 30 80 20 27 48 71 8 43 82 82 30 43 8 80 70 20 78 12 71 19 48 ``` #### **输出样例 3** ``` 5 ``` --- ### **C - 驯鹿与雪橇 2** #### **题目描述** 有 $N$ 头驯鹿和 1 架雪橇。第 $i$ 头驯鹿的体重为 $W_i$,力量为 $P_i$。 对于每头驯鹿,需要选择是让它“拉雪橇”还是“乘坐雪橇”。 但是,拉雪橇的驯鹿的力量总和必须大于等于乘坐雪橇的驯鹿的体重总和。 最多可以让多少头驯鹿乘坐雪橇? 给定 $T$ 个测试用例。请分别回答每个用例。 #### **约束条件** $1 \leq T \leq 10^5$ $1 \leq N \leq 3 \times 10^5$ $1 \leq W_i, P_i \leq 10^9$ 所有输入值均为整数。 单个输入文件中所有 $N$ 的总和不超过 $3 \times 10^5$。 #### **输入格式** 输入通过标准输入给出,格式如下: ``` T case_1 case_2 ⋮ case_T ``` 每个测试用例的格式如下: ``` N W_1 P_1 W_2 P_2 ⋮ W_N P_N ``` #### **输出格式** 输出 $T$ 行。第 $i$ 行输出第 $i$ 个测试用例的答案。 #### **输入样例 1** ``` 3 3 3 1 4 1 5 9 5 1000000000 1 1000000000 1 1000000000 1 1000000000 1 1000000000 1 10 133180711 458704923 531424946 225863856 141986070 637075158 500770732 289806469 502866767 408857335 559714289 569084545 287444582 992432993 559747907 753133304 432846188 949871298 727072164 756020367 ``` #### **输出样例 1** ``` 2 0 6 ``` --- ### **D - 差之和** #### **题目描述** 给定一个长度为 $N$ 的正整数序列 $A = (A_1, A_2, \dots, A_N)$ 和一个长度为 $M$ 的正整数序列 $B = (B_1, B_2, \dots, B_M)$。 求 $\displaystyle \sum_{i=1}^{N} \sum_{j=1}^{M} |A_i - B_j|$ 的值,并对 $998244353$ 取模。 #### **约束条件** $1 \leq N, M \leq 3 \times 10^5$ $1 \leq A_i, B_j < 998244353$ 所有输入值均为整数。 #### **输入格式** 输入通过标准输入给出,格式如下: ``` N M A_1 A_2 ... A_N B_1 B_2 ... B_M ``` #### **输出格式** 输出一行,包含答案。 #### **输入样例 1** ``` 4 2 1 6 9 2 3 1 ``` #### **输出样例 1** ``` 26 ``` #### **输入样例 2** ``` 8 8 185991676 311812083 311812083 84357963 185991676 185991676 724020528 369175631 455049197 387671868 4361724 724020528 724020528 455049197 455049197 724020528 ``` #### **输出样例 2** ``` 529117255 ``` --- ### **E - 对数组排序** #### **题目描述** 有 $N+1$ 个序列 $A_0, A_1, \dots, A_N$。$A_i$ 定义如下: . $A_0$ 是一个空序列。 . $A_i$ $(1 \le i \le N)$ 是在序列 $A_{x_i}$ $(0 \le x_i < i)$ 的末尾添加整数 $y_i$ 后得到的序列。 找出满足以下条件的排列 $P = (P_1, P_2, \dots, P_N)$(即 $(1, 2, \dots, N)$ 的一个排列): . 对于 $i = 1, 2, \dots, N-1$,满足以下条件之一: . $A_{P_i}$ 在字典序上小于 $A_{P_{i+1}}$。 . $A_{P_i} = A_{P_{i+1}}$ 且 $P_i < P_{i+1}$。 换句话说,当将 $A_1, A_2, \dots, A_N$ 按字典序排列(当有多个相同的序列时,索引较小的在前)时,$P$ 就是该排列中出现的索引序列。 #### **约束条件** $1 \leq N \leq 3 \times 10^5$ $0 \leq x_i < i$ $1 \leq y_i \leq 10^9$ 所有输入值均为整数。 #### **输入格式** 输入通过标准输入给出,格式如下: ``` N x_1 y_1 x_2 y_2 ⋮ x_N y_N ``` #### **输出格式** 在一行中输出 $P_1, P_2, \dots, P_N$,用空格分隔。 #### **输入样例 1** ``` 4 0 2 0 1 2 2 0 1 ``` #### **输出样例 1** ``` 2 4 3 1 ``` 解释: $A_1 = (2), A_2 = (1), A_3 = (1, 2), A_4 = (1)$,所以 $P = (2, 4, 3, 1)$。 #### **输入样例 2** ``` 5 0 1 0 1 0 1 0 1 0 1 ``` #### **输出样例 2** ``` 1 2 3 4 5 ``` #### **输入样例 3** ``` 10 0 305186313 1 915059758 0 105282054 1 696409999 3 185928366 3 573289179 6 254538849 3 105282054 5 696409999 8 168629803 ``` #### **输出样例 3** ``` 3 8 10 5 9 6 7 1 4 2 ``` --- ### **F - 曼哈顿圣诞树 2** #### **题目描述** 在二维平面上有 $N$ 棵圣诞树。第 $i$ 棵($1 \leq i \leq N$)圣诞树位于坐标 $(X_i, Y_i)$。 给你 $Q$ 个查询。请按顺序处理这些查询。每个查询是以下两种类型之一: **类型 1**:以 `1 i x y` 的形式给出。将第 $i$ 棵圣诞树的坐标改为 $(x, y)$。 **类型 2**:以 `2 L R x y` 的形式给出。输出从坐标 $(x, y)$ 到第 $L, L+1, \dots, R$ 棵圣诞树中**最远**的圣诞树的曼哈顿距离。 这里,坐标 $(x_1, y_1)$ 和 $(x_2, y_2)$ 之间的曼哈顿距离定义为 $|x_1 - x_2| + |y_1 - y_2|$。 #### **约束条件** $1 \leq N, Q \leq 2 \times 10^5$ $-10^9 \leq X_i, Y_i \leq 10^9$ $1 \leq i \leq N$ $1 \leq L \leq R \leq N$ $-10^9 \leq x, y \leq 10^9$ 所有输入值均为整数。 #### **输入格式** 输入通过标准输入给出,格式如下: ``` N Q X_1 Y_1 X_2 Y_2 ⋮ X_N Y_N query_1 query_2 ⋮ query_Q ``` 其中,第 $i$ 个查询 `query_i` 以下列两种格式之一给出: ``` 1 i x y 2 L R x y ``` #### **输出格式** 根据问题描述中的说明,输出查询的答案,每个答案占一行。 #### **输入样例 1** ``` 3 4 -1 -1 1 2 -2 1 2 1 2 0 0 2 1 3 -1 2 1 1 0 1 2 1 3 -1 2 ``` #### **输出样例 1** ``` 3 3 2 ``` 解释: 最初,第 1、2、3 棵圣诞树分别位于坐标 $(-1, -1)$、$(1, 2)$、$(-2, 1)$。 处理每个查询: 1. 从第 1、2 棵圣诞树到坐标 $(0, 0)$ 的曼哈顿距离分别为 $2$ 和 $3$。因此输出 $3$,即 $2, 3$ 中的最大值。 2. 从第 1、2、3 棵圣诞树到坐标 $(-1, 2)$ 的曼哈顿距离分别为 $3$、$2$、$2$。因此输出 $3$,即 $3, 2, 2$ 中的最大值。 3. 将第 1 棵圣诞树的坐标改为 $(0, 1)$。第 1、2、3 棵圣诞树的坐标变为 $(0, 1)$、$(1, 2)$、$(-2, 1)$。 4. 从第 1、2、3 棵圣诞树到坐标 $(-1, 2)$ 的曼哈顿距离分别为 $2$、$2$、$2$。因此输出 $2$,即 $2, 2, 2$ 中的最大值。 #### **输入样例 2** ``` 5 7 -9 5 -2 -9 10 -6 9 8 2 9 1 3 -9 -6 2 3 4 2 7 1 4 -2 -10 2 1 2 0 -10 2 3 4 10 -9 2 3 4 8 7 2 5 5 0 2 ``` #### **输出样例 2** ``` 24 24 22 30 9 ``` --- ### **G - 彩色圣诞树** #### **题目描述** 今年的圣诞节季节已经结束,终于到了新年的时刻。高桥正在忙着进行大扫除,要收起圣诞树。 有一棵用三种颜色(红色、蓝色、绿色)装饰的灯泡装饰的圣诞树。圣诞树上有 $N$ 个灯泡,它们由 $N-1$ 条丝带连接。将灯泡视为顶点,丝带视为边,这个图是一棵树。 灯泡编号从 $1$ 到 $N$,丝带编号从 $1$ 到 $N-1$。丝带 $i$ 连接灯泡 $u_i$ 和 $v_i$。灯泡 $i$ 初始亮着红色(如果 $c_i$ 是 `R`),绿色(如果 $c_i$ 是 `G`),或蓝色(如果 $c_i$ 是 `B`)。 高桥正在考虑执行以下操作 $N-1$ 次来移除所有丝带: 1. 从尚未移除的丝带中选择一条,其两端的灯泡颜色不同,然后移除该丝带。 2. 设 $u$ 和 $v$ 是被移除丝带两端的灯泡。对于每个灯泡 $u$ 和 $v$,根据以下规则改变它们亮的颜色: - 如果之前亮红色,则改为亮绿色。 - 如果之前亮绿色,则改为亮蓝色。 - 如果之前亮蓝色,则改为亮红色。 确定高桥是否可以通过重复此操作来移除所有丝带。如果可能,输出一种方法。 给定 $T$ 个测试用例。请解决每个测试用例。 #### **约束条件** $1 \leq T \leq 20000$ $2 \leq N \leq 2000$ $c_i$ 是 `R`、`G` 或 `B`。 $1 \leq u_i, v_i \leq N$ 将灯泡视为顶点,丝带视为边,给定的图是一棵树。 $T, N, u_i, v_i$ 是整数。 单个输入文件中所有 $N^2$ 的总和不超过 $2000^2$。 #### **输入格式** 输入通过标准输入给出,格式如下: ``` T case_1 case_2 ⋮ case_T ``` 每个测试用例的格式如下: ``` N c_1 c_2 ... c_N u_1 v_1 u_2 v_2 ⋮ u_{N-1} v_{N-1} ``` #### **输出格式** 按顺序输出 `case_1, case_2, ..., case_T` 的答案,格式如下: 如果无法移除所有丝带,输出 `No`。 如果可能,设 $e_i$ 为第 $i$ 次操作移除的丝带编号,输出: ``` Yes e_1 e_2 ... e_{N-1} ``` 其中 $(e_1, e_2, \dots, e_{N-1})$ 必须是 $(1, 2, \dots, N-1)$ 的一个排列。 如果有多个解,任意一个都将被视为正确。 #### **输入样例 1** ``` 3 4 GBBR 1 2 1 3 1 4 3 RRR 1 2 2 3 5 RGBRG 1 2 2 3 3 4 3 5 ``` #### **输出样例 1** ``` Yes 1 3 2 No Yes 1 4 2 3 ``` 解释: 对于第一个测试用例,例如,可以通过以下操作移除所有丝带: 1. 初始时,灯泡颜色依次(从灯泡 1 开始)为绿色、蓝色、蓝色、红色。 2. 移除丝带 1。移除后,灯泡颜色依次为蓝色、红色、蓝色、红色。 3. 移除丝带 3。移除后,灯泡颜色依次为红色、红色、蓝色、绿色。 4. 移除丝带 2。移除后,灯泡颜色依次为绿色、红色、红色、绿色。 满足条件的 $(e_1, e_2, e_3)$ 是 $(1, 3, 2)$ 和 $(2, 3, 1)$,任意一个都将被视为正确。 对于第二个测试用例,无论你如何操作,都无法移除所有丝带。 ## 反思 ### A **本题是一道签到题** 根据题意可知: $$ \text{总英寸数} = A \times 12 + B $$ 由于题目的数据范围过小,可直接使用**顺序结构求解** 以下是我赛场时的代码 ```cpp #include <bits/stdc++.h> using namespace std; int a,b; int main(){ cin>>a>>b; cout<<a*12+b; } ``` --- ### B 题目的意思就是:题目要求计算每一行中主持人喊出的整数出现的个数,并输出这些个数的最大值 由于数据范围过小,可直接使用数组存储,不需要使用任何数据优化方案 思路: 1. 读入 $H,W,N$ 2. 用二维数组 $A$ 存储矩阵 3. 用一个大小为 $91$ (∵ $1 \leq B_i \leq 90$)的布尔数组 `isB` 标记 $B$ 中的数 4. 对每一行遍历,统计这一行中有多少个数在 `isB` 中被标记为 `true` 5. 记录这些统计数的最大值并输出 以下是我赛时的代码: ```cpp #include <bits/stdc++.h> using namespace std; int H,W,N,i,j,b,cnt,ma,a[5][6],fl[91]; int main(){ cin>>H>>W>>N; for(i=0;i<H;i++) for(j=0;j<W;j++) cin>>a[i][j]; for(i=0;i<N;i++){ cin>>b;fl[b]=1; } for(i=0;i<H;i++){ cnt=0; for(j=0;j<W;j++) if(fl[a[i][j]]) cnt++; if(cnt>ma) ma=cnt; } cout<<ma; } ``` 根据题目思路就可以得出代码,~~非常 Easy~~ ### C **这题我在赛时并没有得出正确程序** 赛后,我邀请 deepseek 完成此题,我将对 deepseek 的内容进行阐述 > 算法:贪心 > 题目阐述:有 \(N\) 头驯鹿,每头驯鹿有体重 \(W_i\) 和力量 \(P_i\)。选择一部分驯鹿“乘坐雪橇”,剩下的“拉雪橇”。要求“拉雪橇”的驯鹿的力量总和 ≥ “乘坐雪橇”的驯鹿的体重总和。问最多可以让多少头驯鹿乘坐雪橇 > 问题转化为:在不超过总力量 \(S\) 的前提下,最多能选择多少头驯鹿,使得它们的 \(W_i + P_i\) 之和不超过 \(S\)。这是一个典型的贪心问题:按 \(W_i + P_i\) 从小到大选择,直到总和超过 \(S\) > 对每个测试用例: > > 1. 读入 \(N\) 和每头驯鹿的 \(W_i, P_i\) > 2. 计算总力量 \(S = \sum P_i\) > 3. 计算每头驯鹿的 \(a_i = W_i + P_i\),并排序 > 4. 从小到大累加 \(a_i\),直到总和超过 \(S\),累加的个数即为答案 > 时间复杂度:$O(N \operatorname{log} N)$ 这是 deepseek 给出的代码: ```cpp #include<iostream> #include<algorithm> using namespace std; int T,N,i,cnt; long long totalP,sum,W,P; long long a[100005]; int main(){ cin>>T; while(T--){ cin>>N; totalP=0; for(i=0;i<N;i++){ cin>>W>>P; a[i]=W+P; totalP+=P; } sort(a,a+N); sum=0; cnt=0; for(i=0;i<N;i++){ if(sum+a[i]<=totalP){ sum+=a[i]; cnt++; }else{ break; } } cout<<cnt<<endl; } return 0; } ``` 最后修改:2025 年 12 月 21 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏