-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontent.json
1 lines (1 loc) · 262 KB
/
content.json
1
{"meta":{"title":"孤星捧月堂","subtitle":"Sheauhaw Jang's Blog","description":"一个 ICPCer 的学习笔记","author":"Sheauhaw Jang","url":"https://SheauhawJang.github.io","root":"/"},"pages":[{"title":"","date":"2024-09-23T14:58:30.941Z","updated":"2020-08-14T11:52:12.000Z","comments":false,"path":"categories/index.html","permalink":"https://sheauhawjang.github.io/categories/index.html","excerpt":"","text":""},{"title":"","date":"2024-09-23T14:58:30.942Z","updated":"2020-08-15T14:26:12.000Z","comments":false,"path":"links/index.html","permalink":"https://sheauhawjang.github.io/links/index.html","excerpt":"","text":""},{"title":"","date":"2024-09-23T14:58:31.042Z","updated":"2020-08-14T11:51:58.000Z","comments":false,"path":"tags/index.html","permalink":"https://sheauhawjang.github.io/tags/index.html","excerpt":"","text":""}],"posts":[{"title":"2022 ICPC Asia EC 网络赛第一场 J 题题解","slug":"2022 ICPC Online (I) J","date":"2024-09-26T16:21:27.000Z","updated":"2025-01-28T18:35:45.000Z","comments":true,"path":"2024/09/27/2022 ICPC Online (I) J/","link":"","permalink":"https://sheauhawjang.github.io/2024/09/27/2022%20ICPC%20Online%20(I)%20J/","excerpt":"题目来源: 2022 ICPC Asia EC 网络赛第一场: J. Gachapon 比赛链接: https://pintia.cn/market/item/1571156622976593920 题面 考虑抽卡操作: 若第 \\(1\\) 次操作至第 \\(i-1\\) 次操作都为操作失败, 则第 \\(i\\) 次操作成功的概率为 \\(p_i\\), 成功后停止操作, 否则进行第 \\(i+1\\) 次操作. 现给定正整数 \\(X,Y\\), 构造数列 \\(\\{p_i\\}\\) 满足下述条件: 第 \\(X\\) 次操作一定成功. 即 \\(p_X=1\\). 第 \\(1\\) 次至第 \\(X-1\\) 次操作都不能保证一定成功. 即 \\(\\forall i\\in[1,X), p_i<1\\). 任何操作都不能不可能成功. 即 \\(\\forall i, p_i>0\\). 期望上是第 \\(Y\\) 次抽卡成功. 数据范围 \\[ 1<Y<X\\le100 \\] 输出格式 \\(\\forall i\\), \\(p_i\\) 需为 \\([0,1]\\) 中的有理数. 设 \\(p_i=a_i/b_i\\), 其中 \\(a_i,b_i\\) 为正整数且 \\(\\gcd(a_i,b_i)=1\\), 则 \\(a_i,b_i\\) 需满足: \\[ 0\\le a_i,b_i\\le10^4 \\] 输出 \\((a_i,b_i)\\) 表示 \\(p_i\\).","text":"题目来源: 2022 ICPC Asia EC 网络赛第一场: J. Gachapon 比赛链接: https://pintia.cn/market/item/1571156622976593920 题面 考虑抽卡操作: 若第 \\(1\\) 次操作至第 \\(i-1\\) 次操作都为操作失败, 则第 \\(i\\) 次操作成功的概率为 \\(p_i\\), 成功后停止操作, 否则进行第 \\(i+1\\) 次操作. 现给定正整数 \\(X,Y\\), 构造数列 \\(\\{p_i\\}\\) 满足下述条件: 第 \\(X\\) 次操作一定成功. 即 \\(p_X=1\\). 第 \\(1\\) 次至第 \\(X-1\\) 次操作都不能保证一定成功. 即 \\(\\forall i\\in[1,X), p_i<1\\). 任何操作都不能不可能成功. 即 \\(\\forall i, p_i>0\\). 期望上是第 \\(Y\\) 次抽卡成功. 数据范围 \\[ 1<Y<X\\le100 \\] 输出格式 \\(\\forall i\\), \\(p_i\\) 需为 \\([0,1]\\) 中的有理数. 设 \\(p_i=a_i/b_i\\), 其中 \\(a_i,b_i\\) 为正整数且 \\(\\gcd(a_i,b_i)=1\\), 则 \\(a_i,b_i\\) 需满足: \\[ 0\\le a_i,b_i\\le10^4 \\] 输出 \\((a_i,b_i)\\) 表示 \\(p_i\\). 题解 由题意, 在第 \\(i\\) 次成功的概率为 \\[ P_i=p_i\\prod_{k=1}^{i-1}(1-p_k) \\] 记期望上的抽卡成功次数为 \\(E\\), 由数学期望的定义可知 \\[ E=\\sum_{i}iP_i \\] 现记 \\(q_i:=1-p_i\\), \\[ Q_i:=\\prod_{k=1}^{i-1}q_k=\\prod_{k=1}^{i-1}(1-p_k) \\] 若读者没有耐心阅读下段证明, 可以直接从这里跳至 (1) 式. 则有: \\[ E=\\sum_iiP_i=\\sum_iip_iQ_i=\\sum_i\\sum_{s=1}^ip_iQ_i=\\sum_s\\sum_{i\\ge s}p_iQ_i \\] 记 \\[ I_s:=\\sum_{i=s}^\\infty p_i\\prod_{j=s}^{i-1}q_j=\\sum_{i=s}^\\infty p_i\\frac{Q_i}{Q_s}=\\frac1{Q_s}\\sum_{i=s}^\\infty p_iQ_i \\] 则有: \\[ E=\\sum_s\\sum_{i\\ge s}p_iQ_i=\\sum_sQ_sI_s \\] 由于 \\(I_s\\) 是级数, 记其前 \\(t\\) 项和为 \\[ \\begin{aligned} I_{s,t}:=\\sum_{i=s}^tp_i\\prod_{j=s}^{i-1}q_j &=\\sum_{i=s}^tp_i\\prod_{j=s}^{i-1}q_j+\\prod_{j=s}^tq_j-\\prod_{j=s}^tq_j \\end{aligned} \\] 由于对于任意 \\(k\\ge s\\), 都有 \\[ \\begin{aligned} J_{s,k}:=&\\sum_{i=s}^kp_i\\prod_{j=s}^{i-1}q_j+\\prod_{j=s}^kq_j\\\\ =&\\sum_{i=s}^{k-1}p_i\\prod_{j=s}^{i-1}q_j+p_k\\prod_{j=s}^{k-1}q_j+q_k\\prod_{j=s}^{k-1}q_j\\\\ =&\\sum_{i=s}^{k-1}p_i\\prod_{j=s}^{i-1}q_j+(p_k+q_k)\\prod_{j=s}^{k-1}q_j\\\\ =&\\sum_{i=s}^{k-1}p_i\\prod_{j=s}^{i-1}q_j+\\prod_{j=s}^{k-1}q_j=J_{s,k-1} \\end{aligned} \\] 故 \\(J_{s,t}=J_{s,s}=1\\). 则 \\[ \\begin{aligned} I_{s,t}=\\sum_{i=s}^tp_i\\prod_{j=s}^{i-1}q_j+\\prod_{j=s}^tq_j-\\prod_{j=s}^tq_j=J_{s,t}-\\prod_{j=s}^tq_j=1-\\frac{Q_{t+1}}{Q_s} \\end{aligned} \\] 故 \\[ \\newcommand{\\brac}[1]{\\left( #1 \\right)} \\newcommand{\\abs}[1]{\\left| #1 \\right|} I_s=\\lim_{t\\rightarrow\\infty}I_{s,t}=\\lim_{t\\rightarrow\\infty}\\brac{1-\\frac{Q_{t+1}}{Q_s}}=1-\\frac{Q_\\infty}{Q_s} \\] 若 \\(Q_\\infty=0\\), 则 \\(I_s=1\\). 一般情况下, 即使 \\(Q_\\infty\\) 中连乘中的各项 \\(q_i\\) 都有 \\(0< q_i\\le1\\), 也不能保证 \\(Q_\\infty=0\\), 因为 \\[ Q_\\infty=\\exp\\brac{-\\sum\\abs{\\ln q_i}} \\] 而通过巧妙的构造可以使 \\(\\sum\\abs{\\ln q_i}\\) 收敛, 从而 \\(Q_\\infty>0\\). 然而, 由限制条件 1 可知 \\(p_X=1\\) 从而 \\(q_X=0\\), 故 \\(\\forall n>X, Q_n=0\\), 从而 \\(Q_\\infty=0\\). 故 \\(I_s=1\\). 故本题有重要结论: \\[ E=\\sum_sQ_s\\tag1 \\] 关于该结论, 比较直观的理解为: \\(Q_s\\) 为需要执行第 \\(s\\) 次抽卡操作的概率, 而无论该次抽卡操作结果如何, 都是进行了 \\(1\\) 次操作, 其都会对期望恰好产生 \\(1\\) 次的贡献. 上述推导中求和号的交换顺序可以视为该思想的体现. 现只需构造 \\(\\{Q_i\\}\\) 使 \\(E=Y\\) 即可. 由于 \\[ p_i=1-q_i=1-\\frac{Q_{i+1}}{Q_i} \\] 故构造完成 \\(\\{Q_i\\}\\) 后可以直接得到 \\(\\{p_i\\}\\). 现给出一种构造方案: 令 \\(Q_i=x_i/C\\), 其中 \\(x_i,C\\) 为整数, 但不一定有 \\(\\gcd(x_i,C)=1\\). 则 \\(\\forall i>X\\), \\(x_i=0\\). 由于 \\(\\forall i\\in[1,X)\\), \\(p_i<1\\), \\(q_i>0\\), 故 \\(\\forall i\\in(1,X]\\), \\(Q_i>0\\), \\(x_i>0\\). 由于 \\(Q_1=1\\), 故 \\(x_1=C\\). 根据 \\((1)\\) 式有 \\[ \\sum_ix_i=C\\sum_iQ_i=CY\\tag2 \\] 且 \\[ p_i=1-\\frac{Q_{i+1}}{Q_i}=1-\\frac{x_{i+1}}{x_i}=\\frac{x_i-x_{i+1}}{x_i}\\tag3 \\] \\(\\forall i\\in[1,X)\\), 由于 \\(0<p_i<1\\), 故有 \\(x_i>x_{i+1}\\). 即: \\[ C=x_1>x_2>x_3>\\cdots>x_X>0=x_{X+1}\\tag4 \\] 考虑 \\(C\\) 的选取: 考虑 \\(CY\\) 的上界 \\[ CY=\\sum_{i=1}^X x_i\\le\\sum_{i=1}^X(C-i+1)=\\frac12{X(2C+1-X)} \\] 求解可得 \\[ C\\ge\\frac{X^2-X}{2(X-Y)}\\tag5 \\] 再考虑 \\(CY\\) 的下界 \\[ CY=\\sum_{i=1}^Xx_i\\ge C+\\sum_{i=2}^X(X-i+1)=C+\\frac12X(X-1) \\] 求解可得 \\[ C\\ge\\frac{X^2-X}{2(Y-1)}\\tag6 \\] 现考虑输出格式带来的范围: 对于 \\(C\\), 我们希望 \\(C\\) 在满足 \\((5)(6)\\) 式的同时还能满足 \\(C\\le 10^4\\). 由于 \\(X\\le100\\), \\(X-Y\\ge1\\), \\(Y-1\\ge1\\), 故不等式右侧有 \\[ \\frac{X^2-X}{2(X-Y)}\\le\\frac{100^2-100}2=4950 \\] \\[ \\frac{X^2-X}{2(Y-1)}\\le\\frac{100^2-100}2=4950 \\] 故无论何种情况, 均能选取一个 \\(C\\) 在满足 \\((5)(6)\\) 式的同时还能满足 \\(C\\le 10^4\\), 例如取 \\(C=10^4\\). 由于 \\(x_i\\le C\\). 故 \\(x_i-x_{i+1}\\le x_i\\le C\\), 而最终 \\(a_i, b_i\\) 的构造结果为: \\[ g_i=\\gcd(x_i-x_{i+1},x_i) \\] \\[ a_i=\\frac{x_i-x_{i+1}}{g_i}\\le x_i-x_{i+1}\\le C\\le10^4 \\] \\[ b_i=\\frac{x_i}{g_i}\\le x_i\\le C\\le10^4 \\] 构造结果满足所有题设. 代码实现 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152#include <bits/stdc++.h>using namespace std;int gcd(int a, int b){ return b ? gcd(b, a % b) : a;}int main(){ int x, y; cin >> x >> y; const int n = 10000; vector<int> uq(x); uq[0] = n; int sum = n; for (int i = 1; i < x; ++i) { uq[i] = x - i; sum += uq[i]; } int target = n * y; for (int i = 1; i < x; ++i) { int maxuq = uq[i - 1] - 1; int maxadd = maxuq - uq[i]; int taradd = target - sum; if (taradd > maxadd) { uq[i] = maxuq; sum += maxadd; } else { uq[i] += taradd; sum += taradd; break; } } for (int i = 0; i < x - 1; ++i) { int up = uq[i + 1]; int dp = uq[i]; up = dp - up; int gp = gcd(up, dp); up /= gp; dp /= gp; cout << up << \" \" << dp << \"\\n\"; } cout << \"1 1\"; return 0;}","categories":[{"name":"XCPC题解","slug":"XCPC题解","permalink":"https://sheauhawjang.github.io/categories/XCPC%E9%A2%98%E8%A7%A3/"}],"tags":[{"name":"构造","slug":"构造","permalink":"https://sheauhawjang.github.io/tags/%E6%9E%84%E9%80%A0/"},{"name":"网络赛","slug":"网络赛","permalink":"https://sheauhawjang.github.io/tags/%E7%BD%91%E7%BB%9C%E8%B5%9B/"},{"name":"概率论","slug":"概率论","permalink":"https://sheauhawjang.github.io/tags/%E6%A6%82%E7%8E%87%E8%AE%BA/"},{"name":"ICPC 2022","slug":"ICPC-2022","permalink":"https://sheauhawjang.github.io/tags/ICPC-2022/"}]},{"title":"お風呂の随想之二","slug":"Ofuro 2","date":"2024-09-25T11:02:14.000Z","updated":"2024-09-25T11:06:21.000Z","comments":true,"path":"2024/09/25/Ofuro 2/","link":"","permalink":"https://sheauhawjang.github.io/2024/09/25/Ofuro%202/","excerpt":"题面 现有 \\((3k+1)\\times(3k+2)\\) 大小的网格, 需要在每个网格中填写 \\(0,1,2\\) 中的一个数字, 使得网格中任意一行数字之和、任意一列数字之和均为 \\(3\\) 的倍数. 求网格中 \\(1\\) 的数量的最大值. 原题目 \\(k=668\\), 我们可以扩展至任意 \\(\\newcommand{\\mbb}{\\mathbb}k\\in\\mbb N\\).","text":"题面 现有 \\((3k+1)\\times(3k+2)\\) 大小的网格, 需要在每个网格中填写 \\(0,1,2\\) 中的一个数字, 使得网格中任意一行数字之和、任意一列数字之和均为 \\(3\\) 的倍数. 求网格中 \\(1\\) 的数量的最大值. 原题目 \\(k=668\\), 我们可以扩展至任意 \\(\\newcommand{\\mbb}{\\mathbb}k\\in\\mbb N\\). 题解 由于 \\(2\\equiv-1\\pmod3\\), 故图中的所有 \\(2\\) 和 \\(-1\\) 互换仍满足要求. 而对图中所有元素取相反数后仍满足要求. 故求图中 \\(1\\) 的数量的最大值等价于求图中 \\(2\\) 的数量的最大值. 对于图 \\(\\newcommand{\\mfk}{\\mathfrak}\\mfk D\\) 记图中数字之和为 \\(S(\\mfk D)\\). 图中 \\(2\\) 的数量为 \\(C(\\mfk D)\\). 记 \\(\\newcommand{\\bgf}{\\displaystyle}A:=\\bgf\\max_{\\mfk D} S(\\mfk D)\\), \\(\\bgf G:=\\max_{\\mfk D}C(\\mfk D)\\). \\(G\\) 即为所求. 对一列元素全填 \\(2\\), 此列的数字之和为 \\(2(3k+1)\\). 故一列的数字之和不超过 \\(2(3k+1)\\). 而一列的数字之和需为 \\(3\\) 的倍数, 故一列的数字之和不超过 \\(6k\\). 故 \\(A\\le 6k(3k+2)\\). 现考虑一行的数字之和. 一行的数字全填 \\(2\\), 此时的数字之和为 \\(2(3k+2)\\). 故一行的数字之和不超过 \\(2(3k+2)\\). 而一行的数字之和需为 \\(3\\) 的倍数, 故一行的数字之和不超过 \\(6k+3\\). 现在考虑任意一行的数字之和至少为 \\(6k\\) 的图, 称作均匀图. 均匀图只有以下两类行: 数字之和和为 \\(6k+3\\). 这一行有且仅有 \\(3k+1\\) 个 \\(2\\) 和 \\(1\\) 个 \\(1\\). (I 类行) 数字之和为 \\(6k\\). 这一行最多有 \\(3k\\) 个 \\(2\\). (II 类行) 由于 \\(A\\le 6k(3k+2)\\), 设图中有 \\(x\\) 个 I 类行, 则有不等式: \\[ (6k+3)x+6k(3k+1-x)\\le A\\le6k(3k+2) \\] 整理得: \\[ (6k+3)x-6kx\\le6k \\] 解得: \\[ x\\le2k \\] 若存在均匀图 \\(\\mfk B\\), 其有 \\(2k\\) 个 I 类行, 其他行为 II 类行, 则称 \\(\\mfk B\\) 为和最大图, 有: \\[ S(\\mfk B)=6k(3k+2) \\] \\[ C(\\mfk B)\\le2k(3k+1)+(k+1)3k=3k(3k+1)+2k\\tag1 \\] \\((1)\\) 式取等号的条件为, \\(\\mfk B\\) 中每个 II 类行都恰好有 \\(3k\\) 个 \\(2\\) 和 \\(2\\) 个 \\(0\\). 考虑 \\((1)\\) 式满足取等条件的和最大图 \\(\\mfk A\\), 称做和量最大图. 直觉上, 若和量最大图 \\(\\mfk A\\) 存在, 则 \\(C(\\mfk A)=G\\). 若 \\(\\mfk A\\) 存在, 则根据行的限制条件, \\(\\mfk A\\) 中有 \\(2(k+1)\\) 个 \\(0\\) 和 \\(2k\\) 个 \\(1\\), 其余位置全部为 \\(2\\). 再考虑 \\(\\mfk A\\) 的列的限制条件: 由于 \\(S(\\mfk A)=A\\), 故任意一列的和均为为 \\(6k\\), 则一列有两种情况: 有 \\(3k\\) 个 \\(2\\) 和 \\(1\\) 个 \\(0\\). (I 类列) 有 \\(3k-1\\) 个 \\(2\\) 和 \\(2\\) 个 \\(1\\). (II 类列) 根据行的限制, 可知 \\(0\\) 和 \\(1\\) 的数量对应 \\(2(k+1)\\) 个 I 类列和 \\(k\\) 个 II 类列. 由于 \\(2(k+1)+k=3k+2\\), 即 I 类列的数量和 II 类列的数量之和恰好等于图的列数, 行的限制和列的限制不矛盾, 可以构造出 \\(\\mfk A\\). 构造 \\(\\mfk A\\) 的方法为: \\(2k\\) 个 I 类行分为 \\(k\\) 对, 每对 I 类行的 \\(1\\) 放在同一个 II 类列; \\(k+1\\) 个 II 类行的 \\(2(k+1)\\) 个 \\(0\\) 放在 \\(2(k+1)\\) 个 I 类列即可. 一个 \\(\\mfk A\\) 的构造为: \\[ \\newcommand{\\pmat}[1]{\\begin{pmatrix} #1 \\end{pmatrix}}\\mfk A=\\pmat{ 1\\\\ 1\\\\ &1\\\\ &1\\\\ &&\\ddots\\\\ &&&1\\\\ &&&1\\\\ &&&&0&0\\\\ &&&&&&0&0\\\\ &&&&&&&&\\ddots\\\\ &&&&&&&&&0&0 } \\] 其中空白位置均为 \\(2\\). 由于和量最大图确实存在, 根据 \\((1)\\) 式有 \\(G\\ge C(\\mfk A)=3k(3k+1)+2k\\). 现在尝试证明 \\(C(\\mfk A)=G\\). 即对于任意一个不是和量最大图的图 \\(\\mfk D\\), \\(C(\\mfk D)\\le C(\\mfk A)\\). 若 \\(S(\\mfk D)<6k(3k+1)\\), 则 \\(C(\\mfk D)<S(\\mfk D)/2<C(\\mfk A)\\). 否则, 设 \\(S(\\mfk D)=6k(3k+1)+3s\\), 且 \\(\\mfk D\\) 中有 \\(x\\) 个行数字之和为奇数. 记第 \\(i\\) 行的数字之和为 \\(L(i)\\), 则有: \\[ \\newcommand{\\algn}[1]{\\begin{aligned} #1 \\end{aligned}}\\algn{6k(3k+1)+3s=S(\\mfk D)&=\\sum_{L(i)\\text{ is odd}}L(i)+\\sum_{L(i)\\text{ is even}}L(i)\\\\&\\le\\sum_{L(i)\\text{ is odd}}(6k+3)+\\sum_{L(i)\\text{ is even}}6k\\\\&=(6k+3)x+6k(3k+1-x)\\\\&=6k(3k+1)+3x} \\] 故 \\(s\\) 确定时, \\(x\\) 有下限: \\[ s\\le x \\] 而 \\(s\\) 的上限为: \\[ s=\\frac{S(\\mfk D)-6k(3k+1)}3\\le\\frac{A-6k(3k+1)}{2}=2k \\] 最后可得 \\[ \\algn{C(\\mfk D)&\\le\\sum_{L(i)\\text{ is odd}}\\frac{L(i)-1}2+\\sum_{L(i)\\text{ is even}}\\frac{L(i)}2\\\\ &=\\frac12\\sum_iL(i)-\\frac x2\\\\&=\\frac{S(\\mfk D)-x}2\\\\&=\\frac{6k(3k+1)+3s-x}2\\\\&\\le3k(3k+1)+s\\\\&\\le3k(3k+1)+2k=C(\\mfk A)} \\] 故可知结论: \\[ G=C(\\mfk A)=3k(3k+1)+2k \\]","categories":[{"name":"学习笔记","slug":"学习笔记","permalink":"https://sheauhawjang.github.io/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"数论","slug":"数论","permalink":"https://sheauhawjang.github.io/tags/%E6%95%B0%E8%AE%BA/"},{"name":"构造","slug":"构造","permalink":"https://sheauhawjang.github.io/tags/%E6%9E%84%E9%80%A0/"}]},{"title":"お風呂の随想之一","slug":"Ofuro 1","date":"2024-09-24T14:17:33.000Z","updated":"2024-09-25T11:02:06.000Z","comments":true,"path":"2024/09/24/Ofuro 1/","link":"","permalink":"https://sheauhawjang.github.io/2024/09/24/Ofuro%201/","excerpt":"题面 给定长度为 \\(n\\) 的序列 \\(A\\) 和 \\(B\\). 一次 \\(k\\)-区间轮换是指: 选择 \\(A\\) 中一个长度为 \\(k\\) 的子区间, 将区间内的数字进行轮换. 求最大的 \\(k\\le n\\), 满足: 对 \\(A\\) 进行若干次 \\(k\\)-区间轮换后, 可以将 \\(A\\) 变为 \\(B\\). 若没有 \\(k\\) 满足条件, 输出 \\(-1\\). 数据范围 \\[ 1\\le n\\le 2\\times 10^5 \\]","text":"题面 给定长度为 \\(n\\) 的序列 \\(A\\) 和 \\(B\\). 一次 \\(k\\)-区间轮换是指: 选择 \\(A\\) 中一个长度为 \\(k\\) 的子区间, 将区间内的数字进行轮换. 求最大的 \\(k\\le n\\), 满足: 对 \\(A\\) 进行若干次 \\(k\\)-区间轮换后, 可以将 \\(A\\) 变为 \\(B\\). 若没有 \\(k\\) 满足条件, 输出 \\(-1\\). 数据范围 \\[ 1\\le n\\le 2\\times 10^5 \\] 题解 若序列 \\(A,B\\) 的元素不完全相同 (不记顺序), 则必然不存在满足题意的 \\(k\\). 若序列 \\(A,B\\) 的元素完全相同 (不记顺序), 则取 \\(k=2\\), 一定可以满足题意, 意即 \\(k\\) 必然存在. 考虑 \\(k\\) 可以取 \\(n\\) 的场景: 此时 \\(A\\) 本身经过若干次轮换可以得到 \\(B\\), 即 \\(A\\) 和 \\(B\\) 在循环序列意义下是相同的序列. 只需要使用 KMP 算法判断 \\(A\\) 是否为 \\(\\overline{BB}\\) 的子串即可. 复杂度为 \\(O(n)\\). 下面考虑 \\(k\\) 无法取到 \\(n\\), 即 \\(k<n\\) 的场景. 排列情形 为方便讨论轮换, 首先考虑 \\(A,B\\) 是 \\(1\\) 到 \\(n\\) 的排列的情形. \\(k\\) 可以取 \\(n-1\\) 的排列 考虑 \\(k\\) 何时可以取 \\(n-1\\): 此时, 我们只有两种 \\(k\\)-区间轮换: \\[ \\newcommand{\\pmat}[1]{\\begin{pmatrix} #1 \\end{pmatrix}} \\alpha:=\\pmat{ a_1&a_2&\\cdots&a_{n-1}&a_n\\\\ a_2&a_3&\\cdots&a_1&a_n } \\] \\[ \\beta:=\\pmat{ a_1&a_2&a_3&\\cdots&a_n\\\\ a_1&a_3&a_4&\\cdots&a_2 } \\] 现考虑我们可以通过若干次 \\(\\alpha,\\beta\\) 后可以得到的轮换. 首先, 我们可以通过如下操作得到一个长度为 \\(3\\) 的轮换 \\(\\tau\\): 任取 \\(i\\in(1,n)\\). 进行 \\(i-1\\) 次 \\(\\beta\\) 操作, 得到: \\[ \\beta^{i-1}=\\pmat{ a_1&a_2&a_3&\\cdots&a_{n-i+1}&a_{n-i+2}&\\cdots&a_{n-1}&a_n\\\\ a_1&a_{i+1}&a_{i+2}&\\cdots&a_n&a_2&\\cdots&a_{i-1}&a_i } \\] 再进行 \\(n-i\\) 次 \\(\\alpha\\) 操作, 得到: \\[ \\newcommand{\\algn}[1]{\\begin{aligned} #1 \\end{aligned}} \\algn{ \\tau_{i,1,n}:=\\alpha^{n-i}\\beta^{i-1}&= \\pmat{a_1&a_2&\\cdots&a_{i-1}&a_i&a_{i+1}&\\cdots&a_{n-1}&a_n\\\\a_n&a_2&\\cdots&a_{i-1}&a_1&a_{i+1}&\\cdots&a_{n-1}&a_i}\\\\ &=(a_i\\ a_1\\ a_n) } \\] 由于 \\(\\newcommand{\\mfk}{\\mathfrak}\\mfk A_n\\) 的一个生成元系为: \\[ \\newcommand{\\agle}[1]{\\left\\langle #1 \\right\\rangle}\\newcommand{\\brac}[1]{\\left( #1 \\right)}\\mfk A_n=\\agle{\\brac{1\\ 2\\ 3},(1\\ 2\\ 4),\\cdots,(1\\ 2\\ n)} \\] 故自然地, 我们猜想: 经过若干次 \\(\\tau\\) 操作后, 我们可以得到所有 \\(\\mfk A_n\\) 的元素. 为证明该命题, 只需证明任意两个对换的乘积均可以通过若干次 \\(\\tau\\) 操作得到即可. 证明可以采取构造法, 构造放在本文末尾, 此处暂不做证明. 若 \\(A, B\\) 的奇偶性相同, 则 \\(\\delta_{BA}:=BA^{-1}\\in\\mfk A_n\\). 将 \\(\\delta_{BA}\\) 作用于 \\(A\\) 即可得到 \\(B\\). \\(k=n-1\\) 满足条件. 若 \\(A,B\\) 的奇偶性不同, 则需要考虑 \\(\\alpha,\\beta\\) 的奇偶性. 因为 \\(\\alpha,\\beta\\) 是长度为 \\(n-1\\) 的轮换, 其可以表示为 \\(n-2\\) 个对换的乘积, 奇偶性与 \\(n\\) 的奇偶性相同. 则根据 \\(n\\) 的奇偶性讨论: 若 \\(n\\) 是偶数, 则 \\(\\alpha,\\beta\\) 均为偶变换. \\(A\\) 经过若干次偶变换后, 奇偶性不变, 无法得到 \\(B\\). 此时 \\(k\\) 无法取 \\(n-1\\). 若 \\(n\\) 是奇数, \\(\\alpha\\) 是奇变换. 令 \\(A'=\\alpha A\\), 则 \\(A'\\) 与 \\(B\\) 的奇偶性相同, \\(\\delta_{BA'}=BA'^{-1}\\in\\mfk A_n\\). 将 \\(\\delta_{BA'}\\alpha\\) 作用于 \\(A\\) 即可得到 \\(B\\), \\(k=n-1\\) 满足条件. \\(k\\) 不能取 \\(n-1\\) 的排列 考虑 \\(n\\) 是偶数且 \\(A,B\\) 奇偶性不同的情况下, \\(k\\) 能否取 \\(n-2\\). 设 \\(B[1]=A[i]\\), 则经过若干次 \\(k\\)-区间轮换 \\(\\delta_1\\), 可以得到 \\(A'=\\delta_1A\\), 满足 \\(A'[1]=A[i]=B[1]\\). 子序列 \\(A'[2:n],B[2:n]\\) 是两个长度为 \\(n-1\\) 的序列, 由于 \\(n-1\\) 是奇数, 故一定可以对 \\(A'[2:n]\\) 通过若干次 \\(k\\)-区间轮换 \\(\\delta_2\\) 得到 \\(B[2:n]\\). 此时, \\(B=\\delta_2\\delta_1A\\). \\(k=n-2\\) 满足条件. 一般序列情形 最后考虑回 \\(A,B\\) 是一般序列的情况. 每一组相同的数字里, 设置位置编号作为区分. 将 \\(A,B\\) 映射到长度为 \\(n\\) 的排列, 满足: 若 \\(X[i]<X[j]\\), 映射后满足 \\(f(X)[i]<f(X)[j]\\). 若 \\(X[i]=X[j], i<j\\), 映射后满足 \\(f(X)[i]<f(X)[j]\\). 则 \\(f(A)\\) 和 \\(f(B)\\) 是两个排列, 且若 \\(\\delta f(A)=f(B)\\), 则 \\(f^{-1}(\\delta) A=B\\). 应用之前排列的结论, 若 \\(n\\) 是奇数或 \\(f(A),f(B)\\) 奇偶性相同, 则 \\(k\\) 可以取到 \\(n-1\\). 若 \\(n\\) 为偶数且 \\(f(A),f(B)\\) 奇偶性不同, 则根据是否有重复元素讨论: 若 \\(A,B\\) 中没有重复元素, 则 \\(f\\) 是双射, \\(A,B\\) 和 \\(f(A),f(B)\\) 同构, \\(k\\) 的取值无法取到 \\(n-1\\). 若 \\(A\\) 中有重复元素, 则任取 \\(A[i]=A[j]\\), 交换 \\(f(A)[i]\\) 和 \\(f(A)[j]\\) 的位置得到 \\(C=\\varepsilon f(A)\\). 此时若 \\(\\delta C=f(B)\\), 则 \\(f^{-1}(\\delta) A=f^{-1}(\\delta)f^{-1}(\\varepsilon) A=B\\). 而 \\(C\\) 和 \\(f(B)\\) 奇偶性相同, 故 \\(k\\) 可以取 \\(n-1\\). 结论总结 若 \\(A, B\\) 元素不同, 则不存在 \\(k\\). 若 \\(A\\) 是 \\(\\overline{BB}\\) 的子串, 则最大 \\(k=n\\). 否则: 若 \\(n\\) 为奇数, 则最大 \\(k=n-1\\). 若 \\(n\\) 为偶数且 \\(A\\) 中有重复元素, 则最大 \\(k=n-1\\). 若 \\(n\\) 为偶数且 \\(A,B\\) 奇偶性相同, 则最大 \\(k=n-1\\). 若 \\(n\\) 为偶数且 \\(A,B\\) 奇偶性不同, 则最大 \\(k=n-2\\). 复杂度分析 判断 \\(k\\) 可否取 \\(n\\), KMP 算法复杂度为 \\(O(n)\\). 求 \\(A,B\\) 逆序对数, 复杂度为 \\(O(n\\log n)\\). 总复杂度为 \\(O(n\\log n)\\). 补充证明 任意两个对换的乘积均可以由若干次 \\(\\tau\\) 操作得到. 证明如下: 对于任意 \\(i,j\\in(1,n)\\) 定义 \\(\\sigma\\) 操作如下: \\[ \\sigma_{i,j,1,n}:=\\tau_{j,n,i}\\tau_{i,1,n}= \\pmat{ a_1&a_i&a_j&a_n\\\\ a_i&a_1&a_n&a_j }=(a_1\\ a_i)(a_n\\ a_j) \\] 则任意两个对换的乘积均可以表示为下列对换乘积的一种: \\[ \\algn{ (a_i\\ a_1)(a_i\\ a_n)&=(a_i\\ a_n\\ a_1)=\\tau_{1,n,i}\\tau_{i,1,n}\\\\ (a_i\\ a_j)(a_i\\ a_n)&=(a_i\\ a_n\\ a_j)=\\tau_{j,i,1}\\tau_{1,n,i}\\tau_{i,1,n}\\\\ (a_i\\ a_j)(a_i\\ a_t)&=(a_i\\ a_t\\ a_j)=\\sigma_{1,n,j,i}\\tau_{i,t,j}\\tau_{j,i,t}\\sigma_{i,t,1,n}\\\\ (a_i\\ a_1)(a_s\\ a_n)&=\\sigma_{i,s,1,n}\\\\ (a_i\\ a_j)(a_1\\ a_n)&=\\sigma_{n,1,i,j}\\sigma_{i,j,1,n}\\\\ (a_i\\ a_j)(a_s\\ a_n)&=\\sigma_{1,s,j,n}\\sigma_{j,n,i,s}\\sigma_{i,s,1,n}\\\\ (a_i\\ a_j)(a_s\\ a_t)&=\\sigma_{1,n,j,t}\\sigma_{j,t,i,s}\\sigma_{i,s,1,n}\\\\ } \\] 上述表示并非唯一. 由于情况有限, 也可以通过打表法求出乘积表示.","categories":[{"name":"学习笔记","slug":"学习笔记","permalink":"https://sheauhawjang.github.io/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"构造","slug":"构造","permalink":"https://sheauhawjang.github.io/tags/%E6%9E%84%E9%80%A0/"},{"name":"抽象代数","slug":"抽象代数","permalink":"https://sheauhawjang.github.io/tags/%E6%8A%BD%E8%B1%A1%E4%BB%A3%E6%95%B0/"}]},{"title":"2020 小学期第二期 Day7G 题解","slug":"2020 Microterm 2-7G","date":"2023-07-25T18:28:23.000Z","updated":"2023-07-25T21:34:32.000Z","comments":true,"path":"2023/07/26/2020 Microterm 2-7G/","link":"","permalink":"https://sheauhawjang.github.io/2023/07/26/2020%20Microterm%202-7G/","excerpt":"题目来源: 2019 ICPC Asia EC Final: H. King 题目来源: XJTUOJ-1223 zxh的一气通贯 题目链接: https://oj.xjtuicpc.com/problem/1223 题面 一共 \\(T\\) 组数据. 给定素数 \\(p\\), 以及长度为 \\(n\\) 的序列 \\(a_1,a_2,\\cdots, a_n\\). 需要找出满足下列条件的子序列 \\(b_1,b_2,\\cdots,b_m\\) 的最大长度: 子序列长度 \\(m\\ge n/2\\). \\(\\forall i\\in[1,m)\\cap\\mathbb N\\), \\(\\exists q\\in\\mathbb N\\), s.t. \\(qb_i\\equiv b_{i+1}\\pmod p\\). 即子序列在模 \\(p\\) 意义下是等比子序列. 若不存在这种子序列, 输出 -1. 数据范围 \\[ 1\\le T<1000 \\] \\[ 1\\le n\\le2\\times10^5 \\] \\[ 2\\le p\\le10^9+7 \\] \\[ 1\\le a_1,a_2,\\cdots,a_n<p \\] 保证输入的 \\(p\\) 是素数. 数据组中 \\(n\\) 的总和不超过 \\(2\\times10^5\\).","text":"题目来源: 2019 ICPC Asia EC Final: H. King 题目来源: XJTUOJ-1223 zxh的一气通贯 题目链接: https://oj.xjtuicpc.com/problem/1223 题面 一共 \\(T\\) 组数据. 给定素数 \\(p\\), 以及长度为 \\(n\\) 的序列 \\(a_1,a_2,\\cdots, a_n\\). 需要找出满足下列条件的子序列 \\(b_1,b_2,\\cdots,b_m\\) 的最大长度: 子序列长度 \\(m\\ge n/2\\). \\(\\forall i\\in[1,m)\\cap\\mathbb N\\), \\(\\exists q\\in\\mathbb N\\), s.t. \\(qb_i\\equiv b_{i+1}\\pmod p\\). 即子序列在模 \\(p\\) 意义下是等比子序列. 若不存在这种子序列, 输出 -1. 数据范围 \\[ 1\\le T<1000 \\] \\[ 1\\le n\\le2\\times10^5 \\] \\[ 2\\le p\\le10^9+7 \\] \\[ 1\\le a_1,a_2,\\cdots,a_n<p \\] 保证输入的 \\(p\\) 是素数. 数据组中 \\(n\\) 的总和不超过 \\(2\\times10^5\\). 题解 考虑在确定公比 \\(q\\) 的情况下, 找出最长的等比子序列. 记 \\(dp[i]\\) 为序列 \\(a_i,a_{i+1},\\cdots,a_n\\) 的最长等比子序列的长度, 其中该等比子序列公比为 \\(q\\), 首项为 \\(a_i\\). 则若 \\(i\\) 之后的第一个 \\(qa_i\\bmod p\\) 位置在 \\(a_j\\), 则 \\[ dp[i]=dp[j]+1 \\] 用vector<int> 存储同一个数字 \\(a\\) 的所有位置, 并用 map 建立 \\(a\\) 和其所有位置的映射. 由于位置是固定的, 且位置编号单调递增, 故寻找之后第一个 \\(qa_i\\bmod p\\) 的位置可以在映射的所有位置中使用二分查找. 按该方法查找一次的复杂度为 \\(O(\\log n)\\). 边界条件: 找不到 \\(a_j\\), 则最长等比子序列为 \\(a_i\\), 长度为 \\(1\\), \\(dp[i]=1\\). 确定公比 \\(q\\) 的情况下, 最长等比子序列的长度为: \\[ \\max_{1\\le i\\le n}dp[i] \\] 求得长度的复杂度为 \\(O(n\\log n)\\). 若直接枚举公比, 则每个可能的公比都形如 \\(a_ia_j^{-1}\\bmod p\\), 至多有 \\(O(n^2)\\) 个公比可供选择, 不能接受. 考虑取公比 \\(q\\) 时, 若以 \\(q\\) 为公比的子序列长度不小于 \\(n/2\\), 则可以注意到: 这个子序列一定有一定量的相邻元素对, 在原序列的位置相邻或隔一. 考虑这样的相邻元素对的最小数量 \\(s\\). 若所有的相邻元素对在原序列的位置都相隔至少 \\(2\\), 则最多一共有 \\((n-1)/3\\) 对元素. 但由于子序列长度不小于 \\(n/2\\), 相邻元素对的数量不小于 \\(n/2-1\\). 故 \\(s\\) 的一个下界为: \\[ s\\ge \\frac n2-\\frac{n-1}3-1\\tag1 \\] 这个下界是 \\(n/6\\) 量级的. 考虑原序列中相邻或隔一的元素对, 每个元素对确定了一个公比 \\(a_ia_j^{-1}\\bmod p\\), 这一共有 \\(2n-3\\) 个(可以重复的)取值, 而 \\(q\\) 要在这些取值中出现至少 \\(s\\) 次. 这是一个必要条件, 可以利用这个必要条件筛选掉不可能满足条件的公比. 使用下界(1)进行筛选, 最终最多只会剩 \\(12\\) 个左右的公比可能符合条件, 即公比只有 \\(O(1)\\) 个取值. 总复杂度为 \\(O(n\\log n)\\). 备注 \\(s\\) 的一个更紧的下界为 \\[ s\\ge \\frac n4-1\\tag 2 \\] 证明如下: 设有 \\(k\\) 个相邻元素对在原序列中的位置相隔至少 \\(2\\), 则有以下不等式: \\[ \\begin{align}3k+s+1&\\le n\\tag3\\\\k+s+1&\\ge \\left\\lceil{\\frac n2}\\right\\rceil\\tag4\\end{align} \\] (3) 减 (4) 可得 \\[ k\\le \\frac n4 \\] 而根据 (4) 可知 \\[ s\\ge\\frac n2-k-1\\ge\\frac n4-1 \\] 代码实现 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081#include <bits/stdc++.h>using namespace std;#define rep(i, n) for (int i = 1; i <= n; ++i)typedef long long llong;const int mxn = 300000;int dp[mxn];llong n, p;llong s[mxn], a[mxn], sv[mxn], inv[mxn];map<llong, llong> cnt;map<llong, vector<int>> fnd;llong fpow(llong a, llong b){ llong ans = 1; while (b) { if (b & 1) ans *= a, ans %= p; b >>= 1; a *= a, a %= p; } return ans;}void fndinv(){ s[0] = 1; rep(i, n) s[i] = s[i - 1] * a[i] % p; sv[n] = fpow(s[n], p - 2); for (int i = n; i >= 1; --i) sv[i - 1] = sv[i] * a[i] % p; for (int i = 1; i <= n; ++i) inv[i] = sv[i] * s[i - 1] % p;}int fndl(int st, int ds){ if (dp[st]) return dp[st]; llong nxvar = a[st] * ds % p; auto nx = upper_bound(fnd[nxvar].begin(), fnd[nxvar].end(), st); if (nx == fnd[nxvar].end()) return dp[st] = 1; else return dp[st] = fndl(*nx, ds) + 1;}inline int nm(int n){ return n / 2 - (n - 1) / 3 - 1;}int main(){ int t; scanf(\"%d\", &t); rep(rt, t) { cnt.clear(); fnd.clear(); int ans = 1; scanf(\"%lld%lld\", &n, &p); rep(i, n) scanf(\"%lld\", &a[i]), fnd[a[i]].push_back(i); fndinv(); for (int i = 2; i <= n; ++i) ++cnt[a[i] * inv[i - 1] % p]; for (int i = 3; i <= n; ++i) ++cnt[a[i] * inv[i - 2] % p]; for (auto sp : cnt) if (sp.second >= nm(n)) { rep(i, n) ans = max(ans, fndl(i, sp.first)); rep(i, n) dp[i] = 0; } if (ans * 2 >= n) printf(\"%d\\n\", ans); else printf(\"-1\\n\"); } return 0;} 花絮 笔者在现场比赛过程中未能通过本题, 但算法与本文一致. 在复现中使用相同的算法重写, 仍 Wrong Answer. 经排查算法未有错误, Wrong Answer 是代码中某运算未取模导致. 由于此问题, 笔者错失了 ICPC Asia EC Final 的银牌. 在发现这一问题后, 为防止再次出现类似问题, 笔者撰写了模 \\(p\\) 同余类模板.","categories":[{"name":"XCPC题解","slug":"XCPC题解","permalink":"https://sheauhawjang.github.io/categories/XCPC%E9%A2%98%E8%A7%A3/"}],"tags":[{"name":"数论","slug":"数论","permalink":"https://sheauhawjang.github.io/tags/%E6%95%B0%E8%AE%BA/"},{"name":"小学期","slug":"小学期","permalink":"https://sheauhawjang.github.io/tags/%E5%B0%8F%E5%AD%A6%E6%9C%9F/"},{"name":"动态规划","slug":"动态规划","permalink":"https://sheauhawjang.github.io/tags/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/"},{"name":"ICPC 2019","slug":"ICPC-2019","permalink":"https://sheauhawjang.github.io/tags/ICPC-2019/"},{"name":"正式赛","slug":"正式赛","permalink":"https://sheauhawjang.github.io/tags/%E6%AD%A3%E5%BC%8F%E8%B5%9B/"}]},{"title":"秋生回忆录:其一","slug":"Autumn Life/01","date":"2023-07-10T18:12:57.000Z","updated":"2023-07-24T19:41:13.000Z","comments":true,"path":"2023/07/11/Autumn Life/01/","link":"","permalink":"https://sheauhawjang.github.io/2023/07/11/Autumn%20Life/01/","excerpt":"一、永别","text":"一、永别 七月的第一天,毕业典礼。 这也许将是我最后一次见到秋生。最后的一次相见,照例有着特殊的含义。 我找出了尘封已久的折扇,买了一束花,穿上了象征毕业的学士服。似乎只有穿着端庄的学士服,轻扇着风雅的折扇,露出似笑非笑的严肃面容,先配得上应有的仪式感。 朝早七点半,我到了毕业典礼的会场。路路和张张最早看到了我,示意我坐下。不过,如果有可能,我想坐在秋生的旁边。不过,秋生来了之后,她旁边已然没有了座位,便只能远远地望着她。 九点半,毕业典礼结束了。与朋友们在操场上合了影。 之后是各自学院的毕业典礼。数院的毕业典礼很简单。 结束后,我只身一人去了秋生的毕业典礼。我站在会场的最后,怔怔地望着秋生。除了望着,我也没法靠近她,更没得话同她讲。我影低了秋生拨穗的时候。间隙中,我回宿舍拿了前一天买的花儿。不过我发现别人送的毕业花都是一大捧,只有我的花是一小束,但我也许并不想表达「毕业快乐」,可能是其他的什么意思。据说秋生的父母也来了毕业典礼,那一束花儿因此也就并没有送出去。 似乎有很多人注意到了突兀的我,我在会场的最后见证了她的毕业典礼结束。 临行回头一望,秋生奔跑着,可能在找她的家人吧。这一刻在我脑海中定格,是我最后一次见到她。 回首一瞬,便是永恒。 此去一别,即是永别。","categories":[{"name":"心境","slug":"心境","permalink":"https://sheauhawjang.github.io/categories/%E5%BF%83%E5%A2%83/"}],"tags":[{"name":"心境","slug":"心境","permalink":"https://sheauhawjang.github.io/tags/%E5%BF%83%E5%A2%83/"},{"name":"拾忆","slug":"拾忆","permalink":"https://sheauhawjang.github.io/tags/%E6%8B%BE%E5%BF%86/"}]},{"title":"GB/T 12345-1990 字符表","slug":"GB 12345-90","date":"2023-06-22T18:05:41.000Z","updated":"2023-06-22T18:05:46.000Z","comments":true,"path":"2023/06/23/GB 12345-90/","link":"","permalink":"https://sheauhawjang.github.io/2023/06/23/GB%2012345-90/","excerpt":"简介 GB/T 12345-1990(也称 GB/T 12345 或 GB/T 12345-90)标准全称《信息交换用汉字编码字符集 辅助集》,简称 GB1,是 GB/T 2312-1980 的繁体版本。该标准于1990年发布,共有6866个汉字,其中6763个汉字(B0A1-F7FE)与 GB/T 2312-1980 对应,103个汉字(F8A1-F9A9)是一简对多繁而产生的增补字。 该标准广泛用于字体的“伪繁体”版本。 但互联网上目前只有 GB/T 2312-1980 的字符表,没有 GB/T 12345-1990 的电子版字符表。几经辗转,在编码转化库 libiconv 中找到了 GB/T 12345-1990 的 Unicode 编码表。本文以此为凭据,列出 GB/T 12345-1990 的电子字符表。","text":"简介 GB/T 12345-1990(也称 GB/T 12345 或 GB/T 12345-90)标准全称《信息交换用汉字编码字符集 辅助集》,简称 GB1,是 GB/T 2312-1980 的繁体版本。该标准于1990年发布,共有6866个汉字,其中6763个汉字(B0A1-F7FE)与 GB/T 2312-1980 对应,103个汉字(F8A1-F9A9)是一简对多繁而产生的增补字。 该标准广泛用于字体的“伪繁体”版本。 但互联网上目前只有 GB/T 2312-1980 的字符表,没有 GB/T 12345-1990 的电子版字符表。几经辗转,在编码转化库 libiconv 中找到了 GB/T 12345-1990 的 Unicode 编码表。本文以此为凭据,列出 GB/T 12345-1990 的电子字符表。 汉字字符表 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F B0A0 啊 阿 埃 挨 哎 唉 哀 皚 癌 藹 矮 艾 礙 愛 隘 B0B0 鞍 氨 安 俺 按 暗 岸 胺 案 骯 昂 盎 凹 敖 熬 翱 B0C0 襖 傲 奥 懊 澳 芭 捌 扒 叭 吧 笆 八 疤 巴 拔 跋 B0D0 靶 把 耙 壩 霸 罷 爸 白 柏 百 擺 佰 敗 拜 稗 斑 B0E0 班 搬 扳 般 頒 板 版 扮 拌 伴 瓣 半 辦 絆 邦 幫 B0F0 梆 榜 膀 綁 棒 磅 蚌 鎊 傍 謗 苞 胞 包 褒 剥 B1A0 薄 雹 保 堡 飽 寶 抱 報 暴 豹 鮑 爆 杯 碑 悲 B1B0 卑 北 輩 背 貝 鋇 倍 狽 備 憊 焙 被 奔 苯 本 笨 B1C0 崩 綳 甭 泵 蹦 迸 逼 鼻 比 鄙 筆 彼 碧 蓖 蔽 畢 B1D0 斃 毖 幣 庇 痹 閉 敝 弊 必 辟 壁 臂 避 陛 鞭 邊 B1E0 編 貶 扁 便 變 卞 辨 辯 辮 遍 標 彪 膘 表 鱉 憋 B1F0 别 癟 彬 斌 瀕 濱 賓 擯 兵 冰 柄 丙 秉 餅 炳 B2A0 病 并 玻 菠 播 撥 鉢 波 博 勃 搏 鉑 箔 伯 帛 B2B0 舶 脖 膊 渤 泊 駁 捕 卜 哺 補 埠 不 布 步 簿 部 B2C0 怖 擦 猜 裁 材 才 財 睬 踩 采 彩 菜 蔡 餐 參 蠶 B2D0 殘 慚 慘 燦 蒼 艙 倉 滄 藏 操 糙 槽 曹 草 厠 策 B2E0 側 册 測 層 蹭 插 叉 茬 茶 查 碴 搽 察 岔 差 詫 B2F0 拆 柴 豺 攙 摻 蟬 饞 讒 纏 鏟 産 闡 顫 昌 猖 B3A0 場 嘗 常 長 償 腸 廠 敞 暢 唱 倡 超 抄 鈔 朝 B3B0 嘲 潮 巢 吵 炒 車 扯 撤 掣 徹 澈 郴 臣 辰 塵 晨 B3C0 忱 沉 陳 趁 襯 撑 稱 城 橙 成 呈 乘 程 懲 澄 誠 B3D0 承 逞 騁 秤 吃 痴 持 匙 池 遲 弛 馳 耻 齒 侈 尺 B3E0 赤 翅 斥 熾 充 衝 蟲 崇 寵 抽 酬 疇 躊 稠 愁 籌 B3F0 仇 綢 瞅 醜 臭 初 出 橱 厨 躇 鋤 雛 滁 除 楚 B4A0 礎 儲 矗 搐 觸 處 揣 川 穿 椽 傳 船 喘 串 瘡 B4B0 窗 幢 床 闖 創 吹 炊 捶 錘 垂 春 椿 醇 唇 淳 純 B4C0 蠢 戳 綽 疵 茨 磁 雌 辭 慈 瓷 詞 此 刺 賜 次 聰 B4D0 葱 囱 匆 從 叢 凑 粗 醋 簇 促 躥 篡 竄 摧 崔 催 B4E0 脆 瘁 粹 淬 翠 村 存 寸 磋 撮 搓 措 挫 錯 搭 達 B4F0 答 瘩 打 大 呆 歹 傣 戴 帶 殆 代 貸 袋 待 逮 B5A0 怠 耽 擔 丹 單 鄲 撣 膽 旦 氮 但 憚 淡 誕 彈 B5B0 蛋 當 擋 黨 蕩 檔 刀 搗 蹈 倒 島 禱 導 到 稻 悼 B5C0 道 盗 德 得 的 蹬 燈 登 等 瞪 凳 鄧 堤 低 滴 迪 B5D0 敵 笛 狄 滌 翟 嫡 抵 底 地 蒂 第 帝 弟 遞 締 顛 B5E0 掂 滇 碘 點 典 靛 墊 電 佃 甸 店 惦 奠 澱 殿 碉 B5F0 叼 雕 凋 刁 掉 吊 釣 調 跌 爹 碟 蝶 迭 諜 叠 B6A0 丁 盯 叮 釘 頂 鼎 錠 定 訂 丢 東 冬 董 懂 動 B6B0 棟 侗 恫 凍 洞 兜 抖 鬥 陡 豆 逗 痘 都 督 毒 犢 B6C0 獨 讀 堵 睹 賭 杜 鍍 肚 度 渡 妒 端 短 鍛 段 斷 B6D0 緞 堆 兑 隊 對 墩 噸 蹲 敦 頓 囤 鈍 盾 遁 掇 哆 B6E0 多 奪 垛 躲 朵 跺 舵 剁 惰 墮 蛾 峨 鵝 俄 額 訛 B6F0 娥 惡 厄 扼 遏 鄂 餓 恩 而 兒 耳 爾 餌 洱 二 B7A0 貳 發 罰 筏 伐 乏 閥 法 珐 藩 帆 番 翻 樊 礬 B7B0 釩 繁 凡 煩 反 返 範 販 犯 飯 泛 坊 芳 方 肪 房 B7C0 防 妨 仿 訪 紡 放 菲 非 啡 飛 肥 匪 誹 吠 肺 廢 B7D0 沸 費 芬 酚 吩 氛 分 紛 墳 焚 汾 粉 奮 份 忿 憤 B7E0 糞 豐 封 楓 蜂 峰 鋒 風 瘋 烽 逢 馮 縫 諷 奉 鳳 B7F0 佛 否 夫 敷 膚 孵 扶 拂 輻 幅 氟 符 伏 俘 服 B8A0 浮 涪 福 袱 弗 甫 撫 輔 俯 釜 斧 脯 腑 府 腐 B8B0 赴 副 覆 賦 復 傅 付 阜 父 腹 負 富 訃 附 婦 縛 B8C0 咐 噶 嘎 該 改 概 鈣 蓋 溉 幹 甘 杆 柑 竿 肝 趕 B8D0 感 秆 敢 贛 岡 剛 鋼 缸 肛 綱 崗 港 杠 篙 皋 高 B8E0 膏 羔 糕 搞 鎬 稿 告 哥 歌 擱 戈 鴿 胳 疙 割 革 B8F0 葛 格 蛤 閣 隔 鉻 個 各 給 根 跟 耕 更 庚 羹 B9A0 埂 耿 梗 工 攻 功 恭 龔 供 躬 公 宫 弓 鞏 汞 B9B0 拱 貢 共 鈎 勾 溝 苟 狗 垢 構 購 够 辜 菇 咕 箍 B9C0 估 沽 孤 姑 鼓 古 蠱 骨 谷 股 故 顧 固 雇 刮 瓜 B9D0 剮 寡 挂 褂 乖 拐 怪 棺 關 官 冠 觀 管 館 罐 慣 B9E0 灌 貫 光 廣 逛 瑰 規 圭 硅 歸 龜 閨 軌 鬼 詭 癸 B9F0 桂 櫃 跪 貴 劊 輥 滚 棍 鍋 郭 國 果 裹 過 哈 BAA0 骸 孩 海 氦 亥 害 駭 酣 憨 邯 韓 含 涵 寒 函 BAB0 喊 罕 翰 撼 捍 旱 憾 悍 焊 汗 漢 夯 杭 航 壕 嚎 BAC0 豪 毫 郝 好 耗 號 浩 呵 喝 荷 菏 核 禾 和 何 合 BAD0 盒 貉 閡 河 涸 赫 褐 鶴 賀 嘿 黑 痕 很 狠 恨 哼 BAE0 亨 横 衡 恒 轟 哄 烘 虹 鴻 洪 宏 弘 紅 喉 侯 猴 BAF0 吼 厚 候 後 呼 乎 忽 瑚 壺 葫 胡 蝴 狐 糊 湖 BBA0 弧 虎 唬 護 互 滬 户 花 嘩 華 猾 滑 畫 劃 化 BBB0 話 槐 徊 懷 淮 壞 歡 環 桓 還 緩 换 患 唤 痪 豢 BBC0 焕 涣 宦 幻 荒 慌 黄 磺 蝗 簧 皇 凰 惶 煌 晃 幌 BBD0 恍 謊 灰 揮 輝 徽 恢 蛔 回 毁 悔 慧 卉 惠 晦 賄 BBE0 穢 會 燴 匯 諱 誨 繪 葷 昏 婚 魂 渾 混 豁 活 伙 BBF0 火 獲 或 惑 霍 貨 禍 擊 圾 基 機 畸 稽 積 箕 BCA0 肌 饑 迹 激 譏 鷄 姬 績 緝 吉 極 棘 輯 籍 集 BCB0 及 急 疾 汲 即 嫉 級 擠 幾 脊 己 薊 技 冀 季 伎 BCC0 祭 劑 悸 濟 寄 寂 計 記 既 忌 際 妓 繼 紀 嘉 枷 BCD0 夾 佳 家 加 莢 頰 賈 甲 鉀 假 稼 價 架 駕 嫁 殲 BCE0 監 堅 尖 箋 間 煎 兼 肩 艱 奸 緘 繭 檢 柬 碱 鹼 BCF0 揀 撿 簡 儉 剪 减 薦 檻 鑒 踐 賤 見 鍵 箭 件 BDA0 健 艦 劍 餞 漸 濺 澗 建 僵 姜 將 漿 江 疆 蔣 BDB0 槳 奬 講 匠 醬 降 蕉 椒 礁 焦 膠 交 郊 澆 驕 嬌 BDC0 嚼 攪 鉸 矯 僥 脚 狡 角 餃 繳 絞 剿 教 酵 轎 較 BDD0 叫 窖 揭 接 皆 秸 街 階 截 劫 節 桔 杰 捷 睫 竭 BDE0 潔 結 解 姐 戒 藉 芥 界 借 介 疥 誡 届 巾 筋 斤 BDF0 金 今 津 襟 緊 錦 僅 謹 進 靳 晋 禁 近 燼 浸 BEA0 盡 勁 荆 兢 莖 睛 晶 鯨 京 驚 精 粳 經 井 警 BEB0 景 頸 静 境 敬 鏡 徑 痙 靖 竟 競 净 炯 窘 揪 究 BEC0 糾 玖 韭 久 灸 九 酒 厩 救 舊 臼 舅 咎 就 疚 鞠 BED0 拘 狙 疽 居 駒 菊 局 咀 矩 舉 沮 聚 拒 據 巨 具 BEE0 距 踞 鋸 俱 句 懼 炬 劇 捐 鵑 娟 倦 眷 卷 絹 撅 BEF0 攫 抉 掘 倔 爵 覺 决 訣 絶 均 菌 鈞 軍 君 峻 BFA0 俊 竣 浚 郡 駿 喀 咖 卡 咯 開 揩 楷 凱 慨 刊 BFB0 堪 勘 坎 砍 看 康 慷 糠 扛 抗 亢 炕 考 拷 烤 靠 BFC0 坷 苛 柯 棵 磕 顆 科 殻 咳 可 渴 克 刻 客 課 肯 BFD0 啃 墾 懇 坑 吭 空 恐 孔 控 摳 口 扣 寇 枯 哭 窟 BFE0 苦 酷 庫 褲 誇 垮 挎 跨 胯 塊 筷 儈 快 寬 款 匡 BFF0 筐 狂 框 礦 眶 曠 况 虧 盔 巋 窺 葵 奎 魁 傀 C0A0 饋 愧 潰 坤 昆 捆 困 括 擴 廓 闊 垃 拉 喇 蠟 C0B0 臘 辣 啦 萊 來 賴 藍 婪 欄 攔 籃 闌 蘭 瀾 讕 攬 C0C0 覽 懶 纜 爛 濫 琅 榔 狼 廊 郎 朗 浪 撈 勞 牢 老 C0D0 佬 姥 酪 烙 澇 勒 樂 雷 鐳 蕾 磊 累 儡 壘 擂 肋 C0E0 類 泪 棱 楞 冷 厘 梨 犁 黎 籬 狸 離 灕 理 李 裏 C0F0 鯉 禮 莉 荔 吏 栗 麗 厲 勵 礫 歷 利 傈 例 俐 C1A0 痢 立 粒 瀝 隸 力 璃 哩 倆 聯 蓮 連 鐮 廉 憐 C1B0 漣 簾 斂 臉 鏈 戀 煉 練 糧 凉 梁 粱 良 兩 輛 量 C1C0 晾 亮 諒 撩 聊 僚 療 燎 寥 遼 潦 了 撂 鐐 廖 料 C1D0 列 裂 烈 劣 獵 琳 林 磷 霖 臨 鄰 鱗 淋 凛 賃 吝 C1E0 拎 玲 菱 零 齡 鈴 伶 羚 凌 靈 陵 嶺 領 另 令 溜 C1F0 琉 榴 硫 餾 留 劉 瘤 流 柳 六 龍 聾 嚨 籠 窿 C2A0 隆 壟 攏 隴 樓 婁 摟 簍 漏 陋 蘆 盧 顱 廬 爐 C2B0 擄 滷 虜 魯 麓 碌 露 路 賂 鹿 潞 禄 録 陸 戮 驢 C2C0 吕 鋁 侣 旅 履 屢 縷 慮 氯 律 率 濾 緑 巒 攣 孿 C2D0 灤 卵 亂 掠 略 掄 輪 倫 侖 淪 綸 論 蘿 螺 羅 邏 C2E0 鑼 籮 騾 裸 落 洛 駱 絡 媽 麻 瑪 碼 螞 馬 駡 嘛 C2F0 嗎 埋 買 麥 賣 邁 脉 瞞 饅 蠻 滿 蔓 曼 慢 漫 C3A0 謾 芒 茫 盲 氓 忙 莽 猫 茅 錨 毛 矛 鉚 卯 茂 C3B0 冒 帽 貌 貿 麽 玫 枚 梅 酶 霉 煤 没 眉 媒 鎂 每 C3C0 美 昧 寐 妹 媚 門 悶 們 萌 蒙 檬 盟 錳 猛 夢 孟 C3D0 眯 醚 靡 糜 迷 謎 彌 米 秘 覓 泌 蜜 密 幂 棉 眠 C3E0 綿 冕 免 勉 娩 緬 面 苗 描 瞄 藐 秒 渺 廟 妙 蔑 C3F0 滅 民 抿 皿 敏 憫 閩 明 螟 鳴 銘 名 命 謬 摸 C4A0 摹 蘑 模 膜 磨 摩 魔 抹 末 莫 墨 默 沫 漠 寞 C4B0 陌 謀 牟 某 拇 牡 畝 姆 母 墓 暮 幕 募 慕 木 目 C4C0 睦 牧 穆 拿 哪 呐 鈉 那 娜 納 氖 乃 奶 耐 奈 南 C4D0 男 難 囊 撓 腦 惱 鬧 淖 呢 餒 内 嫩 能 妮 霓 倪 C4E0 泥 尼 擬 你 匿 膩 逆 溺 蔫 拈 年 碾 攆 捻 念 娘 C4F0 釀 鳥 尿 捏 聶 孽 嚙 鑷 鎳 涅 您 檸 獰 凝 寧 C5A0 擰 濘 牛 扭 鈕 紐 膿 濃 農 弄 奴 努 怒 女 暖 C5B0 虐 瘧 挪 懦 糯 諾 哦 歐 鷗 毆 藕 嘔 偶 漚 啪 趴 C5C0 爬 帕 怕 琶 拍 排 牌 徘 湃 派 攀 潘 盤 磐 盼 畔 C5D0 判 叛 乓 龐 旁 耪 胖 抛 咆 刨 炮 袍 跑 泡 呸 胚 C5E0 培 裴 賠 陪 配 佩 沛 噴 盆 砰 抨 烹 澎 彭 蓬 棚 C5F0 硼 篷 膨 朋 鵬 捧 碰 坯 砒 霹 批 披 劈 琵 毗 C6A0 啤 脾 疲 皮 匹 痞 僻 屁 譬 篇 偏 片 騙 飄 漂 C6B0 瓢 票 撇 瞥 拼 頻 貧 品 聘 乒 坪 蘋 萍 平 憑 瓶 C6C0 評 屏 坡 潑 頗 婆 破 魄 迫 粕 剖 撲 鋪 僕 莆 葡 C6D0 菩 蒲 埔 樸 圃 普 浦 譜 曝 瀑 期 欺 栖 戚 妻 七 C6E0 凄 漆 柒 沏 其 棋 奇 歧 畦 崎 臍 齊 旗 祈 祁 騎 C6F0 起 豈 乞 企 啓 契 砌 器 氣 迄 弃 汽 泣 訖 掐 C7A0 恰 洽 牽 扦 釺 鉛 千 遷 簽 仟 謙 乾 黔 錢 鉗 C7B0 前 潜 遣 淺 譴 塹 嵌 欠 歉 槍 嗆 腔 羌 墻 薔 强 C7C0 搶 橇 鍬 敲 悄 橋 瞧 喬 僑 巧 鞘 撬 翹 峭 俏 竅 C7D0 切 茄 且 怯 竊 欽 侵 親 秦 琴 勤 芹 擒 禽 寢 沁 C7E0 青 輕 氫 傾 卿 清 擎 晴 氰 情 頃 請 慶 瓊 窮 秋 C7F0 丘 邱 球 求 囚 酋 泅 趨 區 蛆 曲 軀 屈 驅 渠 C8A0 取 娶 齲 趣 去 圈 顴 權 醛 泉 全 痊 拳 犬 券 C8B0 勸 缺 炔 瘸 却 鵲 榷 確 雀 裙 群 然 燃 冉 染 瓤 C8C0 壤 攘 嚷 讓 饒 擾 繞 惹 熱 壬 仁 人 忍 韌 任 認 C8D0 刃 妊 紉 扔 仍 日 戎 茸 蓉 榮 融 熔 溶 容 絨 冗 C8E0 揉 柔 肉 茹 蠕 儒 孺 如 辱 乳 汝 入 褥 軟 阮 蕊 C8F0 瑞 鋭 閏 潤 若 弱 撒 灑 薩 腮 鰓 塞 賽 三 叁 C9A0 傘 散 桑 嗓 喪 搔 騷 掃 嫂 瑟 色 澀 森 僧 莎 C9B0 砂 殺 刹 沙 紗 傻 啥 煞 篩 曬 珊 苫 杉 山 删 煽 C9C0 衫 閃 陝 擅 贍 膳 善 汕 扇 繕 墒 傷 商 賞 晌 上 C9D0 尚 裳 梢 捎 稍 燒 芍 勺 韶 少 哨 邵 紹 奢 賒 蛇 C9E0 舌 捨 赦 攝 射 懾 涉 社 設 砷 申 呻 伸 身 深 娠 C9F0 紳 神 沈 審 嬸 甚 腎 慎 滲 聲 生 甥 牲 升 繩 CAA0 省 盛 剩 勝 聖 師 失 獅 施 濕 詩 尸 虱 十 石 CAB0 拾 時 什 食 蝕 實 識 史 矢 使 屎 駛 始 式 示 士 CAC0 世 柿 事 拭 誓 逝 勢 是 嗜 噬 適 仕 侍 釋 飾 氏 CAD0 市 恃 室 視 試 收 手 首 守 壽 授 售 受 瘦 獸 蔬 CAE0 樞 梳 殊 抒 輸 叔 舒 淑 疏 書 贖 孰 熟 薯 暑 曙 CAF0 署 蜀 黍 鼠 屬 術 述 樹 束 戍 竪 墅 庶 數 漱 CBA0 恕 刷 耍 摔 衰 甩 帥 栓 拴 霜 雙 爽 誰 水 睡 CBB0 税 吮 瞬 順 舜 説 碩 朔 爍 斯 撕 嘶 思 私 司 絲 CBC0 死 肆 寺 嗣 四 伺 似 飼 巳 鬆 聳 慫 頌 送 宋 訟 CBD0 誦 搜 艘 擻 嗽 蘇 酥 俗 素 速 粟 僳 塑 溯 宿 訴 CBE0 肅 酸 蒜 算 雖 隋 隨 綏 髓 碎 歲 穗 遂 隧 祟 孫 CBF0 損 笋 蓑 梭 唆 縮 瑣 索 鎖 所 塌 他 它 她 塔 CCA0 獺 撻 蹋 踏 胎 苔 抬 臺 泰 酞 太 態 汰 坍 攤 CCB0 貪 癱 灘 壇 檀 痰 潭 譚 談 坦 毯 袒 碳 探 嘆 炭 CCC0 湯 塘 搪 堂 棠 膛 唐 糖 倘 躺 淌 趟 燙 掏 濤 滔 CCD0 縧 萄 桃 逃 淘 陶 討 套 特 藤 騰 疼 謄 梯 剔 踢 CCE0 銻 提 題 蹄 啼 體 替 嚏 惕 涕 剃 屉 天 添 填 田 CCF0 甜 恬 舔 腆 挑 條 迢 眺 跳 貼 鐵 帖 廳 聽 烴 CDA0 汀 廷 停 亭 庭 挺 艇 通 桐 酮 瞳 同 銅 彤 童 CDB0 桶 捅 筒 統 痛 偷 投 頭 透 凸 秃 突 圖 徒 途 塗 CDC0 屠 土 吐 兔 湍 團 推 頽 腿 蜕 褪 退 吞 屯 臀 拖 CDD0 托 脱 鴕 陀 馱 駝 橢 妥 拓 唾 挖 哇 蛙 窪 娃 瓦 CDE0 襪 歪 外 豌 彎 灣 玩 頑 丸 烷 完 碗 挽 晚 皖 惋 CDF0 宛 婉 萬 腕 汪 王 亡 枉 網 往 旺 望 忘 妄 威 CEA0 巍 微 危 韋 違 桅 圍 唯 惟 爲 濰 維 葦 萎 委 CEB0 偉 僞 尾 緯 未 蔚 味 畏 胃 喂 魏 位 渭 謂 尉 慰 CEC0 衛 瘟 温 蚊 文 聞 紋 吻 穩 紊 問 嗡 翁 瓮 撾 蝸 CED0 渦 窩 我 斡 卧 握 沃 巫 嗚 鎢 烏 污 誣 屋 無 蕪 CEE0 梧 吾 吴 毋 武 五 捂 午 舞 伍 侮 塢 戊 霧 晤 物 CEF0 勿 務 悟 誤 昔 熙 析 西 硒 矽 晰 嘻 吸 錫 犧 CFA0 稀 息 希 悉 膝 夕 惜 熄 烯 溪 汐 犀 檄 襲 席 CFB0 習 媳 喜 銑 洗 系 隙 戲 細 瞎 蝦 匣 霞 轄 暇 峽 CFC0 俠 狹 下 厦 夏 嚇 掀 鍁 先 仙 鮮 纖 咸 賢 銜 舷 CFD0 閑 涎 弦 嫌 顯 險 現 獻 縣 腺 餡 羡 憲 陷 限 綫 CFE0 相 厢 鑲 香 箱 襄 湘 鄉 翔 祥 詳 想 響 享 項 巷 CFF0 橡 像 向 象 蕭 硝 霄 削 哮 囂 銷 消 宵 淆 曉 D0A0 小 孝 校 肖 嘯 笑 效 楔 些 歇 蝎 鞋 協 挾 携 D0B0 邪 斜 脅 諧 寫 械 卸 蟹 懈 泄 瀉 謝 屑 薪 芯 鋅 D0C0 欣 辛 新 忻 心 信 釁 星 腥 猩 惺 興 刑 型 形 邢 D0D0 行 醒 幸 杏 性 姓 兄 凶 胸 匈 汹 雄 熊 休 修 羞 D0E0 朽 嗅 銹 秀 袖 綉 墟 戌 需 虚 嘘 須 徐 許 蓄 酗 D0F0 叙 旭 序 畜 恤 絮 婿 緒 續 軒 喧 宣 懸 旋 玄 D1A0 選 癬 眩 絢 靴 薛 學 穴 雪 血 勛 熏 循 旬 詢 D1B0 尋 馴 巡 殉 汛 訓 訊 遜 迅 壓 押 鴉 鴨 呀 丫 芽 D1C0 牙 蚜 崖 衙 涯 雅 啞 亞 訝 焉 咽 閹 烟 淹 鹽 嚴 D1D0 研 蜒 岩 延 言 顔 閻 炎 沿 奄 掩 眼 衍 演 艷 堰 D1E0 燕 厭 硯 雁 唁 彦 焰 宴 諺 驗 殃 央 鴦 秧 楊 揚 D1F0 佯 瘍 羊 洋 陽 氧 仰 癢 養 樣 漾 邀 腰 妖 瑶 D2A0 摇 堯 遥 窑 謡 姚 咬 舀 藥 要 耀 椰 噎 耶 爺 D2B0 野 冶 也 頁 掖 業 葉 曳 腋 夜 液 一 壹 醫 揖 銥 D2C0 依 伊 衣 頤 夷 遺 移 儀 胰 疑 沂 宜 姨 彝 椅 蟻 D2D0 倚 已 乙 矣 以 藝 抑 易 邑 屹 億 役 臆 逸 肄 疫 D2E0 亦 裔 意 毅 憶 義 益 溢 詣 議 誼 譯 异 翼 翌 繹 D2F0 茵 蔭 因 殷 音 陰 姻 吟 銀 淫 寅 飲 尹 引 隱 D3A0 印 英 櫻 嬰 鷹 應 纓 瑩 螢 營 熒 蠅 迎 贏 盈 D3B0 影 穎 硬 映 喲 擁 傭 臃 癰 庸 雍 踴 蛹 咏 泳 涌 D3C0 永 恿 勇 用 幽 優 悠 憂 尤 由 郵 鈾 猶 油 游 酉 D3D0 有 友 右 佑 釉 誘 又 幼 迂 淤 于 盂 榆 虞 愚 輿 D3E0 餘 俞 逾 魚 愉 渝 漁 隅 予 娱 雨 與 嶼 禹 宇 語 D3F0 羽 玉 域 芋 鬱 吁 遇 喻 峪 御 愈 欲 獄 育 譽 D4A0 浴 寓 裕 預 豫 馭 鴛 淵 冤 元 垣 袁 原 援 轅 D4B0 園 員 圓 猿 源 緣 遠 苑 願 怨 院 曰 約 越 躍 鑰 D4C0 岳 粤 月 悦 閲 耘 雲 鄖 匀 隕 允 運 藴 醖 暈 韵 D4D0 孕 匝 砸 雜 栽 哉 灾 宰 載 再 在 咱 攢 暫 贊 贜 D4E0 臟 葬 遭 糟 鑿 藻 棗 早 澡 蚤 躁 噪 造 皂 竈 燥 D4F0 責 擇 則 澤 賊 怎 增 憎 曾 贈 扎 喳 渣 札 軋 D5A0 鍘 閘 眨 栅 榨 咋 乍 炸 詐 摘 齋 宅 窄 債 寨 D5B0 瞻 氈 詹 粘 沾 盞 斬 輾 嶄 展 蘸 棧 占 戰 站 湛 D5C0 綻 樟 章 彰 漳 張 掌 漲 杖 丈 帳 賬 仗 脹 瘴 障 D5D0 招 昭 找 沼 趙 照 罩 兆 肇 召 遮 折 哲 蟄 轍 者 D5E0 鍺 蔗 這 浙 珍 斟 真 甄 砧 臻 貞 針 偵 枕 疹 診 D5F0 震 振 鎮 陣 蒸 挣 睁 征 狰 争 怔 整 拯 正 政 D6A0 幀 癥 鄭 證 芝 枝 支 吱 蜘 知 肢 脂 汁 之 織 D6B0 職 直 植 殖 執 值 侄 址 指 止 趾 衹 旨 紙 志 摯 D6C0 擲 至 致 置 幟 峙 制 智 秩 稚 質 炙 痔 滯 治 窒 D6D0 中 盅 忠 鐘 衷 終 種 腫 重 仲 衆 舟 周 州 洲 謅 D6E0 粥 軸 肘 帚 咒 皺 宙 晝 驟 珠 株 蛛 朱 猪 諸 誅 D6F0 逐 竹 燭 煮 拄 矚 囑 主 著 柱 助 蛀 貯 鑄 築 D7A0 住 注 祝 駐 抓 爪 拽 專 磚 轉 撰 賺 篆 樁 莊 D7B0 裝 妝 撞 壯 狀 椎 錐 追 贅 墜 綴 諄 準 捉 拙 卓 D7C0 桌 琢 茁 酌 啄 着 灼 濁 兹 咨 資 姿 滋 淄 孜 紫 D7D0 仔 籽 滓 子 自 漬 字 鬃 棕 踪 宗 綜 總 縱 鄒 走 D7E0 奏 揍 租 足 卒 族 祖 詛 阻 組 鑽 纂 嘴 醉 最 罪 D7F0 尊 遵 昨 左 佐 柞 做 作 坐 座 D8A0 亍 丌 兀 丐 廿 卅 丕 亘 丞 鬲 孬 噩 丨 禺 丿 D8B0 匕 乇 夭 爻 卮 氐 囟 胤 馗 毓 睾 鼗 丶 亟 鼐 乜 D8C0 乩 亓 芈 孛 嗇 嘏 仄 厙 厝 厴 厥 厮 靨 贋 匚 叵 D8D0 匭 匱 匾 賾 卦 卣 刂 刈 刎 剄 刳 劌 剴 剌 剞 剡 D8E0 剜 蒯 剽 劂 劁 劐 劓 冂 罔 亻 仃 仉 仂 仨 仡 仫 D8F0 仞 傴 仳 伢 佤 仵 倀 傖 伉 伫 佞 佧 攸 佚 佝 D9A0 佟 佗 伲 伽 佶 佴 侑 侉 侃 侏 佾 佻 儕 佼 儂 D9B0 侔 儔 儼 儷 俅 俚 俣 俜 俑 俟 俸 倩 偌 俳 倬 倏 D9C0 倮 倭 俾 倜 倌 倥 倨 僨 偃 偕 偈 偎 偬 僂 儻 儐 D9D0 儺 傺 僖 儆 僭 僬 僦 僮 儇 儋 仝 氽 佘 僉 俎 龠 D9E0 汆 糴 兮 巽 黌 馘 囅 夔 勹 匍 訇 匐 鳬 夙 兕 亠 D9F0 兖 亳 衮 袤 褻 臠 裒 禀 嬴 蠃 羸 冫 冱 冽 冼 DAA0 凇 冖 冢 冥 訁 訐 訌 訕 謳 詎 訥 詁 訶 詆 詔 DAB0 詘 詒 誆 誄 詿 詰 詼 詵 詬 詮 諍 諢 詡 誚 誥 誑 DAC0 誒 諏 諑 諉 諛 諗 諂 誶 諶 諫 謔 謁 諤 諭 諼 諳 DAD0 諦 諮 諞 謨 讜 謖 謚 謐 謫 謭 譖 譙 譎 讞 譫 讖 DAE0 卩 卺 阝 阢 阡 阱 阪 阽 阼 陂 陘 陔 陟 陧 陬 陲 DAF0 陴 隈 隍 隗 隰 邗 邛 鄺 邙 鄔 邡 邴 邳 邶 鄴 DBA0 邸 邰 郟 郅 邾 鄶 郄 郇 鄆 酈 郢 郜 郗 郛 郫 DBB0 郯 郾 鄄 鄢 鄞 鄣 鄱 鄯 鄹 酃 酆 芻 奂 勱 劬 劭 DBC0 劾 哿 勐 勖 勰 叟 燮 矍 廴 凵 凼 鬯 厶 弁 畚 巰 DBD0 坌 堊 垡 塾 墼 壅 壑 圩 圬 圪 圳 壙 圮 圯 壢 圻 DBE0 坂 坩 壠 坫 壚 坼 坻 坨 坭 坶 坳 埡 垤 垌 塏 埏 DBF0 垧 堖 垓 垠 埕 塒 堝 塤 埒 垸 埴 埯 埸 埤 埝 DCA0 堋 堍 埽 埭 堀 堞 堙 塄 堠 塥 塬 墁 墉 墚 墀 DCB0 馨 鼙 懿 艹 艽 艿 芏 芊 芨 芄 芎 芑 薌 芙 芫 蕓 DCC0 芾 芰 藶 苊 苣 芘 芷 芮 莧 萇 蓯 芩 芴 芡 芪 芟 DCD0 苄 苧 芤 苡 茉 苷 苤 蘢 茇 苜 苴 苒 苘 茌 苻 苓 DCE0 蔦 茚 茆 塋 煢 苠 苕 茜 荑 蕘 蓽 茈 莒 茼 茴 茱 DCF0 莛 蕎 茯 荏 荇 荃 薈 荀 茗 薺 茭 茺 茳 犖 滎 DDA0 蕁 茛 藎 蕒 蓀 葒 葤 莰 荸 蒔 萵 莠 莪 莓 莜 DDB0 莅 荼 薟 莩 荽 蕕 荻 莘 莞 莨 鶯 蒓 菁 萁 菥 菘 DDC0 堇 萘 萋 菝 菽 菖 萜 萸 萑 萆 菔 菟 萏 萃 菸 菹 DDD0 菪 菅 菀 縈 菰 菡 葜 葑 葚 葙 葳 蕆 蒈 葺 蕢 葸 DDE0 萼 葆 葩 葶 蔞 蒎 萱 葭 蓁 蓍 蓐 驀 蒽 蓓 蓊 蒿 DDF0 蒺 蘺 蒡 蒹 蒴 蒗 鎣 蕷 蔌 甍 蔸 蓰 蘞 蔟 藺 DEA0 蕖 蔻 蓿 蓼 蕙 蕈 蕨 蕤 蕞 蕺 瞢 蕃 蘄 蕻 薤 DEB0 薨 薇 薏 蕹 藪 薜 薅 薹 薷 薰 蘚 藁 藜 藿 蘧 蘅 DEC0 蘩 蘖 蘼 廾 弈 夼 奩 耷 奕 奚 奘 匏 尢 尥 尬 尷 DED0 扌 捫 摶 抻 拊 拚 拗 拮 撟 拶 挹 捋 捃 掭 揶 捱 DEE0 捺 掎 摑 捭 掬 掊 捩 掮 摜 揲 揸 揠 撳 揄 揞 揎 DEF0 摒 揆 掾 攄 摁 搋 搛 搠 搌 搦 搡 摞 攖 摭 撖 DFA0 摺 擷 擼 撙 攛 擀 擐 擗 擤 擢 攉 攥 攮 弋 忒 DFB0 甙 弑 卟 叱 嘰 叩 叨 叻 吒 吖 吆 呋 嘸 囈 呔 嚦 DFC0 呃 吡 唄 咼 吣 吲 咂 咔 呷 呱 呤 咚 嚀 咄 呶 呦 DFD0 噝 哐 咭 哂 咴 噠 咧 咦 嘵 嗶 呲 咣 噦 咻 咿 哌 DFE0 噲 哚 嚌 咩 咪 咤 噥 哏 哞 嘜 哧 嘮 哽 唔 哳 嗩 DFF0 唣 唏 唑 唧 唪 嘖 喏 喵 啉 囀 啁 啕 唿 啐 唼 E0A0 唷 啖 啵 啶 啷 唳 唰 啜 喋 嗒 喃 喱 喹 喈 喁 E0B0 喟 啾 嗖 喑 啻 嗟 嘍 嚳 喔 喙 嗪 嗷 嗉 嘟 嗑 囁 E0C0 嗬 嗔 嗦 嗝 嗄 嗯 嗥 嗲 噯 嗌 嗍 嗨 嗵 嗤 轡 嘞 E0D0 嘈 嘌 嘁 嚶 嘣 嗾 嘀 嘧 嘭 噘 嘹 噗 嘬 噍 噢 噙 E0E0 嚕 噌 噔 嚆 噤 噱 噫 噻 噼 嚅 嚓 嚯 囔 囗 囝 囡 E0F0 圇 囫 囹 囿 圄 圊 圉 圜 幃 帙 帔 帑 幬 幘 幗 E1A0 帷 幄 幔 幛 幞 幡 岌 屺 岍 岐 嶇 岈 峴 岙 岑 E1B0 嵐 岜 岵 岢 崬 岬 岫 岱 岣 峁 岷 嶧 峒 嶠 峋 峥 E1C0 嶗 崍 崧 崦 崮 崤 崞 崆 崛 嶸 崾 崴 崽 嵬 嵛 嵯 E1D0 嶁 嵫 嵋 嵊 嵩 嵴 嶂 嶙 嶝 豳 嶷 巔 彳 彷 徂 徇 E1E0 徉 后 徠 徙 徜 徨 徭 徵 徼 衢 彡 犭 犰 犴 獷 獁 E1F0 狃 狁 狎 狍 狒 狨 獪 狩 猻 狴 狷 猁 狳 獫 狺 E2A0 狻 猗 猓 玀 猊 猞 猝 獼 猢 猹 猥 猬 猸 猱 獐 E2B0 獍 獗 獠 獬 獯 獾 舛 夥 飧 夤 夂 飠 餳 飩 餼 飪 E2C0 飫 飭 飴 餉 餑 余 餛 餷 餿 饃 饈 饉 饊 饌 饢 庀 E2D0 廡 庋 庖 庥 庠 庹 庵 庾 庳 賡 廒 廑 廛 廨 廪 膺 E2E0 忄 忉 忖 懺 憮 忮 慪 忡 忤 愾 悵 愴 忪 忭 忸 怙 E2F0 怵 怦 怛 怏 怍 怩 怫 怊 懌 怡 慟 懨 惻 愷 恂 E3A0 恪 惲 悖 悚 慳 悝 悃 悒 悌 悛 愜 悻 悱 惝 惘 E3B0 惆 惚 悴 愠 憒 愕 愣 惴 愀 愎 愫 慊 慵 憬 憔 憧 E3C0 憷 懔 懵 忝 隳 閂 閆 闈 閎 閔 閌 闥 閭 閫 鬮 閬 E3D0 閾 閶 鬩 閿 閽 閼 闃 闋 闔 闐 闕 闞 丬 爿 戕 氵 E3E0 汔 汜 汊 灃 沅 沐 沔 沌 汨 汩 汴 汶 沆 潙 泐 泔 E3F0 沭 瀧 瀘 泱 泗 沲 泠 泖 濼 泫 泮 沱 泓 泯 涇 E4A0 洹 洧 洌 浹 湞 洇 洄 洙 洎 洫 澮 洮 洵 洚 瀏 E4B0 滸 潯 洳 涑 浯 淶 潿 浞 涓 涔 浜 浠 浼 浣 渚 淇 E4C0 淅 淞 瀆 涿 淠 澠 淦 淝 淙 瀋 涫 渌 涮 渫 湮 湎 E4D0 湫 溲 湟 溆 湓 湔 渲 渥 湄 灧 溱 溘 灄 漭 瀅 溥 E4E0 溧 溽 溻 溷 潷 溴 滏 溏 滂 溟 潢 瀠 瀟 漤 漕 滹 E4F0 漯 漶 瀲 潴 漪 漉 漩 澉 澍 澌 潸 潲 潼 潺 瀨 E5A0 濉 澧 澹 澶 濂 濡 濮 濞 濠 濯 瀚 瀣 瀛 瀹 瀵 E5B0 灝 灞 宀 宄 宕 宓 宥 宸 甯 騫 搴 寤 寮 褰 寰 蹇 E5C0 謇 辶 迓 迕 迥 迮 迤 邇 迦 逕 迨 逅 逄 逋 邐 逑 E5D0 逍 逖 逡 逵 逶 逭 逯 遄 遑 遒 遐 遨 遘 遢 遛 暹 E5E0 遴 遽 邂 邈 邃 邋 彐 彗 彖 彘 尻 咫 屐 屙 孱 屣 E5F0 屨 羼 弳 弩 弭 艴 弼 鬻 屮 妁 妃 妍 嫵 嫗 妣 E6A0 妗 姊 嬀 妞 妤 姒 妲 妯 姗 妾 婭 嬈 姝 孌 姣 E6B0 姘 姹 娌 娉 媧 嫻 娑 娣 娓 婀 婧 婊 婕 娼 婢 嬋 E6C0 胬 媪 媛 婷 婺 媾 嫫 媲 嬡 嬪 媸 嫠 嫣 嬙 嫖 嫦 E6D0 嫘 嫜 嬉 嬗 嬖 嬲 嬷 孀 尕 尜 孚 孥 孳 孑 孓 孢 E6E0 駔 駟 駙 騶 驛 駑 駘 驍 驊 駢 驪 騏 騍 騅 驂 騭 E6F0 騖 驁 騮 騸 驃 驄 驏 驥 驤 糹 紆 紂 紇 紈 纊 E7A0 紜 紕 紓 紺 紲 紱 縐 紼 絀 紿 絝 絎 絳 綆 綃 E7B0 綈 綾 綺 緋 緔 緄 綞 綬 綹 綣 綰 緇 緙 緗 緹 緲 E7C0 繢 緦 緶 緱 縋 緡 縉 縝 縟 縞 縭 縊 縑 繽 縹 縵 E7D0 縲 繆 繅 纈 繚 繒 繮 繾 繰 繯 纘 幺 畿 巛 甾 邕 E7E0 玎 璣 瑋 玢 玟 珏 珂 瓏 玷 玳 珀 珉 珈 珥 珙 頊 E7F0 琊 珩 珧 珞 璽 琿 璉 琪 瑛 琦 琥 琨 琰 琮 琬 E8A0 琛 琚 瑁 瑜 瑗 瑕 瑙 璦 瑭 瑾 璜 瓔 璀 璁 璇 E8B0 璋 璞 璨 璩 璐 璧 瓚 璺 韙 韞 韜 杌 杓 杞 杈 榪 E8C0 櫪 枇 杪 杳 枘 梘 杵 棖 樅 梟 枋 杷 杼 柰 櫛 柘 E8D0 櫳 柩 枰 櫨 柙 枵 柚 枳 柝 栀 柃 枸 柢 櫟 柁 檉 E8E0 栲 栳 椏 橈 桎 楨 桄 榿 梃 栝 桕 樺 桁 檜 桀 欒 E8F0 桊 桉 栩 梵 梏 桴 桷 梓 桫 欞 楮 棼 櫝 槧 棹 E9A0 欏 棰 椋 椁 楗 棣 椐 楱 椹 楠 楂 楝 欖 楫 榀 E9B0 榘 楸 椴 槌 櫬 櫚 槎 櫸 楦 楣 楹 榛 榧 榻 榫 榭 E9C0 槔 榱 槁 槊 檳 榕 櫧 榍 槿 檣 槭 樗 樘 橥 槲 橄 E9D0 樾 檠 橐 橛 樵 檎 櫓 樽 樨 橘 櫞 檑 檐 檩 檗 檫 E9E0 猷 獒 殁 殂 殤 殄 殞 殮 殍 殫 殛 殯 殪 軔 軛 軲 E9F0 軻 轤 軹 軼 軫 軤 轢 軺 軾 輊 輇 輅 輒 輦 輞 EAA0 輟 輜 輳 轆 轔 軎 戔 戧 戛 戟 戢 戡 戥 戤 戬 EAB0 臧 甌 瓴 瓿 甏 甑 甓 攴 旮 旯 旰 昊 曇 杲 昃 昕 EAC0 昀 炅 曷 昝 昴 昱 昶 昵 耆 晟 曄 晁 晏 暉 晡 晗 EAD0 晷 暄 暌 曖 暝 暾 曛 曜 曦 曩 賁 貰 貺 貽 贄 貲 EAE0 賅 贐 賑 賚 賕 賫 賧 賻 覘 覬 覡 覿 覦 覯 覲 覷 EAF0 牮 犟 牝 牦 牯 牾 牿 犄 犋 犍 犏 犒 挈 挲 掰 EBA0 搿 擘 耄 毪 毳 毽 毿 毹 氅 氌 氆 氍 氕 氘 氙 EBB0 氚 氡 氬 氤 氪 氲 攵 敕 敫 牘 牒 牖 爰 虢 刖 肟 EBC0 肜 肓 肼 朊 肽 肱 肫 肭 肴 肷 朧 腖 胩 臚 胛 胂 EBD0 胄 胙 胍 胗 朐 胝 脛 胱 胴 胭 膾 脎 胲 胼 朕 脒 EBE0 豚 腡 脞 脬 脘 脲 腈 腌 腓 腴 腙 腚 腱 腠 腩 腼 EBF0 腽 腭 腧 塍 媵 膈 膂 臏 滕 膣 膪 臌 朦 臊 膻 ECA0 臁 膦 歟 欷 欹 歃 歆 歙 颮 颯 颶 颼 飆 飈 殳 ECB0 彀 轂 觳 斐 齏 斕 於 旆 旄 旃 旌 旎 旒 旖 煬 煒 ECC0 炖 熗 炻 烀 炷 炫 炱 燁 烊 焐 焓 燜 焯 焱 煳 煜 ECD0 煨 煅 煲 煊 煸 煺 熘 熳 熵 熨 熠 燠 燔 燧 燹 爝 ECE0 爨 灬 燾 煦 熹 戾 戽 扃 扈 扉 礻 祀 祆 祉 祛 祜 ECF0 祓 祚 禰 祗 祠 禎 祧 祺 禪 禊 禚 禧 禳 忑 忐 EDA0 懟 恝 恚 恧 恁 恙 恣 慤 愆 愍 慝 憩 憝 懋 懣 EDB0 戇 肀 聿 沓 澩 淼 磯 矸 碭 砉 硨 砘 砑 斫 砭 碸 EDC0 砝 砹 礪 礱 砟 砼 砥 砬 砣 砩 硎 硭 硤 磽 砦 硐 EDD0 硇 硌 硪 磧 碓 碚 碇 磣 碡 碣 碲 碹 碥 磔 磙 磉 EDE0 磬 磲 礅 磴 礓 礤 礞 礴 龕 黹 黻 黼 盱 眄 瞘 盹 EDF0 眇 眈 眚 眢 眙 眭 眦 眵 眸 睞 瞼 睇 睃 睚 睨 EEA0 睢 睥 睿 瞍 睽 瞀 瞌 瞑 瞟 瞠 瞰 瞵 瞽 町 畀 EEB0 畎 畋 畈 畛 畲 畹 疃 罘 罡 罟 詈 罨 羆 罱 罹 羈 EEC0 罾 盍 盥 蠲 釒 釓 釔 釙 釗 釕 釷 釧 釤 鍆 釵 釹 EED0 鈈 鈦 鉅 鈑 鈐 鈁 鈧 鈄 鈥 鈀 鈺 鉦 鈷 鈳 鉕 鈽 EEE0 鈸 鉞 鉬 鉭 鈿 鑠 鈰 鉉 鉈 鉍 鈮 鈹 鐸 銬 銠 鉺 EEF0 銪 鋮 鋏 鐃 鋣 鐺 銱 銦 鎧 銖 鋌 銩 鏵 銓 鉿 EFA0 鎩 銚 錚 銫 銃 鐋 銨 銣 鐒 錸 鋱 鏗 鋥 鋰 鋯 EFB0 鋨 銼 鋝 鋶 鐦 鐧 鋃 鋟 鋦 錒 錆 鍩 錛 鍀 錁 錕 EFC0 錮 鍃 錇 錈 錟 錙 鍥 鍇 鍶 鍔 鍤 鎪 鍰 鎄 鏤 鏘 EFD0 鐨 鎇 鏌 鎘 鎸 鎿 鎦 鎰 鎵 鑌 鏢 鏜 鏝 鏍 鏞 鏃 EFE0 鏇 鏑 鐔 鐝 鏷 鑥 鐓 鑭 鐠 鑹 鏹 鐙 鑊 鐲 鐿 鑔 EFF0 鑣 鍾 矧 矬 雉 秕 秭 秣 秫 稆 嵇 稃 稂 稞 稔 F0A0 稹 稷 穡 黏 馥 穰 皈 皎 皓 皙 皤 瓞 瓠 甬 鳩 F0B0 鳶 鴇 鴆 鴣 鶇 鸕 鴝 鴟 鷥 鴯 鷙 鴰 鵂 鸞 鵓 鸝 F0C0 鵠 鵒 鷳 鵜 鵡 鶓 鵪 鵯 鶉 鶘 鶚 鷀 鶥 鶩 鷂 鶼 F0D0 鸚 鷓 鷚 鷯 鷦 鷲 鷸 鸌 鷺 鸛 疒 疔 癤 癘 疝 癧 F0E0 疣 疳 疴 疸 痄 疱 疰 痃 痂 瘂 痍 痣 癆 痦 痤 癇 F0F0 痧 瘃 痱 痼 痿 瘐 瘀 癉 瘌 瘞 瘊 瘥 瘻 瘕 瘙 F1A0 瘛 瘼 瘢 瘠 癀 瘭 瘰 癭 瘵 癃 癮 瘳 癍 癩 癔 F1B0 癜 癖 癲 癯 翊 竦 穸 穹 窀 窆 窈 窕 竇 窠 窬 窨 F1C0 窶 窳 衤 衩 衲 衽 衿 袂 袢 襠 袷 袼 裉 褳 裎 襝 F1D0 襇 裱 褚 裼 裨 裾 裰 褡 褙 褓 褸 褊 襤 褫 褶 襁 F1E0 襦 襻 疋 胥 皸 皴 矜 耒 耔 耖 耜 耠 耮 耥 耦 耬 F1F0 耩 耨 耱 耋 耵 聃 聆 聹 聒 聵 聱 覃 頇 頎 頏 F2A0 頡 頜 潁 頦 頷 顎 顓 顳 顢 顙 顥 顬 顰 虍 虔 F2B0 虬 蟣 蠆 虺 虼 虻 蚨 蚍 蚋 蜆 蚝 蚧 蚣 蚪 蚓 蚩 F2C0 蚶 蛄 蚵 蠣 蚰 蚺 蚱 蚯 蛉 蟶 蚴 蛩 蛺 蟯 蛭 螄 F2D0 蛐 蜓 蛞 蠐 蛟 蛘 蛑 蜃 蜇 蛸 蜈 蜊 蜍 蜉 蜣 蜻 F2E0 蜞 蜥 蜮 蜚 蜾 蟈 蜴 蜱 蜩 蜷 蜿 螂 蜢 蝽 蠑 蝻 F2F0 蝠 蝰 蝌 蝮 螋 蝓 蝣 螻 蝤 蝙 蝥 螓 螯 蟎 蟒 F3A0 蟆 螈 螅 螭 螗 螃 螫 蟥 螬 螵 螳 蟋 蟓 螽 蟑 F3B0 蟀 蟊 蟛 蟪 蟠 蟮 蠖 蠓 蟾 蠊 蠛 蠡 蠹 蠼 缶 罌 F3C0 罄 罅 舐 竺 竽 笈 篤 笄 筧 笊 笫 笏 筇 笸 笪 笙 F3D0 笮 笱 笠 笥 笤 笳 籩 笞 筘 篳 筅 筵 筌 筝 筠 筮 F3E0 筻 筢 筲 筱 箐 簀 篋 箸 箬 箝 籜 箅 簞 箜 箢 簫 F3F0 箴 簣 篁 篌 篝 篚 篥 篦 篪 簌 篾 篼 簏 籪 簋 F4A0 簟 簪 簦 簸 籟 籀 臾 舁 舂 舄 臬 衄 舡 舢 艤 F4B0 舭 舯 舨 舫 舸 艫 舳 舴 舾 艄 艉 艋 艏 艚 艟 艨 F4C0 衾 裊 袈 裘 裟 襞 羝 羥 羧 羯 羰 羲 籼 敉 粑 糲 F4D0 糶 粞 粢 粲 粼 粽 糝 糇 糌 糍 糈 糅 糗 糨 艮 暨 F4E0 羿 翎 翕 翥 翡 翦 翩 翮 翳 糸 縶 綦 綮 繇 纛 麩 F4F0 麴 赳 趄 趔 趑 趲 赧 赭 豇 豉 酊 酐 酎 酏 酤 F5A0 酢 酡 酰 酩 酯 釅 釃 酲 酴 酹 醌 醅 醐 醍 醑 F5B0 醢 醣 醪 醭 醮 醯 醵 醴 醺 豕 鹺 躉 跫 踅 蹙 蹩 F5C0 趵 趿 趼 趺 蹌 跖 跗 跚 躒 跎 跏 跛 跆 跬 蹺 蹕 F5D0 跣 躚 躋 跤 踉 跽 踔 踝 踟 躓 踮 踣 躑 踺 蹀 踹 F5E0 踵 踽 踱 蹉 蹁 蹂 躡 蹣 蹊 蹰 蹶 蹼 蹯 蹴 躅 躪 F5F0 躔 躐 躦 躞 豸 貂 貊 貅 貘 貔 斛 觖 觴 觚 觜 F6A0 觥 觫 觶 訾 謦 靚 雩 靂 雯 霆 霽 霈 霏 霎 霪 F6B0 靄 霰 霾 齔 齟 齙 齠 齜 齦 齬 齪 齷 黽 黿 鼉 隹 F6C0 隼 隽 雎 雒 瞿 讎 銎 鑾 鋈 鏨 鍪 鏊 鎏 鐾 鑫 魷 F6D0 魴 鮁 鮃 鮎 鱸 穌 鮒 鱟 鮐 鮭 鮚 鮪 鮞 鱭 鮫 鮝 F6E0 鱘 鯁 鱺 鰱 鰹 鰣 鰷 鯀 鯊 鯇 鯽 鯖 鯪 鯫 鯡 鯤 F6F0 鯧 鯝 鯢 鯰 鯛 鯴 鯔 鱝 鰈 鰐 鰍 鰒 鰉 鯿 鰠 F7A0 鰲 鰭 鰨 鰥 鰩 鰳 鰾 鱈 鰻 鰵 鱅 鱖 鱔 鱒 鱧 F7B0 靼 鞅 韃 鞽 鞔 韉 鞫 鞣 鞲 鞴 骱 骰 骷 鶻 骶 骺 F7C0 骼 髁 髀 髏 髂 髖 髕 髑 魅 魃 魘 魎 魈 魍 魑 饗 F7D0 饜 餮 饕 饔 髟 髡 髦 髯 髫 髻 髭 髹 鬈 鬏 鬢 鬟 F7E0 鬣 么 麾 縻 麂 麇 麈 麋 麒 鏖 麝 麟 黛 黜 黝 黠 F7F0 黟 黢 黷 黧 黥 黲 黯 鼢 鼬 鼯 鼹 鼷 鼽 鼾 齄 F8A0 襬 闆 錶 彆 蔔 纔 厂 冲 丑 齣 噹 党 淀 鼕 斗 F8B0 噁 髮 范 丰 複 干 穀 颳 广 閤 鬍 划 迴 彙 穫 飢 F8C0 几 傢 价 荐 薑 儘 据 捲 剋 夸 睏 蜡 腊 纍 里 曆 F8D0 帘 瞭 鹵 囉 黴 濛 懞 矇 瀰 麵 衊 闢 苹 凭 扑 仆 F8E0 朴 韆 籤 縴 鞦 麯 确 舍 术 松 囌 台 颱 檯 罎 涂 F8F0 糰 万 係 繫 鹹 嚮 鬚 葯 叶 郁 禦 籲 愿 云 髒 F9A0 症 隻 只 緻 製 种 硃 筑 准 简繁对照表 GB/T 12345-1990 是 GB/T 2312-1980 的繁体版,即:相同码位的字符,GB/T 12345-1990 的繁体字与 GB/T 2312-1980 的字为简繁关系。没有繁体字的字,GB/T 12345-1990 的字符与 GB/T 2312-1980 的字符一致。 下表给出了同一编码的 GB/T 12345-1990 繁体字和 GB/T 2312-1980 简体字的字符对应关系。GB/T 12345-1990 给出了2123个繁体字。 编码 繁体 简体 编码 繁体 简体 编码 繁体 简体 编码 繁体 简体 B0A8 皚 皑 C1FA 龍 龙 D4B5 緣 缘 E7DA 纘 缵 B0AA 藹 蔼 C1FB 聾 聋 D4B6 遠 远 E7E1 璣 玑 B0AD 礙 碍 C1FC 嚨 咙 D4B8 願 愿 E7E2 瑋 玮 B0AE 愛 爱 C1FD 籠 笼 D4BC 約 约 E7E7 瓏 珑 B0B9 骯 肮 C2A2 壟 垄 D4BE 躍 跃 E7EF 頊 顼 B0C0 襖 袄 C2A3 攏 拢 D4BF 鑰 钥 E7F4 璽 玺 B0D3 壩 坝 C2A4 隴 陇 D4C4 閲 阅 E7F5 琿 珲 B0D5 罷 罢 C2A5 樓 楼 D4C6 雲 云 E7F6 璉 琏 B0DA 擺 摆 C2A6 婁 娄 D4C7 鄖 郧 E8A8 璦 瑷 B0DC 敗 败 C2A7 摟 搂 D4C9 隕 陨 E8AC 瓔 璎 B0E4 頒 颁 C2A8 簍 篓 D4CB 運 运 E8B6 瓚 瓒 B0EC 辦 办 C2AB 蘆 芦 D4CC 藴 蕴 E8B8 韙 韪 B0ED 絆 绊 C2AC 盧 卢 D4CD 醖 酝 E8B9 韞 韫 B0EF 幫 帮 C2AD 顱 颅 D4CE 暈 晕 E8BA 韜 韬 B0F3 綁 绑 C2AE 廬 庐 D4D3 雜 杂 E8BF 榪 杩 B0F7 鎊 镑 C2AF 爐 炉 D4D8 載 载 E8C0 櫪 枥 B0F9 謗 谤 C2B0 擄 掳 D4DC 攢 攒 E8C5 梘 枧 B1A5 飽 饱 C2B1 滷 卤 D4DD 暫 暂 E8C7 棖 枨 B1A6 寶 宝 C2B2 虜 虏 D4DE 贊 赞 E8C8 樅 枞 B1A8 報 报 C2B3 魯 鲁 D4DF 贜 赃 E8C9 梟 枭 B1AB 鮑 鲍 C2B8 賂 赂 D4E0 臟 脏 E8CE 櫛 栉 B1B2 輩 辈 C2BC 録 录 D4E4 鑿 凿 E8D0 櫳 栊 B1B4 貝 贝 C2BD 陸 陆 D4E6 棗 枣 E8D3 櫨 栌 B1B5 鋇 钡 C2BF 驢 驴 D4EE 竈 灶 E8DD 櫟 栎 B1B7 狽 狈 C2C1 鋁 铝 D4F0 責 责 E8DF 檉 柽 B1B8 備 备 C2C5 屢 屡 D4F1 擇 择 E8E2 椏 桠 B1B9 憊 惫 C2C6 縷 缕 D4F2 則 则 E8E3 橈 桡 B1C1 綳 绷 C2C7 慮 虑 D4F3 澤 泽 E8E5 楨 桢 B1CA 筆 笔 C2CB 濾 滤 D4F4 賊 贼 E8E7 榿 桤 B1CF 畢 毕 C2CC 緑 绿 D4F9 贈 赠 E8EB 樺 桦 B1D0 斃 毙 C2CD 巒 峦 D4FE 軋 轧 E8ED 檜 桧 B1D2 幣 币 C2CE 攣 挛 D5A1 鍘 铡 E8EF 欒 栾 B1D5 閉 闭 C2CF 孿 孪 D5A2 閘 闸 E8F9 欞 棂 B1DF 邊 边 C2D0 灤 滦 D5A9 詐 诈 E8FC 櫝 椟 B1E0 編 编 C2D2 亂 乱 D5AB 齋 斋 E8FD 槧 椠 B1E1 貶 贬 C2D5 掄 抡 D5AE 債 债 E9A1 欏 椤 B1E4 變 变 C2D6 輪 轮 D5B1 氈 毡 E9AD 欖 榄 B1E7 辯 辩 C2D7 倫 伦 D5B5 盞 盏 E9B4 櫬 榇 B1E8 辮 辫 C2D8 侖 仑 D5B6 斬 斩 E9B5 櫚 榈 B1EA 標 标 C2D9 淪 沦 D5B7 輾 辗 E9B7 櫸 榉 B1EE 鱉 鳖 C2DA 綸 纶 D5B8 嶄 崭 E9C4 檳 槟 B1F1 癟 瘪 C2DB 論 论 D5BB 棧 栈 E9C6 櫧 槠 B1F4 瀕 濒 C2DC 蘿 萝 D5BD 戰 战 E9C9 檣 樯 B1F5 濱 滨 C2DE 羅 罗 D5C0 綻 绽 E9D6 櫓 橹 B1F6 賓 宾 C2DF 邏 逻 D5C5 張 张 E9DA 櫞 橼 B1F7 擯 摈 C2E0 鑼 锣 D5C7 漲 涨 E9E4 殤 殇 B1FD 餅 饼 C2E1 籮 箩 D5CA 帳 帐 E9E6 殞 殒 B2A6 撥 拨 C2E2 騾 骡 D5CB 賬 账 E9E7 殮 殓 B2A7 鉢 钵 C2E6 駱 骆 D5CD 脹 胀 E9E9 殫 殚 B2AC 鉑 铂 C2E7 絡 络 D5D4 趙 赵 E9EB 殯 殡 B2B5 駁 驳 C2E8 媽 妈 D5DD 蟄 蛰 E9ED 軔 轫 B2B9 補 补 C2EA 瑪 玛 D5DE 轍 辙 E9EE 軛 轭 B2C6 財 财 C2EB 碼 码 D5E0 鍺 锗 E9EF 軲 轱 B2CE 參 参 C2EC 螞 蚂 D5E2 這 这 E9F0 軻 轲 B2CF 蠶 蚕 C2ED 馬 马 D5EA 貞 贞 E9F1 轤 轳 B2D0 殘 残 C2EE 駡 骂 D5EB 針 针 E9F2 軹 轵 B2D1 慚 惭 C2F0 嗎 吗 D5EC 偵 侦 E9F3 軼 轶 B2D2 慘 惨 C2F2 買 买 D5EF 診 诊 E9F4 軫 轸 B2D3 燦 灿 C2F3 麥 麦 D5F2 鎮 镇 E9F5 軤 轷 B2D4 蒼 苍 C2F4 賣 卖 D5F3 陣 阵 E9F6 轢 轹 B2D5 艙 舱 C2F5 邁 迈 D6A1 幀 帧 E9F7 軺 轺 B2D6 倉 仓 C2F7 瞞 瞒 D6A2 癥 症 E9F8 軾 轼 B2D7 滄 沧 C2F8 饅 馒 D6A3 鄭 郑 E9F9 輊 轾 B2DE 厠 厕 C2F9 蠻 蛮 D6A4 證 证 E9FA 輇 辁 B2E0 側 侧 C2FA 滿 满 D6AF 織 织 E9FB 輅 辂 B2E2 測 测 C3A1 謾 谩 D6B0 職 职 E9FC 輒 辄 B2E3 層 层 C3AA 錨 锚 D6B4 執 执 E9FD 輦 辇 B2EF 詫 诧 C3AD 鉚 铆 D6BB 衹 只 E9FE 輞 辋 B2F3 攙 搀 C3B3 貿 贸 D6BD 紙 纸 EAA1 輟 辍 B2F4 摻 掺 C3B4 麽 么 D6BF 摯 挚 EAA2 輜 辎 B2F5 蟬 蝉 C3BE 鎂 镁 D6C0 擲 掷 EAA3 輳 辏 B2F6 饞 馋 C3C5 門 门 D6C4 幟 帜 EAA4 轆 辘 B2F7 讒 谗 C3C6 悶 闷 D6CA 質 质 EAA5 轔 辚 B2F8 纏 缠 C3C7 們 们 D6CD 滯 滞 EAA7 戔 戋 B2F9 鏟 铲 C3CC 錳 锰 D6D3 鐘 钟 EAA8 戧 戗 B2FA 産 产 C3CE 夢 梦 D6D5 終 终 EAB1 甌 瓯 B2FB 闡 阐 C3D5 謎 谜 D6D6 種 种 EABC 曇 昙 B2FC 顫 颤 C3D6 彌 弥 D6D7 腫 肿 EACA 曄 晔 B3A1 場 场 C3D9 覓 觅 D6DA 衆 众 EACD 暉 晖 B3A2 嘗 尝 C3E0 綿 绵 D6DF 謅 诌 EAD3 曖 暧 B3A4 長 长 C3E5 緬 缅 D6E1 軸 轴 EADA 賁 贲 B3A5 償 偿 C3ED 廟 庙 D6E5 皺 皱 EADB 貰 贳 B3A6 腸 肠 C3F0 滅 灭 D6E7 晝 昼 EADC 貺 贶 B3A7 廠 厂 C3F5 憫 悯 D6E8 驟 骤 EADD 貽 贻 B3A9 暢 畅 C3F6 閩 闽 D6EE 諸 诸 EADE 贄 贽 B3AE 鈔 钞 C3F9 鳴 鸣 D6EF 誅 诛 EADF 貲 赀 B3B5 車 车 C3FA 銘 铭 D6F2 燭 烛 EAE0 賅 赅 B3B9 徹 彻 C3FD 謬 谬 D6F5 矚 瞩 EAE1 贐 赆 B3BE 塵 尘 C4B1 謀 谋 D6F6 囑 嘱 EAE2 賑 赈 B3C2 陳 陈 C4B6 畝 亩 D6FC 貯 贮 EAE3 賚 赉 B3C4 襯 衬 C4C6 鈉 钠 D6FD 鑄 铸 EAE4 賕 赇 B3C6 稱 称 C4C9 納 纳 D6FE 築 筑 EAE5 賫 赍 B3CD 懲 惩 C4D1 難 难 D7A4 駐 驻 EAE6 賧 赕 B3CF 誠 诚 C4D3 撓 挠 D7A8 專 专 EAE7 賻 赙 B3D2 騁 骋 C4D4 腦 脑 D7A9 磚 砖 EAE8 覘 觇 B3D9 遲 迟 C4D5 惱 恼 D7AA 轉 转 EAE9 覬 觊 B3DB 馳 驰 C4D6 鬧 闹 D7AC 賺 赚 EAEA 覡 觋 B3DD 齒 齿 C4D9 餒 馁 D7AE 樁 桩 EAEB 覿 觌 B3E3 熾 炽 C4E2 擬 拟 D7AF 莊 庄 EAEC 覦 觎 B3E5 衝 冲 C4E5 膩 腻 D7B0 裝 装 EAED 覯 觏 B3E6 蟲 虫 C4EC 攆 撵 D7B1 妝 妆 EAEE 覲 觐 B3E8 寵 宠 C4F0 釀 酿 D7B3 壯 壮 EAEF 覷 觑 B3EB 疇 畴 C4F1 鳥 鸟 D7B4 狀 状 EBA7 毿 毵 B3EC 躊 踌 C4F4 聶 聂 D7B6 錐 锥 EBAA 氌 氇 B3EF 籌 筹 C4F6 嚙 啮 D7B8 贅 赘 EBB2 氬 氩 B3F1 綢 绸 C4F7 鑷 镊 D7B9 墜 坠 EBB9 牘 牍 B3F3 醜 丑 C4F8 鎳 镍 D7BA 綴 缀 EBCA 朧 胧 B3FA 鋤 锄 C4FB 檸 柠 D7BB 諄 谆 EBCB 腖 胨 B3FB 雛 雏 C4FC 獰 狞 D7BC 準 准 EBCD 臚 胪 B4A1 礎 础 C4FE 寧 宁 D7C7 濁 浊 EBD6 脛 胫 B4A2 儲 储 C5A1 擰 拧 D7CA 資 资 EBDA 膾 脍 B4A5 觸 触 C5A2 濘 泞 D7D5 漬 渍 EBE1 腡 脶 B4A6 處 处 C5A5 鈕 钮 D7DB 綜 综 EBF7 臏 膑 B4AB 傳 传 C5A6 紐 纽 D7DC 總 总 ECA3 歟 欤 B4AF 瘡 疮 C5A7 膿 脓 D7DD 縱 纵 ECA9 颮 飑 B4B3 闖 闯 C5A8 濃 浓 D7DE 鄒 邹 ECAA 颯 飒 B4B4 創 创 C5A9 農 农 D7E7 詛 诅 ECAB 颶 飓 B4B8 錘 锤 C5B1 瘧 疟 D7E9 組 组 ECAC 颼 飕 B4BF 純 纯 C5B5 諾 诺 D7EA 鑽 钻 ECAD 飆 飙 B4C2 綽 绰 C5B7 歐 欧 D8C4 嗇 啬 ECAE 飈 飚 B4C7 辭 辞 C5B8 鷗 鸥 D8C7 厙 厍 ECB1 轂 毂 B4CA 詞 词 C5B9 毆 殴 D8C9 厴 厣 ECB4 齏 齑 B4CD 賜 赐 C5BB 嘔 呕 D8CC 靨 靥 ECB5 斕 斓 B4CF 聰 聪 C5BD 漚 沤 D8CD 贋 赝 ECBE 煬 炀 B4D3 從 从 C5CC 盤 盘 D8D0 匭 匦 ECBF 煒 炜 B4D4 叢 丛 C5D3 龐 庞 D8D1 匱 匮 ECC1 熗 炝 B4DA 躥 蹿 C5E2 賠 赔 D8D3 賾 赜 ECC7 燁 烨 B4DC 竄 窜 C5E7 噴 喷 D8D9 剄 刭 ECCB 燜 焖 B4ED 錯 错 C5F4 鵬 鹏 D8DB 劌 刿 ECE2 燾 焘 B4EF 達 达 C6AD 騙 骗 D8DC 剴 剀 ECF2 禰 祢 B4F8 帶 带 C6AE 飄 飘 D8F1 傴 伛 ECF5 禎 祯 B4FB 貸 贷 C6B5 頻 频 D8F6 倀 伥 ECF8 禪 禅 B5A3 擔 担 C6B6 貧 贫 D8F7 傖 伧 EDA1 懟 怼 B5A5 單 单 C6BB 蘋 苹 D9AD 儕 侪 EDA8 慤 悫 B5A6 鄲 郸 C6BE 憑 凭 D9AF 儂 侬 EDAF 懣 懑 B5A7 撣 掸 C6C0 評 评 D9B1 儔 俦 EDB0 戇 戆 B5A8 膽 胆 C6C3 潑 泼 D9B2 儼 俨 EDB4 澩 泶 B5AC 憚 惮 C6C4 頗 颇 D9B3 儷 俪 EDB6 磯 矶 B5AE 誕 诞 C6CB 撲 扑 D9C7 僨 偾 EDB8 碭 砀 B5AF 彈 弹 C6CC 鋪 铺 D9CD 僂 偻 EDBA 硨 砗 B5B1 當 当 C6CD 僕 仆 D9CE 儻 傥 EDBF 碸 砜 B5B2 擋 挡 C6D3 樸 朴 D9CF 儐 傧 EDC2 礪 砺 B5B3 黨 党 C6D7 譜 谱 D9D0 儺 傩 EDC3 礱 砻 B5B4 蕩 荡 C6EA 臍 脐 D9DD 僉 佥 EDCC 硤 硖 B5B5 檔 档 C6EB 齊 齐 D9E1 糴 籴 EDCD 磽 硗 B5B7 搗 捣 C6EF 騎 骑 D9E4 黌 黉 EDD3 磧 碛 B5BA 島 岛 C6F1 豈 岂 D9E6 囅 冁 EDD7 磣 碜 B5BB 禱 祷 C6F4 啓 启 D9EC 鳬 凫 EDE8 龕 龛 B5BC 導 导 C6F8 氣 气 D9F4 褻 亵 EDEE 瞘 眍 B5C6 燈 灯 C6FD 訖 讫 D9F5 臠 脔 EDF9 睞 睐 B5CB 鄧 邓 C7A3 牽 牵 DAA5 訁 讠 EDFA 瞼 睑 B5D0 敵 敌 C7A5 釺 钎 DAA6 訐 讦 EEBC 羆 罴 B5D3 滌 涤 C7A6 鉛 铅 DAA7 訌 讧 EEBF 羈 羁 B5DD 遞 递 C7A8 遷 迁 DAA8 訕 讪 EEC4 釒 钅 B5DE 締 缔 C7A9 簽 签 DAA9 謳 讴 EEC5 釓 钆 B5DF 顛 颠 C7AB 謙 谦 DAAA 詎 讵 EEC6 釔 钇 B5E3 點 点 C7AE 錢 钱 DAAB 訥 讷 EEC7 釙 钋 B5E6 墊 垫 C7AF 鉗 钳 DAAC 詁 诂 EEC8 釗 钊 B5E7 電 电 C7B3 淺 浅 DAAD 訶 诃 EEC9 釕 钌 B5ED 澱 淀 C7B4 譴 谴 DAAE 詆 诋 EECA 釷 钍 B5F6 釣 钓 C7B5 塹 堑 DAAF 詔 诏 EECB 釧 钏 B5F7 調 调 C7B9 槍 枪 DAB0 詘 诎 EECC 釤 钐 B5FD 諜 谍 C7BA 嗆 呛 DAB1 詒 诒 EECD 鍆 钔 B6A4 釘 钉 C7BD 墻 墙 DAB2 誆 诓 EECE 釵 钗 B6A5 頂 顶 C7BE 薔 蔷 DAB3 誄 诔 EECF 釹 钕 B6A7 錠 锭 C7C0 搶 抢 DAB4 詿 诖 EED0 鈈 钚 B6A9 訂 订 C7C2 鍬 锹 DAB5 詰 诘 EED1 鈦 钛 B6AB 東 东 C7C5 橋 桥 DAB6 詼 诙 EED2 鉅 钜 B6AF 動 动 C7C7 喬 乔 DAB7 詵 诜 EED3 鈑 钣 B6B0 棟 栋 C7C8 僑 侨 DAB8 詬 诟 EED4 鈐 钤 B6B3 凍 冻 C7CC 翹 翘 DAB9 詮 诠 EED5 鈁 钫 B6B7 鬥 斗 C7CF 竅 窍 DABA 諍 诤 EED6 鈧 钪 B6BF 犢 犊 C7D4 竊 窃 DABB 諢 诨 EED7 鈄 钭 B6C0 獨 独 C7D5 欽 钦 DABC 詡 诩 EED8 鈥 钬 B6C1 讀 读 C7D7 親 亲 DABD 誚 诮 EED9 鈀 钯 B6C4 賭 赌 C7DE 寢 寝 DABE 誥 诰 EEDA 鈺 钰 B6C6 鍍 镀 C7E1 輕 轻 DABF 誑 诳 EEDB 鉦 钲 B6CD 鍛 锻 C7E2 氫 氢 DAC0 誒 诶 EEDC 鈷 钴 B6CF 斷 断 C7E3 傾 倾 DAC1 諏 诹 EEDD 鈳 钶 B6D0 緞 缎 C7EA 頃 顷 DAC2 諑 诼 EEDE 鉕 钷 B6D3 隊 队 C7EB 請 请 DAC3 諉 诿 EEDF 鈽 钸 B6D4 對 对 C7EC 慶 庆 DAC4 諛 谀 EEE0 鈸 钹 B6D6 噸 吨 C7ED 瓊 琼 DAC5 諗 谂 EEE1 鉞 钺 B6D9 頓 顿 C7EE 窮 穷 DAC6 諂 谄 EEE2 鉬 钼 B6DB 鈍 钝 C7F7 趨 趋 DAC7 誶 谇 EEE3 鉭 钽 B6E1 奪 夺 C7F8 區 区 DAC8 諶 谌 EEE4 鈿 钿 B6E9 墮 堕 C7FB 軀 躯 DAC9 諫 谏 EEE5 鑠 铄 B6EC 鵝 鹅 C7FD 驅 驱 DACA 謔 谑 EEE6 鈰 铈 B6EE 額 额 C8A3 齲 龋 DACB 謁 谒 EEE7 鉉 铉 B6EF 訛 讹 C8A7 顴 颧 DACC 諤 谔 EEE8 鉈 铊 B6F1 惡 恶 C8A8 權 权 DACD 諭 谕 EEE9 鉍 铋 B6F6 餓 饿 C8B0 勸 劝 DACE 諼 谖 EEEA 鈮 铌 B6F9 兒 儿 C8B5 鵲 鹊 DACF 諳 谙 EEEB 鈹 铍 B6FB 爾 尔 C8B7 確 确 DAD0 諦 谛 EEEC 鐸 铎 B6FC 餌 饵 C8C3 讓 让 DAD1 諮 谘 EEED 銬 铐 B7A1 貳 贰 C8C4 饒 饶 DAD2 諞 谝 EEEE 銠 铑 B7A2 發 发 C8C5 擾 扰 DAD3 謨 谟 EEEF 鉺 铒 B7A3 罰 罚 C8C6 繞 绕 DAD4 讜 谠 EEF0 銪 铕 B7A7 閥 阀 C8C8 熱 热 DAD5 謖 谡 EEF1 鋮 铖 B7AF 礬 矾 C8CD 韌 韧 DAD6 謚 谥 EEF2 鋏 铗 B7B0 釩 钒 C8CF 認 认 DAD7 謐 谧 EEF3 鐃 铙 B7B3 煩 烦 C8D2 紉 纫 DAD8 謫 谪 EEF4 鋣 铘 B7B6 範 范 C8D9 榮 荣 DAD9 謭 谫 EEF5 鐺 铛 B7B7 販 贩 C8DE 絨 绒 DADA 譖 谮 EEF6 銱 铞 B7B9 飯 饭 C8ED 軟 软 DADB 譙 谯 EEF7 銦 铟 B7C3 訪 访 C8F1 鋭 锐 DADC 譎 谲 EEF8 鎧 铠 B7C4 紡 纺 C8F2 閏 闰 DADD 讞 谳 EEF9 銖 铢 B7C9 飛 飞 C8F3 潤 润 DADE 譫 谵 EEFA 鋌 铤 B7CC 誹 诽 C8F7 灑 洒 DADF 讖 谶 EEFB 銩 铥 B7CF 廢 废 C8F8 薩 萨 DAEA 陘 陉 EEFC 鏵 铧 B7D1 費 费 C8FA 鰓 鳃 DAF7 鄺 邝 EEFD 銓 铨 B7D7 紛 纷 C8FC 賽 赛 DAF9 鄔 邬 EEFE 鉿 铪 B7D8 墳 坟 C9A1 傘 伞 DAFE 鄴 邺 EFA1 鎩 铩 B7DC 奮 奋 C9A5 喪 丧 DBA3 郟 郏 EFA2 銚 铫 B7DF 憤 愤 C9A7 騷 骚 DBA6 鄶 郐 EFA3 錚 铮 B7E0 糞 粪 C9A8 掃 扫 DBA9 鄆 郓 EFA4 銫 铯 B7E1 豐 丰 C9AC 澀 涩 DBAA 酈 郦 EFA5 銃 铳 B7E3 楓 枫 C9B1 殺 杀 DBBB 芻 刍 EFA6 鐋 铴 B7E6 鋒 锋 C9B4 紗 纱 DBBD 勱 劢 EFA7 銨 铵 B7E7 風 风 C9B8 篩 筛 DBCF 巰 巯 EFA8 銣 铷 B7E8 瘋 疯 C9B9 曬 晒 DBD1 堊 垩 EFA9 鐒 铹 B7EB 馮 冯 C9C1 閃 闪 DBDB 壙 圹 EFAA 錸 铼 B7EC 縫 缝 C9C2 陝 陕 DBDE 壢 坜 EFAB 鋱 铽 B7ED 諷 讽 C9C4 贍 赡 DBE2 壠 垅 EFAC 鏗 铿 B7EF 鳳 凤 C9C9 繕 缮 DBE4 壚 垆 EFAD 鋥 锃 B7F4 膚 肤 C9CB 傷 伤 DBEB 埡 垭 EFAE 鋰 锂 B7F8 輻 辐 C9CD 賞 赏 DBEE 塏 垲 EFAF 鋯 锆 B8A7 撫 抚 C9D5 燒 烧 DBF1 堖 垴 EFB0 鋨 锇 B8A8 輔 辅 C9DC 紹 绍 DBF5 塒 埘 EFB1 銼 锉 B8B3 賦 赋 C9DE 賒 赊 DBF6 堝 埚 EFB2 鋝 锊 B8B4 復 复 C9E1 捨 舍 DBF7 塤 埙 EFB3 鋶 锍 B8BA 負 负 C9E3 攝 摄 DCBC 薌 芗 EFB4 鐦 锎 B8BC 訃 讣 C9E5 懾 慑 DCBF 蕓 芸 EFB5 鐧 锏 B8BE 婦 妇 C9E8 設 设 DCC2 藶 苈 EFB6 鋃 锒 B8BF 縛 缚 C9F0 紳 绅 DCC8 莧 苋 EFB7 鋟 锓 B8C3 該 该 C9F3 審 审 DCC9 萇 苌 EFB8 鋦 锔 B8C6 鈣 钙 C9F4 嬸 婶 DCCA 蓯 苁 EFB9 錒 锕 B8C7 蓋 盖 C9F6 腎 肾 DCD1 苧 苎 EFBA 錆 锖 B8C9 幹 干 C9F8 滲 渗 DCD7 蘢 茏 EFBB 鍩 锘 B8CF 趕 赶 C9F9 聲 声 DCE0 蔦 茑 EFBC 錛 锛 B8D3 贛 赣 C9FE 繩 绳 DCE3 塋 茔 EFBD 鍀 锝 B8D4 岡 冈 CAA4 勝 胜 DCE4 煢 茕 EFBE 錁 锞 B8D5 剛 刚 CAA5 聖 圣 DCE9 蕘 荛 EFBF 錕 锟 B8D6 鋼 钢 CAA6 師 师 DCEA 蓽 荜 EFC0 錮 锢 B8D9 綱 纲 CAA8 獅 狮 DCF1 蕎 荞 EFC1 鍃 锪 B8DA 崗 岗 CAAA 濕 湿 DCF6 薈 荟 EFC2 錇 锫 B8E4 鎬 镐 CAAB 詩 诗 DCF9 薺 荠 EFC3 錈 锩 B8E9 擱 搁 CAB1 時 时 DCFD 犖 荦 EFC4 錟 锬 B8EB 鴿 鸽 CAB4 蝕 蚀 DCFE 滎 荥 EFC5 錙 锱 B8F3 閣 阁 CAB5 實 实 DDA1 蕁 荨 EFC6 鍥 锲 B8F5 鉻 铬 CAB6 識 识 DDA3 藎 荩 EFC7 鍇 锴 B8F6 個 个 CABB 駛 驶 DDA4 蕒 荬 EFC8 鍶 锶 B8F8 給 给 CAC6 勢 势 DDA5 蓀 荪 EFC9 鍔 锷 B9A8 龔 龚 CACA 適 适 DDA6 葒 荭 EFCA 鍤 锸 B9AE 鞏 巩 CACD 釋 释 DDA7 葤 荮 EFCB 鎪 锼 B9B1 貢 贡 CACE 飾 饰 DDAA 蒔 莳 EFCC 鍰 锾 B9B3 鈎 钩 CAD3 視 视 DDAB 萵 莴 EFCD 鎄 锿 B9B5 溝 沟 CAD4 試 试 DDB2 薟 莶 EFCE 鏤 镂 B9B9 構 构 CAD9 壽 寿 DDB5 蕕 莸 EFCF 鏘 锵 B9BA 購 购 CADE 獸 兽 DDBA 鶯 莺 EFD0 鐨 镄 B9C6 蠱 蛊 CAE0 樞 枢 DDBB 蒓 莼 EFD1 鎇 镅 B9CB 顧 顾 CAE4 輸 输 DDD3 縈 萦 EFD2 鏌 镆 B9D0 剮 剐 CAE9 書 书 DDDB 蕆 蒇 EFD3 鎘 镉 B9D8 關 关 CAEA 贖 赎 DDDE 蕢 蒉 EFD4 鎸 镌 B9DB 觀 观 CAF4 屬 属 DDE4 蔞 蒌 EFD5 鎿 镎 B9DD 館 馆 CAF5 術 术 DDEB 驀 蓦 EFD6 鎦 镏 B9DF 慣 惯 CAF7 樹 树 DDF1 蘺 蓠 EFD7 鎰 镒 B9E1 貫 贯 CAFA 竪 竖 DDF6 鎣 蓥 EFD8 鎵 镓 B9E3 廣 广 CAFD 數 数 DDF7 蕷 蓣 EFD9 鑌 镔 B9E6 規 规 CBA7 帥 帅 DDFC 蘞 蔹 EFDA 鏢 镖 B9E9 歸 归 CBAB 雙 双 DDFE 藺 蔺 EFDB 鏜 镗 B9EA 龜 龟 CBAD 誰 谁 DEAD 蘄 蕲 EFDC 鏝 镘 B9EB 閨 闺 CBB3 順 顺 DEB4 藪 薮 EFDD 鏍 镙 B9EC 軌 轨 CBB5 説 说 DEBA 蘚 藓 EFDE 鏞 镛 B9EE 詭 诡 CBB6 碩 硕 DEC6 奩 奁 EFDF 鏃 镞 B9F1 櫃 柜 CBB8 爍 烁 DECF 尷 尴 EFE0 鏇 镟 B9F3 貴 贵 CBBF 絲 丝 DED1 捫 扪 EFE1 鏑 镝 B9F4 劊 刽 CBC7 飼 饲 DED2 摶 抟 EFE2 鐔 镡 B9F5 輥 辊 CBC9 鬆 松 DED8 撟 挢 EFE3 鐝 镢 B9F8 鍋 锅 CBCA 聳 耸 DEE2 摑 掴 EFE4 鏷 镤 B9FA 國 国 CBCB 慫 怂 DEE8 摜 掼 EFE5 鑥 镥 B9FD 過 过 CBCC 頌 颂 DEEC 撳 揿 EFE6 鐓 镦 BAA7 駭 骇 CBCF 訟 讼 DEF3 攄 摅 EFE7 鑭 镧 BAAB 韓 韩 CBD0 誦 诵 DEFC 攖 撄 EFE8 鐠 镨 BABA 漢 汉 CBD3 擻 擞 DFA2 擷 撷 EFE9 鑹 镩 BAC5 號 号 CBD5 蘇 苏 DFA3 擼 撸 EFEA 鏹 镪 BAD2 閡 阂 CBDF 訴 诉 DFA5 攛 撺 EFEB 鐙 镫 BAD7 鶴 鹤 CBE0 肅 肃 DFB4 嘰 叽 EFEC 鑊 镬 BAD8 賀 贺 CBE4 雖 虽 DFBC 嘸 呒 EFED 鐲 镯 BAE4 轟 轰 CBE6 隨 随 DFBD 囈 呓 EFEE 鐿 镱 BAE8 鴻 鸿 CBE7 綏 绥 DFBF 嚦 呖 EFEF 鑔 镲 BAEC 紅 红 CBEA 歲 岁 DFC2 唄 呗 EFF0 鑣 镳 BAF3 後 后 CBEF 孫 孙 DFC3 咼 呙 EFF1 鍾 锺 BAF8 壺 壶 CBF0 損 损 DFCC 嚀 咛 F0A3 穡 穑 BBA4 護 护 CBF5 縮 缩 DFD0 噝 咝 F0AF 鳩 鸠 BBA6 滬 沪 CBF6 瑣 琐 DFD5 噠 哒 F0B0 鳶 鸢 BBA9 嘩 哗 CBF8 鎖 锁 DFD8 嘵 哓 F0B1 鴇 鸨 BBAA 華 华 CCA1 獺 獭 DFD9 嗶 哔 F0B2 鴆 鸩 BBAD 畫 画 CCA2 撻 挞 DFDC 噦 哕 F0B3 鴣 鸪 BBAE 劃 划 CCA8 臺 台 DFE0 噲 哙 F0B4 鶇 鸫 BBB0 話 话 CCAC 態 态 DFE2 嚌 哜 F0B5 鸕 鸬 BBB3 懷 怀 CCAF 攤 摊 DFE6 噥 哝 F0B6 鴝 鸲 BBB5 壞 坏 CCB0 貪 贪 DFE9 嘜 唛 F0B7 鴟 鸱 BBB6 歡 欢 CCB1 癱 瘫 DFEB 嘮 唠 F0B8 鷥 鸶 BBB7 環 环 CCB2 灘 滩 DFEF 嗩 唢 F0B9 鴯 鸸 BBB9 還 还 CCB3 壇 坛 DFF5 嘖 啧 F0BA 鷙 鸷 BBBA 緩 缓 CCB7 譚 谭 DFF9 囀 啭 F0BB 鴰 鸹 BBD1 謊 谎 CCB8 談 谈 E0B6 嘍 喽 F0BC 鵂 鸺 BBD3 揮 挥 CCBE 嘆 叹 E0B7 嚳 喾 F0BD 鸞 鸾 BBD4 輝 辉 CCC0 湯 汤 E0BF 囁 嗫 F0BE 鵓 鹁 BBDF 賄 贿 CCCC 燙 烫 E0C8 噯 嗳 F0BF 鸝 鹂 BBE0 穢 秽 CCCE 濤 涛 E0CE 轡 辔 F0C0 鵠 鹄 BBE1 會 会 CCD0 縧 绦 E0D3 嚶 嘤 F0C1 鵒 鹆 BBE2 燴 烩 CCD6 討 讨 E0E0 嚕 噜 F0C2 鷳 鹇 BBE3 匯 汇 CCDA 騰 腾 E0F0 圇 囵 F0C3 鵜 鹈 BBE4 諱 讳 CCDC 謄 誊 E0F8 幃 帏 F0C4 鵡 鹉 BBE5 誨 诲 CCE0 銻 锑 E0FC 幬 帱 F0C5 鶓 鹋 BBE6 繪 绘 CCE2 題 题 E0FD 幘 帻 F0C6 鵪 鹌 BBE7 葷 荤 CCE5 體 体 E0FE 幗 帼 F0C7 鵯 鹎 BBEB 渾 浑 CCF5 條 条 E1AB 嶇 岖 F0C8 鶉 鹑 BBF1 獲 获 CCF9 貼 贴 E1AD 峴 岘 F0C9 鶘 鹕 BBF5 貨 货 CCFA 鐵 铁 E1B0 嵐 岚 F0CA 鶚 鹗 BBF6 禍 祸 CCFC 廳 厅 E1B4 崬 岽 F0CB 鷀 鹚 BBF7 擊 击 CCFD 聽 听 E1BB 嶧 峄 F0CC 鶥 鹛 BBFA 機 机 CCFE 烴 烃 E1BD 嶠 峤 F0CD 鶩 鹜 BBFD 積 积 CDAD 銅 铜 E1C0 嶗 崂 F0CE 鷂 鹞 BCA2 饑 饥 CDB3 統 统 E1C1 崍 崃 F0CF 鶼 鹣 BCA5 譏 讥 CDB7 頭 头 E1C9 嶸 嵘 F0D0 鸚 鹦 BCA6 鷄 鸡 CDBC 圖 图 E1D0 嶁 嵝 F0D1 鷓 鹧 BCA8 績 绩 CDBF 塗 涂 E1DB 巔 巅 F0D2 鷚 鹨 BCA9 緝 缉 CDC5 團 团 E1E1 后 後 F0D3 鷯 鹩 BCAB 極 极 CDC7 頽 颓 E1E2 徠 徕 F0D4 鷦 鹪 BCAD 輯 辑 CDD2 鴕 鸵 E1EE 獷 犷 F0D5 鷲 鹫 BCB6 級 级 CDD4 馱 驮 E1EF 獁 犸 F0D6 鷸 鹬 BCB7 擠 挤 CDD5 駝 驼 E1F6 獪 狯 F0D7 鸌 鹱 BCB8 幾 几 CDD6 橢 椭 E1F8 猻 狲 F0D8 鷺 鹭 BCBB 薊 蓟 CDDD 窪 洼 E1FD 獫 猃 F0D9 鸛 鹳 BCC1 劑 剂 CDE0 襪 袜 E2A4 玀 猡 F0DC 癤 疖 BCC3 濟 济 CDE4 彎 弯 E2A8 獼 猕 F0DD 癘 疠 BCC6 計 计 CDE5 灣 湾 E2BB 飠 饣 F0DF 癧 疬 BCC7 記 记 CDE7 頑 顽 E2BC 餳 饧 F0E9 瘂 痖 BCCA 際 际 CDF2 萬 万 E2BD 飩 饨 F0EC 癆 痨 BCCC 繼 继 CDF8 網 网 E2BE 餼 饩 F0EF 癇 痫 BCCD 紀 纪 CEA4 韋 韦 E2BF 飪 饪 F0F7 癉 瘅 BCD0 夾 夹 CEA5 違 违 E2C0 飫 饫 F0F9 瘞 瘗 BCD4 莢 荚 CEA7 圍 围 E2C1 飭 饬 F0FC 瘻 瘘 BCD5 頰 颊 CEAA 爲 为 E2C2 飴 饴 F1A8 癭 瘿 BCD6 賈 贾 CEAB 濰 潍 E2C3 餉 饷 F1AB 癮 瘾 BCD8 鉀 钾 CEAC 維 维 E2C4 餑 饽 F1AE 癩 癞 BCDB 價 价 CEAD 葦 苇 E2C5 余 馀 F1B2 癲 癫 BCDD 駕 驾 CEB0 偉 伟 E2C6 餛 馄 F1BC 竇 窦 BCDF 殲 歼 CEB1 僞 伪 E2C7 餷 馇 F1C0 窶 窭 BCE0 監 监 CEB3 緯 纬 E2C8 餿 馊 F1C9 襠 裆 BCE1 堅 坚 CEBD 謂 谓 E2C9 饃 馍 F1CD 褳 裢 BCE3 箋 笺 CEC0 衛 卫 E2CA 饈 馐 F1CF 襝 裣 BCE4 間 间 CEC5 聞 闻 E2CB 饉 馑 F1D0 襇 裥 BCE8 艱 艰 CEC6 紋 纹 E2CC 饊 馓 F1DA 褸 褛 BCEA 緘 缄 CEC8 穩 稳 E2CD 饌 馔 F1DC 襤 褴 BCEB 繭 茧 CECA 問 问 E2CE 饢 馕 F1E4 皸 皲 BCEC 檢 检 CECE 撾 挝 E2D0 廡 庑 F1EC 耮 耢 BCEF 鹼 硷 CECF 蝸 蜗 E2D9 賡 赓 F1EF 耬 耧 BCF0 揀 拣 CED0 渦 涡 E2E3 懺 忏 F1F7 聹 聍 BCF1 撿 捡 CED1 窩 窝 E2E4 憮 怃 F1F9 聵 聩 BCF2 簡 简 CED8 嗚 呜 E2E6 慪 怄 F1FC 頇 顸 BCF3 儉 俭 CED9 鎢 钨 E2E9 愾 忾 F1FD 頎 颀 BCF6 薦 荐 CEDA 烏 乌 E2EA 悵 怅 F1FE 頏 颃 BCF7 檻 槛 CEDC 誣 诬 E2EB 愴 怆 F2A1 頡 颉 BCF8 鑒 鉴 CEDE 無 无 E2F8 懌 怿 F2A2 頜 颌 BCF9 踐 践 CEDF 蕪 芜 E2FA 慟 恸 F2A3 潁 颍 BCFA 賤 贱 CEEB 塢 坞 E2FB 懨 恹 F2A4 頦 颏 BCFB 見 见 CEED 霧 雾 E2FC 惻 恻 F2A5 頷 颔 BCFC 鍵 键 CEF1 務 务 E2FD 愷 恺 F2A6 顎 颚 BDA2 艦 舰 CEF3 誤 误 E3A2 惲 恽 F2A7 顓 颛 BDA3 劍 剑 CEFD 錫 锡 E3A5 慳 悭 F2A8 顳 颞 BDA4 餞 饯 CEFE 犧 牺 E3AB 愜 惬 F2A9 顢 颟 BDA5 漸 渐 CFAE 襲 袭 E3B4 憒 愦 F2AA 顙 颡 BDA6 濺 溅 CFB0 習 习 E3C5 閂 闩 F2AB 顥 颢 BDA7 澗 涧 CFB3 銑 铣 E3C6 閆 闫 F2AC 顬 颥 BDAB 將 将 CFB7 戲 戏 E3C7 闈 闱 F2AD 顰 颦 BDAC 漿 浆 CFB8 細 细 E3C8 閎 闳 F2B1 蟣 虮 BDAF 蔣 蒋 CFBA 蝦 虾 E3C9 閔 闵 F2B2 蠆 虿 BDB0 槳 桨 CFBD 轄 辖 E3CA 閌 闶 F2B9 蜆 蚬 BDB1 奬 奖 CFBF 峽 峡 E3CB 闥 闼 F2C3 蠣 蛎 BDB2 講 讲 CFC0 俠 侠 E3CC 閭 闾 F2C9 蟶 蛏 BDB4 醬 酱 CFC1 狹 狭 E3CD 閫 阃 F2CC 蛺 蛱 BDBA 膠 胶 CFC5 嚇 吓 E3CE 鬮 阄 F2CD 蟯 蛲 BDBD 澆 浇 CFC7 鍁 锨 E3CF 閬 阆 F2CF 螄 蛳 BDBE 驕 骄 CFCA 鮮 鲜 E3D0 閾 阈 F2D3 蠐 蛴 BDBF 嬌 娇 CFCB 纖 纤 E3D1 閶 阊 F2E5 蟈 蝈 BDC1 攪 搅 CFCD 賢 贤 E3D2 鬩 阋 F2EE 蠑 蝾 BDC2 鉸 铰 CFCE 銜 衔 E3D3 閿 阌 F2F7 螻 蝼 BDC3 矯 矫 CFD0 閑 闲 E3D4 閽 阍 F2FD 蟎 螨 BDC4 僥 侥 CFD4 顯 显 E3D5 閼 阏 F3BF 罌 罂 BDC8 餃 饺 CFD5 險 险 E3D6 闃 阒 F3C6 篤 笃 BDC9 繳 缴 CFD6 現 现 E3D7 闋 阕 F3C8 筧 笕 BDCA 絞 绞 CFD7 獻 献 E3D8 闔 阖 F3D6 籩 笾 BDCE 轎 轿 CFD8 縣 县 E3D9 闐 阗 F3D9 篳 筚 BDCF 較 较 CFDA 餡 馅 E3DA 闕 阙 F3E5 簀 箦 BDD7 階 阶 CFDC 憲 宪 E3DB 闞 阚 F3E6 篋 箧 BDDA 節 节 CFDF 綫 线 E3E3 灃 沣 F3EA 籜 箨 BDE0 潔 洁 CFE2 鑲 镶 E3ED 潙 沩 F3EC 簞 箪 BDE1 結 结 CFE7 鄉 乡 E3F1 瀧 泷 F3EF 簫 箫 BDEB 誡 诫 CFEA 詳 详 E3F2 瀘 泸 F3F1 簣 篑 BDF4 緊 紧 CFEC 響 响 E3F8 濼 泺 F3FD 籪 簖 BDF5 錦 锦 CFEE 項 项 E3FE 涇 泾 F4A5 籟 籁 BDF6 僅 仅 CFF4 蕭 萧 E4A4 浹 浃 F4AF 艤 舣 BDF7 謹 谨 CFF9 囂 嚣 E4A5 湞 浈 F4B5 艫 舻 BDF8 進 进 CFFA 銷 销 E4AB 澮 浍 F4C1 裊 袅 BDFD 燼 烬 CFFE 曉 晓 E4AF 瀏 浏 F4C7 羥 羟 BEA1 盡 尽 D0A5 嘯 啸 E4B0 滸 浒 F4CF 糲 粝 BEA2 勁 劲 D0AD 協 协 E4B1 潯 浔 F4D0 糶 粜 BEA5 莖 茎 D0AE 挾 挟 E4B5 淶 涞 F4D6 糝 糁 BEA8 鯨 鲸 D0B2 脅 胁 E4B6 潿 涠 F4EA 縶 絷 BEAA 驚 惊 D0B3 諧 谐 E4C2 瀆 渎 F4EF 麩 麸 BEAD 經 经 D0B4 寫 写 E4C5 澠 渑 F4F5 趲 趱 BEB1 頸 颈 D0BA 瀉 泻 E4C9 瀋 渖 F5A6 釅 酽 BEB5 鏡 镜 D0BB 謝 谢 E4D9 灧 滟 F5A7 釃 酾 BEB6 徑 径 D0BF 鋅 锌 E4DC 灄 滠 F5BA 鹺 鹾 BEB7 痙 痉 D0C6 釁 衅 E4DE 瀅 滢 F5BB 躉 趸 BEBA 競 竞 D0CB 興 兴 E4E4 潷 滗 F5C4 蹌 跄 BEC0 糾 纠 D0E2 銹 锈 E4EB 瀠 潆 F5C8 躒 跞 BEC9 舊 旧 D0E5 綉 绣 E4EC 瀟 潇 F5CE 蹺 跷 BED4 駒 驹 D0EB 須 须 E4F2 瀲 潋 F5CF 蹕 跸 BED9 舉 举 D0ED 許 许 E4FE 瀨 濑 F5D1 躚 跹 BEDD 據 据 D0F7 緒 绪 E5B0 灝 灏 F5D2 躋 跻 BEE2 鋸 锯 D0F8 續 续 E5B9 騫 骞 F5D9 躓 踬 BEE5 懼 惧 D0F9 軒 轩 E5C7 邇 迩 F5DC 躑 踯 BEE7 劇 剧 D0FC 懸 悬 E5C9 逕 迳 F5E6 躡 蹑 BEE9 鵑 鹃 D1A1 選 选 E5CE 邐 逦 F5E7 蹣 蹒 BEEE 絹 绢 D1A2 癬 癣 E5F0 屨 屦 F5EF 躪 躏 BEF5 覺 觉 D1A4 絢 绚 E5F2 弳 弪 F5F2 躦 躜 BEF7 訣 诀 D1A7 學 学 E5FC 嫵 妩 F5FC 觴 觞 BEF8 絶 绝 D1AB 勛 勋 E5FD 嫗 妪 F6A3 觶 觯 BEFB 鈞 钧 D1AF 詢 询 E6A3 嬀 妫 F6A6 靚 靓 BEFC 軍 军 D1B0 尋 寻 E6AB 婭 娅 F6A8 靂 雳 BFA5 駿 骏 D1B1 馴 驯 E6AC 嬈 娆 F6AB 霽 霁 BFAA 開 开 D1B5 訓 训 E6AE 孌 娈 F6B0 靄 霭 BFAD 凱 凯 D1B6 訊 讯 E6B4 媧 娲 F6B3 齔 龀 BFC5 顆 颗 D1B7 遜 逊 E6B5 嫻 娴 F6B4 齟 龃 BFC7 殻 壳 D1B9 壓 压 E6BF 嬋 婵 F6B5 齙 龅 BFCE 課 课 D1BB 鴉 鸦 E6C8 嬡 嫒 F6B6 齠 龆 BFD1 墾 垦 D1BC 鴨 鸭 E6C9 嬪 嫔 F6B7 齜 龇 BFD2 懇 恳 D1C6 啞 哑 E6CD 嬙 嫱 F6B8 齦 龈 BFD9 摳 抠 D1C7 亞 亚 E6E0 駔 驵 F6B9 齬 龉 BFE2 庫 库 D1C8 訝 讶 E6E1 駟 驷 F6BA 齪 龊 BFE3 褲 裤 D1CB 閹 阉 E6E2 駙 驸 F6BB 齷 龌 BFE4 誇 夸 D1CE 鹽 盐 E6E3 騶 驺 F6BC 黽 黾 BFE9 塊 块 D1CF 嚴 严 E6E4 驛 驿 F6BD 黿 鼋 BFEB 儈 侩 D1D5 顔 颜 E6E5 駑 驽 F6BE 鼉 鼍 BFED 寬 宽 D1D6 閻 阎 E6E6 駘 骀 F6C5 讎 雠 BFF3 礦 矿 D1DE 艷 艳 E6E7 驍 骁 F6C7 鑾 銮 BFF5 曠 旷 D1E1 厭 厌 E6E8 驊 骅 F6C9 鏨 錾 BFF7 虧 亏 D1E2 硯 砚 E6E9 駢 骈 F6CF 魷 鱿 BFF9 巋 岿 D1E8 諺 谚 E6EA 驪 骊 F6D0 魴 鲂 BFFA 窺 窥 D1E9 驗 验 E6EB 騏 骐 F6D1 鮁 鲅 C0A1 饋 馈 D1EC 鴦 鸯 E6EC 騍 骒 F6D2 鮃 鲆 C0A3 潰 溃 D1EE 楊 杨 E6ED 騅 骓 F6D3 鮎 鲇 C0A9 擴 扩 D1EF 揚 扬 E6EE 驂 骖 F6D4 鱸 鲈 C0AB 闊 阔 D1F1 瘍 疡 E6EF 騭 骘 F6D5 穌 稣 C0AF 蠟 蜡 D1F4 陽 阳 E6F0 騖 骛 F6D6 鮒 鲋 C0B0 臘 腊 D1F7 癢 痒 E6F1 驁 骜 F6D7 鱟 鲎 C0B3 萊 莱 D1F8 養 养 E6F2 騮 骝 F6D8 鮐 鲐 C0B4 來 来 D1F9 樣 样 E6F3 騸 骟 F6D9 鮭 鲑 C0B5 賴 赖 D2A2 堯 尧 E6F4 驃 骠 F6DA 鮚 鲒 C0B6 藍 蓝 D2A5 謡 谣 E6F5 驄 骢 F6DB 鮪 鲔 C0B8 欄 栏 D2A9 藥 药 E6F6 驏 骣 F6DC 鮞 鲕 C0B9 攔 拦 D2AF 爺 爷 E6F7 驥 骥 F6DD 鱭 鲚 C0BA 籃 篮 D2B3 頁 页 E6F8 驤 骧 F6DE 鮫 鲛 C0BB 闌 阑 D2B5 業 业 E6F9 糹 纟 F6DF 鮝 鲞 C0BC 蘭 兰 D2B6 葉 叶 E6FA 紆 纡 F6E0 鱘 鲟 C0BD 瀾 澜 D2BD 醫 医 E6FB 紂 纣 F6E1 鯁 鲠 C0BE 讕 谰 D2BF 銥 铱 E6FC 紇 纥 F6E2 鱺 鲡 C0BF 攬 揽 D2C3 頤 颐 E6FD 紈 纨 F6E3 鰱 鲢 C0C0 覽 览 D2C5 遺 遗 E6FE 纊 纩 F6E4 鰹 鲣 C0C1 懶 懒 D2C7 儀 仪 E7A1 紜 纭 F6E5 鰣 鲥 C0C2 纜 缆 D2CF 蟻 蚁 E7A2 紕 纰 F6E6 鰷 鲦 C0C3 爛 烂 D2D5 藝 艺 E7A3 紓 纾 F6E7 鯀 鲧 C0C4 濫 滥 D2DA 億 亿 E7A4 紺 绀 F6E8 鯊 鲨 C0CC 撈 捞 D2E4 憶 忆 E7A5 紲 绁 F6E9 鯇 鲩 C0CD 勞 劳 D2E5 義 义 E7A6 紱 绂 F6EA 鯽 鲫 C0D4 澇 涝 D2E8 詣 诣 E7A7 縐 绉 F6EB 鯖 鲭 C0D6 樂 乐 D2E9 議 议 E7A8 紼 绋 F6EC 鯪 鲮 C0D8 鐳 镭 D2EA 誼 谊 E7A9 絀 绌 F6ED 鯫 鲰 C0DD 壘 垒 D2EB 譯 译 E7AA 紿 绐 F6EE 鯡 鲱 C0E0 類 类 D2EF 繹 绎 E7AB 絝 绔 F6EF 鯤 鲲 C0E9 籬 篱 D2F1 蔭 荫 E7AC 絎 绗 F6F0 鯧 鲳 C0EB 離 离 D2F5 陰 阴 E7AD 絳 绛 F6F1 鯝 鲴 C0EC 灕 漓 D2F8 銀 银 E7AE 綆 绠 F6F2 鯢 鲵 C0EF 裏 里 D2FB 飲 饮 E7AF 綃 绡 F6F3 鯰 鲶 C0F0 鯉 鲤 D2FE 隱 隐 E7B0 綈 绨 F6F4 鯛 鲷 C0F1 禮 礼 D3A3 櫻 樱 E7B1 綾 绫 F6F5 鯴 鲺 C0F6 麗 丽 D3A4 嬰 婴 E7B2 綺 绮 F6F6 鯔 鲻 C0F7 厲 厉 D3A5 鷹 鹰 E7B3 緋 绯 F6F7 鱝 鲼 C0F8 勵 励 D3A6 應 应 E7B4 緔 绱 F6F8 鰈 鲽 C0F9 礫 砾 D3A7 纓 缨 E7B5 緄 绲 F6F9 鰐 鳄 C0FA 歷 历 D3A8 瑩 莹 E7B6 綞 缍 F6FA 鰍 鳅 C1A4 瀝 沥 D3A9 螢 萤 E7B7 綬 绶 F6FB 鰒 鳆 C1A5 隸 隶 D3AA 營 营 E7B8 綹 绺 F6FC 鰉 鳇 C1A9 倆 俩 D3AB 熒 荧 E7B9 綣 绻 F6FD 鯿 鳊 C1AA 聯 联 D3AC 蠅 蝇 E7BA 綰 绾 F6FE 鰠 鳋 C1AB 蓮 莲 D3AE 贏 赢 E7BB 緇 缁 F7A1 鰲 鳌 C1AC 連 连 D3B1 穎 颖 E7BC 緙 缂 F7A2 鰭 鳍 C1AD 鐮 镰 D3B4 喲 哟 E7BD 緗 缃 F7A3 鰨 鳎 C1AF 憐 怜 D3B5 擁 拥 E7BE 緹 缇 F7A4 鰥 鳏 C1B0 漣 涟 D3B6 傭 佣 E7BF 緲 缈 F7A5 鰩 鳐 C1B1 簾 帘 D3B8 癰 痈 E7C0 繢 缋 F7A6 鰳 鳓 C1B2 斂 敛 D3BB 踴 踊 E7C1 緦 缌 F7A7 鰾 鳔 C1B3 臉 脸 D3C5 優 优 E7C2 緶 缏 F7A8 鱈 鳕 C1B4 鏈 链 D3C7 憂 忧 E7C3 緱 缑 F7A9 鰻 鳗 C1B5 戀 恋 D3CA 郵 邮 E7C4 縋 缒 F7AA 鰵 鳘 C1B6 煉 炼 D3CB 鈾 铀 E7C5 緡 缗 F7AB 鱅 鳙 C1B7 練 练 D3CC 猶 犹 E7C6 縉 缙 F7AC 鱖 鳜 C1B8 糧 粮 D3D5 誘 诱 E7C7 縝 缜 F7AD 鱔 鳝 C1BD 兩 两 D3DF 輿 舆 E7C8 縟 缛 F7AE 鱒 鳟 C1BE 輛 辆 D3E0 餘 余 E7C9 縞 缟 F7AF 鱧 鳢 C1C2 諒 谅 D3E3 魚 鱼 E7CA 縭 缡 F7B2 韃 鞑 C1C6 療 疗 D3E6 漁 渔 E7CB 縊 缢 F7B3 鞽 鞒 C1C9 遼 辽 D3EB 與 与 E7CC 縑 缣 F7B5 韉 鞯 C1CD 鐐 镣 D3EC 嶼 屿 E7CD 繽 缤 F7BD 鶻 鹘 C1D4 獵 猎 D3EF 語 语 E7CE 縹 缥 F7C3 髏 髅 C1D9 臨 临 D3F4 鬱 郁 E7CF 縵 缦 F7C5 髖 髋 C1DA 鄰 邻 D3FC 獄 狱 E7D0 縲 缧 F7C6 髕 髌 C1DB 鱗 鳞 D3FE 譽 誉 E7D1 繆 缪 F7CA 魘 魇 C1DE 賃 赁 D4A4 預 预 E7D2 繅 缫 F7CB 魎 魉 C1E4 齡 龄 D4A6 馭 驭 E7D3 纈 缬 F7CF 饗 飨 C1E5 鈴 铃 D4A7 鴛 鸳 E7D4 繚 缭 F7D0 饜 餍 C1E9 靈 灵 D4A8 淵 渊 E7D5 繒 缯 F7DE 鬢 鬓 C1EB 嶺 岭 D4AF 轅 辕 E7D6 繮 缰 F7E1 么 麽 C1EC 領 领 D4B0 園 园 E7D7 繾 缱 F7F2 黷 黩 C1F3 餾 馏 D4B1 員 员 E7D8 繰 缲 F7F5 黲 黪 C1F5 劉 刘 D4B2 圓 圆 E7D9 繯 缳","categories":[{"name":"学习笔记","slug":"学习笔记","permalink":"https://sheauhawjang.github.io/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"原创","slug":"原创","permalink":"https://sheauhawjang.github.io/tags/%E5%8E%9F%E5%88%9B/"}]},{"title":"2023 ICPC 陕西省赛 J 题题解","slug":"2023 Shaanxi Provincial J","date":"2023-05-26T08:32:06.000Z","updated":"2023-05-27T12:36:36.000Z","comments":true,"path":"2023/05/26/2023 Shaanxi Provincial J/","link":"","permalink":"https://sheauhawjang.github.io/2023/05/26/2023%20Shaanxi%20Provincial%20J/","excerpt":"题目来源: 2023 ICPC 陕西省赛: J. Teleport 题面 在 \\(n\\times n\\) 的网格中, 有些格点可以通过 (用.表示), 有些格点不可通过 (用*表示). 你需要从 \\((1,1)\\) 移动到 \\((n,n)\\). 保证 \\((1,1)\\) 和 \\((n,n)\\) 两个点是可以通过的. 当你在 \\((x,y)\\) 时, 你可以在一个单位时间内移动到以下点中的一个: \\((x+1,y)\\) 或 \\((x-1,y)\\) 或 \\((x,y+1)\\) 或 \\((x,y-1)\\); \\(f^i(x,y)\\), 其中 \\(i\\) 是任意的整数 \\(i\\le k\\). 不能移动到不可通过的点或者地图外的点. \\(f^i(x,y)\\) 的定义为: \\[ f^i(x,y)=\\begin{cases}(x,y)&i=0\\\\f^{i-1}(y+1,x)&i>0\\end{cases} \\] 求从 \\((1,1)\\) 移动到 \\((n,n)\\) 的最短时间, 无解输出 -1. 数据范围 \\[ 1\\le n,k\\le5000 \\]","text":"题目来源: 2023 ICPC 陕西省赛: J. Teleport 题面 在 \\(n\\times n\\) 的网格中, 有些格点可以通过 (用.表示), 有些格点不可通过 (用*表示). 你需要从 \\((1,1)\\) 移动到 \\((n,n)\\). 保证 \\((1,1)\\) 和 \\((n,n)\\) 两个点是可以通过的. 当你在 \\((x,y)\\) 时, 你可以在一个单位时间内移动到以下点中的一个: \\((x+1,y)\\) 或 \\((x-1,y)\\) 或 \\((x,y+1)\\) 或 \\((x,y-1)\\); \\(f^i(x,y)\\), 其中 \\(i\\) 是任意的整数 \\(i\\le k\\). 不能移动到不可通过的点或者地图外的点. \\(f^i(x,y)\\) 的定义为: \\[ f^i(x,y)=\\begin{cases}(x,y)&i=0\\\\f^{i-1}(y+1,x)&i>0\\end{cases} \\] 求从 \\((1,1)\\) 移动到 \\((n,n)\\) 的最短时间, 无解输出 -1. 数据范围 \\[ 1\\le n,k\\le5000 \\] 题解 对于题面给出的两种移动方式, 总共有 \\(4+k\\) 种可能到达的点, 直接进行 BFS 复杂度为 \\(O(n^2k)\\), 不能接受. 现将两种移动方式分开处理, 移动方式 1 是普通移动, 移动方式 2 是空間移動テレポート. 其中普通移动有 \\(4\\) 条路可以走, 空间移动有 \\(k\\) 条路可以走. 注意到, 在 BFS 过程中, 如果 \\(f^i(x,y)\\) 点已经因空间移动而被 BFS 过, 则从 \\(f^j(x,y)\\) 开始进行 BFS 时, \\(f^{1}(x,y),f^2(x,y),\\cdots,f^{i-j}(x,y)\\) 均已经因空间移动而被 BFS 过, 不需要再考虑到这些点的空间移动, 只需要考虑 \\(i-j\\) 阶之后的 Teleport 即可. 根据这一特性, 每一个点至多被空间移动到一次. 复杂度为 \\(O(n^2)\\). 需要注意的是, 本题的空间上限为 256 MiB, 在进行 BFS 的过程中, 队列需要 \\(3n^2\\) 大小的数组, 如果采用 int 数组, 则需要 286 MiB 的内存. 因此需要关注空间使用情况: 使用 short 数组或使用 STL std::queue. 代码实现 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172#include <bits/stdc++.h>using namespace std;typedef pair<int, int> point;int n, k;bool bfsed[5003][5003];bool teled[5003][5003];bool pass[5003][5003];point teleport(int x, int y, int k){ int hk = k >> 1; if (k & 1) return {y + hk + 1, x + hk}; return {x + hk, y + hk};}void add_bfs(int x, int y, int depth, queue<pair<point, int>> &bfs){ if (!bfsed[x][y] && pass[x][y]) { bfsed[x][y] = true; bfs.push({{x, y}, depth}); }}int main(){ cin >> n >> k; for (int i = 1; i <= n; ++i) for (int j = 1; j <= n; ++j) { char sym; cin >> sym; if (sym == '.') pass[i][j] = true; else pass[i][j] = false; } queue<pair<point, int>> bfs; add_bfs(1, 1, 0, bfs); int ans = -1; while (!bfs.empty()) { point np = bfs.front().first; int dep = bfs.front().second; bfs.pop(); int x = np.first, y = np.second; if (x == n && y == n) { ans = dep; break; } int maxk = min(min(2 * (n - x) + 1, 2 * (n - y)), min(n + n - x - y, k)); for (int i = maxk; i > 0; --i) { point tp = teleport(x, y, i); int tx = tp.first, ty = tp.second; if (teled[tx][ty]) break; teled[tx][ty] = true; add_bfs(tx, ty, dep + 1, bfs); } add_bfs(x + 1, y, dep + 1, bfs); add_bfs(x - 1, y, dep + 1, bfs); add_bfs(x, y + 1, dep + 1, bfs); add_bfs(x, y - 1, dep + 1, bfs); } cout << ans;}","categories":[{"name":"XCPC题解","slug":"XCPC题解","permalink":"https://sheauhawjang.github.io/categories/XCPC%E9%A2%98%E8%A7%A3/"}],"tags":[{"name":"ICPC 2023","slug":"ICPC-2023","permalink":"https://sheauhawjang.github.io/tags/ICPC-2023/"},{"name":"省赛","slug":"省赛","permalink":"https://sheauhawjang.github.io/tags/%E7%9C%81%E8%B5%9B/"},{"name":"搜索","slug":"搜索","permalink":"https://sheauhawjang.github.io/tags/%E6%90%9C%E7%B4%A2/"}]},{"title":"2023 ICPC 陕西省赛 D 题题解","slug":"2023 Shaanxi Provincial D","date":"2023-05-25T05:33:00.000Z","updated":"2024-09-26T16:13:05.000Z","comments":true,"path":"2023/05/25/2023 Shaanxi Provincial D/","link":"","permalink":"https://sheauhawjang.github.io/2023/05/25/2023%20Shaanxi%20Provincial%20D/","excerpt":"题目来源: 2023 ICPC 陕西省赛: D. Function 题面 给定函数 \\(f\\) 满足: \\[ f(x)=\\begin{cases} \\displaystyle 1+\\sum_{k=2}^a f(kx)&x\\le n\\\\ 0&x>n \\end{cases} \\] 输入 \\(n\\), 求 \\(f(1)\\bmod p\\). 其中 \\(a=20210926\\), \\(p=998244353\\). 数据范围 \\[ 1\\le n\\le10^9 \\]","text":"题目来源: 2023 ICPC 陕西省赛: D. Function 题面 给定函数 \\(f\\) 满足: \\[ f(x)=\\begin{cases} \\displaystyle 1+\\sum_{k=2}^a f(kx)&x\\le n\\\\ 0&x>n \\end{cases} \\] 输入 \\(n\\), 求 \\(f(1)\\bmod p\\). 其中 \\(a=20210926\\), \\(p=998244353\\). 数据范围 \\[ 1\\le n\\le10^9 \\] 题解 本质上, 题设给出的函数是一个关于 \\(x\\) 和 \\(n\\) 的二元函数, 记: \\[ F(x,n):=\\begin{cases} \\displaystyle 1+\\sum_{k=2}^a F(kx,n)&x\\le n\\\\ 0&x>n \\end{cases} \\] 可知 \\(f(x)=F(x,n)\\). 在题解的后文中将完全不再使用题面所给出的一元函数 \\(f\\), 均使用二元函数 \\(F\\). 题面所求转换为求 \\(F(1,n)\\bmod p\\). 根据 \\(F\\) 的定义, 可知: \\[ F(x,y)=F\\left(\\frac xz,\\frac yz\\right)=F\\left(1,\\frac yx\\right)\\tag1 \\] 记 \\(g(y):=F(1,y)\\). 则所求转换为求 \\(g(n)\\), 且有下式成立: \\[ g(y)=1+\\sum_{k=2}^a g\\left(\\frac yk\\right) \\] 此时, 根据该式直接进行记忆化搜索, 复杂度为 \\(O(n^2)\\), 显然不能满意. 而对于 \\(F(x,y)\\), 当 \\(x\\) 是正整数时, 有\\(\\newcommand{\\flor}[1]{\\left\\lfloor#1\\right\\rfloor}\\) \\[ F(x,y)=F(x,\\flor y)\\tag2 \\] 故可以得到 \\[ g(y)=1+\\sum_{k=2}^a g\\left(\\flor{\\frac yk}\\right) \\] 在这种情况下, 可以进行数论分块, \\(\\flor{y/k}\\) 只有 \\(O(\\sqrt y)\\) 个取值. 依托数论分块进行记忆化搜索求解 \\(g(n)\\): 对于 \\(\\flor{n/k}\\le \\sqrt n\\) 的情况, 将 \\(g(1),g(2),\\cdots,g(\\sqrt n)\\) 全部进行预处理, 共需求解 \\(\\sqrt n\\) 个值, 在数论分块的情况下, 每个值有 \\(O(\\sqrt{\\sqrt n})\\) 项相加, 该情况下的总复杂度为 \\(O(n^{3/4})\\). 对于 \\(\\flor{n/k}>\\sqrt n\\) 的情况, 此时可知 \\(k<\\sqrt n\\), 此时记 \\(h_n(k):=g(\\flor{n/k})\\), 则需求解 \\(h_n(1),h_n(2),\\cdots,h_n(\\sqrt n)\\). 其中 \\(h_n(k)\\) 共有 \\(O(\\sqrt{n/k})\\) 项相加, 该情况下的总复杂度为 \\[ \\sum_{k=1}^\\sqrt nO\\left(\\sqrt {\\frac{n}{k}}\\right)=O(\\sqrt n)\\cdot\\sum_{k=1}^{\\sqrt n}\\frac1{\\sqrt k}=O(\\sqrt n)\\cdot O\\left(\\sqrt{\\sqrt n}\\right)=O(n^{3/4}) \\] 故记忆化搜索的总复杂度为 \\(O(n^{3/4})\\). 需要注意在数论分块时, 分块的边界除了算法本身的 \\(n/(n/k)\\), 还要注意 \\(k\\le a\\). 即分块区间为 \\[ \\left[k,\\min\\left(\\flor{\\frac n{\\flor{n/k}}},a\\right)\\right] \\] 备注 题解中公式(1)该公式对所有的正实数 \\(x,y\\) 均成立. 公式(1)的证明如下: 首先, 对于 \\(x>y\\) 的情况, \\[ F(x,y)=F\\left(\\frac xz,\\frac yz\\right)=0 \\] 下考虑 \\(x\\le y\\) 的情况. 由定义,等式成立的一个充分条件为: \\(\\forall k\\in[2,a]\\cap\\mathbb N\\) 均有 \\(\\displaystyle F(kx,y)=F\\left(\\frac {kx}z,\\frac yz\\right)\\). 对充分条件中 \\(kx\\le y\\) 的情况再次应用充分条件. 每次充分条件后, \\(F\\) 的第一元参数都至少变为两倍. 故经有限次应用充分条件后, \\(F\\) 的第一元参数均会大于第二元, 充分条件成立. 故对于所有 \\(x\\le y\\) 的情况也成立. 题解中公式(2)的证明亦同理, 但该公式仅对所有的正整数 \\(x\\) 和正实数 \\(y\\) 成立. 若 \\(x\\) 为整数且 \\(x>y\\), 则 \\(x>\\flor y\\), 根据定义 \\(F(x,y)=F(x,\\flor y)=0\\). 对于 \\(x\\) 为整数且 \\(x\\le y\\) 的情况, 由于 \\(x\\) 为整数, 故也有 \\(x\\le\\flor y\\). 使用与公式(1)相同的证明方法, 即得证. 题目中, 若 \\(F\\) 中的参数 \\(a\\) 取 \\(+\\infty\\), 则由阿基米德公理, 对于给定的 \\(x,y\\), 定义依然是有限个非0项求和. 公式(1)(2)依然成立, 基于 \\(a\\) 是常数的做法依然成立, 且不需要再额外检测数论分块的边界. 代码实现 123456789101112131415161718192021222324252627282930313233343536373839404142434445#include <bits/stdc++.h>using namespace std;const int m = 1e9, ghn = sqrt(m);const int p = 998244353;int g[ghn + 7], h[ghn + 7], n;int solve(int hi){ int ans = 1; int hn = n / hi; if (hn <= ghn) return g[hn]; if (h[hi]) return h[hi]; for (int j = 2; j <= hn && j <= 20210926; ++j) { int jp = min(hn / (hn / j), 20210926); if (hn / j <= ghn) ans += 1ll * (jp - j + 1) % p * g[hn / j] % p, ans %= p, j = jp; else ans += solve(hn / j), ans %= p; } return h[hi] = ans;}int main(){ for (int i = 1; i <= ghn; ++i) { g[i] = 1; for (int j = 2; j <= i && j <= 20210926; ++j) { int jp = i / (i / j); g[i] += 1ll * (jp - j + 1) % p * g[i / j] % p, g[i] %= p, j = jp; } } cin >> n; int ans; if (n <= ghn) ans = g[n]; else ans = solve(1); cout << ans;} 花絮 笔者于比赛开始后103分钟通过本题,获得了本题的最快解题奖。","categories":[{"name":"XCPC题解","slug":"XCPC题解","permalink":"https://sheauhawjang.github.io/categories/XCPC%E9%A2%98%E8%A7%A3/"}],"tags":[{"name":"数论","slug":"数论","permalink":"https://sheauhawjang.github.io/tags/%E6%95%B0%E8%AE%BA/"},{"name":"ICPC 2023","slug":"ICPC-2023","permalink":"https://sheauhawjang.github.io/tags/ICPC-2023/"},{"name":"省赛","slug":"省赛","permalink":"https://sheauhawjang.github.io/tags/%E7%9C%81%E8%B5%9B/"}]},{"title":"2022 ICPC 华为上海训练营 Day3G 题解","slug":"2022 ICPC Huawei Shanghai 3G","date":"2023-03-15T04:50:39.000Z","updated":"2024-09-24T05:35:59.000Z","comments":true,"path":"2023/03/15/2022 ICPC Huawei Shanghai 3G/","link":"","permalink":"https://sheauhawjang.github.io/2023/03/15/2022%20ICPC%20Huawei%20Shanghai%203G/","excerpt":"题目来源: 2022 ICPC 华为上海训练营 Day3: G. Matrices and Determinants 题面 一共 \\(T\\) 组数据. 给定 \\(n\\times n\\) 矩阵 \\(\\newcommand{\\mathbs}[1]{\\boldsymbol{ #1 }}\\newcommand{\\mbs}{\\mathbs}\\newcommand{\\mbb}{\\mathbb}\\mbs A\\in M_n(\\mbb Z)\\), 其所有元素均为整数. 请求出矩阵 \\(\\mbs B,\\mbs C\\in M_n(\\mbb Z)\\), 所有元素均为整数, 满足: \\(\\mbs B\\mbs C=\\mbs A\\) 且 \\(\\newcommand{\\abs}[1]{\\left| #1 \\right|}\\abs{\\mbs B}=\\abs{\\mbs C}\\ne0\\). 如无解, 输出 No. 如有多组满足题意的解, 请输出任意一种. 数据范围 \\(1\\le T\\le 10000\\). \\(1\\le n\\le 4\\), \\(\\mbs A\\) 中的所有元素均为整数,且元素 \\(A_{ij}\\) 满足 \\(-10\\le A_{ij}\\le10\\).","text":"题目来源: 2022 ICPC 华为上海训练营 Day3: G. Matrices and Determinants 题面 一共 \\(T\\) 组数据. 给定 \\(n\\times n\\) 矩阵 \\(\\newcommand{\\mathbs}[1]{\\boldsymbol{ #1 }}\\newcommand{\\mbs}{\\mathbs}\\newcommand{\\mbb}{\\mathbb}\\mbs A\\in M_n(\\mbb Z)\\), 其所有元素均为整数. 请求出矩阵 \\(\\mbs B,\\mbs C\\in M_n(\\mbb Z)\\), 所有元素均为整数, 满足: \\(\\mbs B\\mbs C=\\mbs A\\) 且 \\(\\newcommand{\\abs}[1]{\\left| #1 \\right|}\\abs{\\mbs B}=\\abs{\\mbs C}\\ne0\\). 如无解, 输出 No. 如有多组满足题意的解, 请输出任意一种. 数据范围 \\(1\\le T\\le 10000\\). \\(1\\le n\\le 4\\), \\(\\mbs A\\) 中的所有元素均为整数,且元素 \\(A_{ij}\\) 满足 \\(-10\\le A_{ij}\\le10\\). 题解 由于 \\(\\mbs {BC}=\\mbs A\\), 故 \\(\\abs{\\mbs A}=\\abs{\\mbs{B}}\\abs{\\mbs C}=\\abs{\\mbs B}^2\\). 由于 \\(\\mbs {A},\\mbs B,\\mbs C\\) 的元素均为整数, 其行列式也为整数. 故有解的必要条件为: \\(\\abs{\\mbs A}\\) 是完全平方数. 且由于 \\(\\abs{\\mbs B}\\ne0\\), 可知 \\(\\abs{\\mbs A}\\ne0\\), 故有解的另一个必要条件为: \\(\\mbs A\\) 是非奇异矩阵. 先求 \\(\\mbs A\\) 的行列式. 做 Gauss 消元. 注意到以下事实: 在进行一项初等行变换时, 设变换前的矩阵为 \\(\\mbs X\\), 变换后的矩阵为 \\(\\mbs Y\\), 则有 \\[ \\mbs Y=\\mbs T\\mbs X \\] 其中 \\(\\mbs T\\) 是对单位阵 \\(\\mbs I\\) 做相同的初等行变换得到的结果. 对于三种初等行变换, \\(\\mbs T\\) 的逆矩阵有三种情况: 将第 \\(k\\) 行乘 \\(s\\), 变换矩阵 \\(\\mbs T=:\\mbs M(k,s)\\) 的逆矩阵是 \\(\\mbs M(k,s^{-1})\\). 将第 \\(k\\) 行与第 \\(l\\) 行交换, 变换矩阵 \\(\\mbs T=:\\mbs E(k,l)\\) 的逆矩阵是 \\(\\mbs E(l,k)=\\mbs T\\), 即逆矩阵为原矩阵. 将第 \\(k\\) 行的 \\(s\\) 倍加到第 \\(l\\) 行, 变换矩阵 \\(\\mbs T=:\\mbs P(k,s,l)\\) 的逆矩阵是 \\(\\mbs P(k,-s,l)\\). 此时有 \\(\\mbs X=\\mbs T^{-1}\\mbs Y\\). 若在进行初等行变换时, 进行如下限制, 在 \\(\\mbs X\\) 是整数矩阵的情况下, 可以确保 \\(\\mbs T,\\mbs T^{-1}\\) 和 \\(\\mbs Y\\) 不会产生非整数: 进行第 1 种初等行变换时, \\(s\\) 只取 \\(-1\\). 第 2 种初等行变换没有限制. 进行第 3 种初等行变换时, \\(s\\) 只取整数. 考虑 Gauss 消元, 在上述限制条件下将 \\(\\mbs A\\) 转化为上三角矩阵的过程中, 需使用辗转相除法. 将 \\(\\mbs A\\) 的第 \\(j\\) 行的第 \\(i\\) 列化为 \\(0\\), 若直接取变换矩阵为 \\(\\mbs P(i,-\\frac{\\mbs A[j;i]}{\\mbs A[i;i]},j)\\), 则不能保证 \\(-\\frac{\\mbs A[j;i]}{\\mbs A[i;i]}\\) 是整数, 故取变换矩阵为 \\[ \\newcommand{\\brac}[1]{\\left( #1 \\right)}\\newcommand{\\flor}[1]{\\left\\lfloor #1 \\right\\rfloor}\\mbs P\\brac{i,-\\flor{\\frac{\\mbs A[j;i]}{\\mbs A[i;i]}},j} \\] 交换第 \\(i\\) 行和第 \\(j\\) 行后再重复进行上述过程, 直至 \\(\\mbs A[j;i]=0\\) 为止. 设 \\(\\mbs A\\) 经过 \\(k\\) 次初等行变换后, 得到上三角矩阵 \\(\\mbs A_k\\), 则有 \\[ \\mbs A=\\mbs T_1^{-1}\\mbs T_2^{-1}\\cdots\\mbs T_k^{-1}\\mbs A_k=:\\mbs J\\mbs A_{k} \\] 对于 Gauss 消元, 化为上三角矩阵的过程中, 只用到上述的第 2,3 种初等行变换, 此时 \\(\\mbs J\\) 的行列式为 \\(1\\) 或 \\(-1\\). 设进行了 \\(k_2\\) 次第 2 种初等行变换, 则 \\(\\abs{\\mbs J}=(-1)^{k_2}\\). \\(\\mbs A_k\\) 是上三角矩阵, 行列式为其主对角线元素的乘积. 此时可以求得 \\(\\mbs A\\) 的行列式了. 若满足必要条件: 由于上三角矩阵的乘积仍为上三角矩阵, 故考虑将 \\(\\mbs A_k\\) 分解为两个上三角矩阵的乘积. 我们希望: \\(\\mbs A_k=\\mbs D\\mbs C\\), 其中 \\(\\abs{\\mbs C}=\\abs{\\mbs J}\\abs{\\mbs D}\\), 这样令 \\(\\mbs B=\\mbs {JD}\\) 即满足题意. 设: \\[ \\newcommand{\\pmat}[1]{\\begin{pmatrix} #1 \\end{pmatrix}}\\mbs A_k=\\pmat{a_{11}&a_{12}&\\cdots&a_{1n}\\\\&a_{22}&\\cdots&a_{2n}\\\\&&\\ddots&\\vdots\\\\&&&a_{nn}} \\] \\[ \\mbs D=\\pmat{b_{11}&b_{12}&\\cdots&b_{1n}\\\\&b_{22}&\\cdots&b_{2n}\\\\&&\\ddots&\\vdots\\\\&&&b_{nn}} \\] \\[ \\mbs C=\\pmat{c_{11}&c_{12}&\\cdots&c_{1n}\\\\&c_{22}&\\cdots&c_{2n}\\\\&&\\ddots&\\vdots\\\\&&&c_{nn}} \\] 根据矩阵乘法的定义和上三角矩阵的特点, 有 \\[ a_{ii}=b_{ii}c_{ii}\\tag1 \\] \\(i\\ne j\\) 时有 \\[ a_{ij}=\\sum_{k=i}^jb_{ik}c_{kj}=b_{ii}c_{ij}+\\sum_{k=i+1}^{j-1}b_{ik}c_{kj}+b_{ij}c_{jj}\\tag2 \\] 记 \\(\\newcommand{\\lrac}[1]{\\left\\{ #1 \\right\\}}\\mbs b_i:=\\lrac{b_{1,1+i},b_{2,2+i},\\cdots,b_{n-i,n}}\\) 即 \\(b_{1,1+i}\\) 所在的对角线的元素, 同理记 \\(\\mbs c_i:=\\lrac{c_{1,1+i},c_{2,2+i},\\cdots,c_{n-i,n}}\\). 则可知当 \\(\\mbs b_0,\\mbs b_1,\\cdots,\\mbs b_{j-i-1}\\) 和 \\(\\mbs c_0,\\mbs c_1,\\cdots,\\mbs c_{j-i-1}\\) 均确定后, \\[ \\sum_{k=i+1}^{j-1}b_{ik}c_{kj} \\] 是可以求出的常数, 记做 \\(K\\). 此时 \\((2)\\) 式变为 \\[ c_{jj}b_{ij}+b_{ii}c_{ij}=a_{ij}-K\\tag3 \\] 其中 \\(b_{ii},c_{jj},a_{ij},K\\) 均为已知量, 而 \\(b_{ij},c_{ij}\\) 是未知量. 此时若满足 \\[ \\gcd (b_{ii},c_{jj})\\mid a_{ij}-K \\] 可以根据 \\((3)\\) 式, 利用根据 Bézout 定理求解 \\(b_{ij},c_{ij}\\). 此时, 能求出 \\(b_{ij},c_{ij}\\) 的充分条件为: \\(\\gcd(b_{ii},c_{jj})=1\\). 根据上述充分条件, 构造 \\(\\mbs b_0,\\mbs c_0\\), 整理条件如下: \\(\\abs{\\mbs C}=\\sqrt{\\abs{\\mbs{A}}}\\). \\(a_{ii}=b_{ii}c_{ii}\\), \\(\\forall i\\le n\\). \\(\\gcd(b_{ii},c_{jj})=1\\), \\(\\forall i<j\\le n\\). 构造的基本思路为: 根据条件 3, \\(j\\) 越大, \\(c_{jj}\\) 的限制越多. 故基本思路为, 将尽可能多的 \\(\\sqrt {\\abs{\\mbs A}}\\) 的因子安排到 \\(\\mbs c_0\\) 中靠前的位置. 对于 \\(c_{ii}\\), 由于限制条件 1,2, 有不等式 \\[ c_{ii}\\le\\gcd\\brac{a_{ii},\\frac{\\sqrt{\\abs{\\mbs A}}}{c_{11}c_{22}\\cdots c_{i-1,i-1}}} \\] 现考虑直接取 \\[ c_{ii}=\\gcd\\brac{a_{ii},\\frac{\\sqrt{\\abs{\\mbs A}}}{c_{11}c_{22}\\cdots c_{i-1,i-1}}}\\tag4 \\] 并通过条件 2 构造 \\(\\mbs b_{0}\\), 检验是否满足其他条件. \\[ \\newcommand{\\algn}[1]{\\begin{aligned} #1 \\end{aligned}}\\algn{\\abs{\\mbs C}=c_{11}c_{22}\\cdots c_{nn}&=c_{11}c_{22}\\cdots c_{n-1,n-1}\\gcd\\brac{a_{nn},\\frac{\\sqrt{\\abs{\\mbs A}}}{c_{11}c_{22}\\cdots c_{n-1,n-1}}}\\\\&=\\gcd({a_{nn}c_{11}c_{22}\\cdots c_{n-1,n-1},\\textstyle{\\sqrt{\\abs{\\mbs A}}}})\\\\&=\\gcd(a_{nn}\\gcd(a_{n-1,n-1}c_{11}c_{22}\\cdots c_{n-2,n-2},\\textstyle{\\sqrt{\\abs{\\mbs A}}}),\\textstyle{\\sqrt{\\abs{\\mbs A}}})\\\\&=\\gcd(a_{nn}a_{n-1,n-1}c_{11}c_{22}\\cdots c_{n-2,n-2},a_{nn}\\textstyle{\\sqrt{\\abs{\\mbs A}}},\\textstyle{\\sqrt{\\abs{\\mbs A}}})\\\\&=\\gcd(a_{nn}a_{n-1,n-1}c_{11}c_{22}\\cdots c_{n-2,n-2},\\textstyle{\\sqrt{\\abs{\\mbs A}}})\\\\&=\\gcd(a_{nn}\\cdots a_{11},\\textstyle{\\sqrt{\\abs{\\mbs A}}})=\\gcd(\\abs{\\mbs A},\\textstyle{\\sqrt{\\abs{\\mbs A}}})=\\textstyle{\\sqrt{\\abs{\\mbs A}}} } \\] 上式表明了构造满足条件 1. 若 \\(g_{ij}:=\\gcd(b_{ii},c_{jj})\\ne 1\\), 则由于 \\[ g_{ij}\\mid c_{jj}\\mid\\frac{\\sqrt{\\abs{\\mbs A}}}{c_{11}c_{22}\\cdots c_{j-1,j-1}}\\mid\\frac{\\sqrt{\\abs{\\mbs A}}}{c_{11}c_{22}\\cdots c_{ii}} \\] 且 \\(g_{ij}\\mid b_{ii}=a_{ii}/c_{ii}\\). 此时取 \\(c_{ii}'=c_{ii}g_{ij}\\), 可知 \\[ c_{ii}'=c_{ii}g_{ij}\\mid c_{ii}b_{ii}=a_{ii} \\] \\[ c_{ii}'=c_{ii}g_{ij}\\mid c_{ii}\\frac{\\sqrt{\\abs{\\mbs A}}}{c_{11}c_{22}\\cdots c_{ii}}=\\frac{\\sqrt{\\abs{\\mbs A}}}{c_{11}c_{22}\\cdots c_{i-1,i-1}} \\] 故 \\(c_{ii}'\\) 是 \\(a_{ii}\\) 和 \\(\\sqrt{\\abs{\\mbs A}}/\\brac{c_{11}c_{22}\\cdots c_{i-1,i-1}}\\) 的公因子, 故 \\[ c_{ii}<c_{ii}'\\le \\gcd\\brac{a_{ii},\\frac{\\sqrt{\\abs{\\mbs A}}}{c_{11}c_{22}\\cdots c_{i-1,i-1}}} \\] 与 \\((4)\\) 式矛盾. 故构造满足条件 3. 故按此方法构造满足条件: 构造 \\(\\mbs b_0,\\mbs c_0\\) 后, 依次求解 \\((3)\\) 式构造 \\(\\mbs b_1,\\mbs c_1,\\mbs b_2,\\mbs c_2,\\cdots,\\mbs b_{n-1},\\mbs c_{n-1}\\), 即可构造出 \\(\\mbs D,\\mbs C\\). 取 \\(\\mbs B=\\mbs {JD}\\) 即满足题意. 复杂度分析 Gauss 消元法需进行 \\(O(n^2)\\) 步, 每步需要进行 \\(O(\\log C)\\) 次初等行变换, 总复杂度为 \\(O(n^3\\log C)\\). 构造 \\(\\mbs c_0\\) 的复杂度为 \\(O(n\\log C)\\). 求解一个 \\(b_{ij},c_{ij}\\) 时, 求 \\(K\\) 的复杂度为 \\(O(n)\\), Bézout 定理的复杂度为 \\(O(\\log C)\\). 共有 \\(O(n^2)\\) 个 \\(b_{ij},c_{ij}\\). 故求解 \\(\\mbs D,\\mbs C\\) 的复杂度为 \\(O(n^3)\\). 总复杂度为 \\(O(n^3\\log C)\\). 代码实现 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154#include <bits/stdc++.h>using namespace std;typedef long long ll;struct matrix{ ll n; ll val[4][4]; matrix operator*(const matrix &b) const { matrix ans; ans.n = n; for (ll i = 0; i < n; ++i) for (ll j = 0; j < n; ++j) { ans.val[i][j] = 0; for (ll k = 0; k < n; ++k) ans.val[i][j] += val[i][k] * b.val[k][j]; } return ans; }};ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }ll exgcd(ll a, ll b, ll &x, ll &y){ if (!b) { x = 1; y = 0; return a; } ll d = exgcd(b, a % b, y, x); y = y - a / b * x; return d;}int main(){ #ifndef pasokon ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); #endif matrix ZERO; for (ll i = 0; i < 4; ++i) for (ll j = 0; j < 4; ++j) ZERO.val[i][j] = 0; matrix I = ZERO; for (ll i = 0; i < 4; ++i) I.val[i][i] = 1; ll T; cin >> T; while (T--) { matrix A, B = I; cin >> A.n; ll n = A.n; B.n = I.n = ZERO.n = n; for (ll i = 0; i < n; ++i) for (ll j = 0; j < n; ++j) cin >> A.val[i][j]; matrix SA = A; ll sum = 1; // Gauss 消元 for (ll i = 0, j = 0; i < n; ++i, ++j) { ll ni = i; if (A.val[i][j] == 0) for (ni = i + 1; ni < n; ++ni) if (A.val[ni][j]) { for (ll s = j; s < n; ++s) swap(A.val[i][s], A.val[ni][s]); sum *= -1; matrix S = I; S.val[i][i] = S.val[ni][ni] = 0; S.val[i][ni] = S.val[ni][i] = 1; B = B * S; break; } if (ni >= n) { sum = 0; break; } for (ll ni = i + 1; ni < n; ++ni) { matrix S = I; S.val[i][i] = S.val[ni][ni] = 0; S.val[i][ni] = S.val[ni][i] = 1; while (A.val[ni][j]) { ll tms = A.val[i][j] / A.val[ni][j]; for (ll s = j; s < n; ++s) A.val[i][s] -= tms * A.val[ni][s]; for (ll s = j; s < n; ++s) swap(A.val[i][s], A.val[ni][s]); sum *= -1; matrix D = I; D.val[ni][i] = tms; B = B * S * D; } } sum *= A.val[i][j]; } ll sq = round(sqrt(sum)); if (sq * sq != sum || sum == 0) { cout << \"No\\n\"; continue; } cout << \"Yes\\n\"; matrix C = ZERO, D = ZERO; // 安排对角线 for (ll j = n - 1; j >= 0; --j) { ll g = gcd(abs(A.val[j][j]), sq); C.val[j][j] = g; D.val[j][j] = A.val[j][j] / g; sq /= g; } // exgcd 求其他元素 for (ll d = 1; d < n; ++d) { // d = j - i for (ll i = 0, j = d + i; j < n; ++i, ++j) { ll r = A.val[i][j]; for (ll k = i + 1; k < j; ++k) r -= C.val[i][k] * D.val[k][j]; // C.val[i][i] * D.val[i][j] + C.val[i][j] * D.val[j][j] = r; ll g = exgcd(C.val[i][i], D.val[j][j], D.val[i][j], C.val[i][j]); D.val[i][j] *= (r / g), C.val[i][j] *= (r / g); } } B = B * C; ll check = 1; for (ll i = 0; i < n; ++i) check *= D.val[i][i]; if (check == 1) { matrix II = I; II.val[0][0] = -1; B = B * II; D = II * D; } for (ll i = 0; i < n; ++i) { for (ll j = 0; j < n; ++j) cout << (j ? \" \" : \"\") << B.val[i][j]; cout << '\\n'; } for (ll i = 0; i < n; ++i) { for (ll j = 0; j < n; ++j) cout << (j ? \" \" : \"\") << D.val[i][j]; cout << '\\n'; } } return 0;} 花絮 笔者于训练赛开始后4小时59分钟(最后一分钟)通过本题,且获得了本题的最快解题奖,也是全场唯一的通过。","categories":[{"name":"XCPC题解","slug":"XCPC题解","permalink":"https://sheauhawjang.github.io/categories/XCPC%E9%A2%98%E8%A7%A3/"}],"tags":[{"name":"构造","slug":"构造","permalink":"https://sheauhawjang.github.io/tags/%E6%9E%84%E9%80%A0/"},{"name":"线性代数","slug":"线性代数","permalink":"https://sheauhawjang.github.io/tags/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/"}]},{"title":"C#程序设计 第8周题解","slug":"CSharp Week8","date":"2020-12-08T08:31:48.000Z","updated":"2020-12-08T08:31:52.000Z","comments":true,"path":"2020/12/08/CSharp Week8/","link":"","permalink":"https://sheauhawjang.github.io/2020/12/08/CSharp%20Week8/","excerpt":"A. 多态练习一工资系统 实现课本例9-3题目要求。根据4类不同员工类型分别进行工资的计算。 抽象基类Employee表示员工,这个类派生出SalariedEmployee、HourlyEmplyee和CommissionEmployee类,CommissionEmployee类派生出BasePlusCommissionEmployee类。(课本例9-3图) 1.固定工:每周工资一样,与工作时间长短无关,由SalariedEmployee类实现; 2.计时工:按时计酬,超过40小时算加班工资,由HourlyEmplyee类实现; 3.雇佣员工:按销售百分比例计算,由CommissionEmployee类实现; 4.底薪雇佣员工:在底薪之上增加销售百分比。在本期内,公司准备对底薪雇佣员工升薪10%,由BasePlusCommissionEmployee类实现。 在主函数中 创建4个派生类的对象,调用Earning()方法输出。 多态的使用,创建含有4个派生类元素的Employee数组,调用Earning()方法输出。 【注:】此题编译通过即可","text":"A. 多态练习一工资系统 实现课本例9-3题目要求。根据4类不同员工类型分别进行工资的计算。 抽象基类Employee表示员工,这个类派生出SalariedEmployee、HourlyEmplyee和CommissionEmployee类,CommissionEmployee类派生出BasePlusCommissionEmployee类。(课本例9-3图) 1.固定工:每周工资一样,与工作时间长短无关,由SalariedEmployee类实现; 2.计时工:按时计酬,超过40小时算加班工资,由HourlyEmplyee类实现; 3.雇佣员工:按销售百分比例计算,由CommissionEmployee类实现; 4.底薪雇佣员工:在底薪之上增加销售百分比。在本期内,公司准备对底薪雇佣员工升薪10%,由BasePlusCommissionEmployee类实现。 在主函数中 创建4个派生类的对象,调用Earning()方法输出。 多态的使用,创建含有4个派生类元素的Employee数组,调用Earning()方法输出。 【注:】此题编译通过即可 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576using System;// Written by Sheauhaw Jang// 2020-11-10 10:54:13namespace CSharp_Week7_A{ abstract class Employee { public string Name { get; protected set; } public Employee(string namae) { Name = namae; } public abstract double GetSal(); public virtual void Clear() { } public void WriteName() { Console.WriteLine(Name); } public void Earning() { Console.WriteLine(GetSal()); } } class SalariedEmployee : Employee { public double Bsal { get; set; } public SalariedEmployee(string namae, double x) : base(namae) { Bsal = x; Clear(); } public override double GetSal() { return Bsal; } } class HourlyEmployee : Employee { public double SalPrh { get; protected set; } public int WorkT { get; set; } public HourlyEmployee(string namae, double preh) : base(namae) { SalPrh = preh; } public void NoteWork(int t) { WorkT += t; } public override void Clear() { WorkT = 0; } const int HourLaw = 40; public override double GetSal() { if (WorkT <= HourLaw) return SalPrh * WorkT; else return SalPrh * HourLaw + 1.5 * SalPrh * (WorkT - HourLaw); } } class CommissionEmployee : Employee { double Rate { get; set; } double ComVa { get; set; } public CommissionEmployee(string namae, double x) : base(namae) { Rate = x; } public override void Clear() { ComVa = 0; } public void NoteCom(double x) { ComVa += x; } public override double GetSal() { return ComVa * Rate; } } class BasePlusCommissionEmployee : CommissionEmployee { public double Bsal { get; set; } public BasePlusCommissionEmployee(string namae, double x, double r) : base(namae, r) { Bsal = x; } public override double GetSal() { return base.GetSal() + Bsal; } } class Program { static void Main(string[] args) { Employee[] eps = new Employee[4]; SalariedEmployee epa = new SalariedEmployee(\"A\", 10000); HourlyEmployee epb = new HourlyEmployee(\"B\", 250); epb.NoteWork(50); CommissionEmployee epc = new CommissionEmployee(\"C\", 0.05); epc.NoteCom(1e7); BasePlusCommissionEmployee epd = new BasePlusCommissionEmployee(\"D\", 10000, 0.05); epd.NoteCom(1e7); eps[0] = epa; eps[1] = epb; eps[2] = epc; eps[3] = epd; foreach (Employee ep in eps) { ep.WriteName(); ep.Earning(); } } }} B. 工资系统+生日 修改例题9-3,在Employee类中添加新的字段birthDate表示员工的生日。(如:DateTime dt=new DateTime(2000,12,21)) birthDate的数据类型为DateTime结构体类型(C#自带)。假设工资每月处理一次。 创建Employee数组,存储不同类型员工对象的引用。 可以循环输出每种类型员工的姓名和工资。如果本月是员工的生日,则工资增加100元。 【注:】本题编译通过即可。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384using System;// Written by Sheauhaw Jang// 2020-11-10 10:54:13namespace CSharp_Week7_A{ abstract class Employee { public string Name { get; protected set; } public DateTime Birth { get; set; } public Employee(string namae) { Name = namae; Birth = new DateTime(1900, 1, 1); } public bool Bouns() { return DateTime.Now.Month == Birth.Month; } public abstract double GetSal(); public virtual void Clear() { } public void SetBirth(int y, int m, int d) { Birth = new DateTime(y, m, d); } public void WriteName() { Console.WriteLine(Name); } public double GetTotSal() { return GetSal() + (Bouns() ? 100 : 0); } public void Earning() { Console.WriteLine(GetTotSal()); } } class SalariedEmployee : Employee { public double Bsal { get; set; } public SalariedEmployee(string namae, double x) : base(namae) { Bsal = x; Clear(); } public override double GetSal() { return Bsal; } } class HourlyEmployee : Employee { public double SalPrh { get; protected set; } public int WorkT { get; set; } public HourlyEmployee(string namae, double preh) : base(namae) { SalPrh = preh; } public void NoteWork(int t) { WorkT += t; } public override void Clear() { WorkT = 0; } const int HourLaw = 40; public override double GetSal() { if (WorkT <= HourLaw) return SalPrh * WorkT; else return SalPrh * HourLaw + 1.5 * SalPrh * (WorkT - HourLaw); } } class CommissionEmployee : Employee { double Rate { get; set; } double ComVa { get; set; } public CommissionEmployee(string namae, double x) : base(namae) { Rate = x; } public override void Clear() { ComVa = 0; } public void NoteCom(double x) { ComVa += x; } public override double GetSal() { return ComVa * Rate; } } class BasePlusCommissionEmployee : CommissionEmployee { public double Bsal { get; set; } public BasePlusCommissionEmployee(string namae, double x, double r) : base(namae, r) { Bsal = x; } public override double GetSal() { return base.GetSal() + Bsal; } } class Program { static void Main(string[] args) { Employee[] eps = new Employee[4]; SalariedEmployee epa = new SalariedEmployee(\"A\", 10000); epa.SetBirth(1926, 8, 17); eps[0] = epa; HourlyEmployee epb = new HourlyEmployee(\"B\", 250); epb.SetBirth(1997, 7, 1); epb.NoteWork(50); eps[1] = epb; CommissionEmployee epc = new CommissionEmployee(\"C\", 0.05); epc.NoteCom(1e7); epc.SetBirth(2002, 8, 17); eps[2] = epc; BasePlusCommissionEmployee epd = new BasePlusCommissionEmployee(\"D\", 10000, 0.05); epd.NoteCom(1e7); epd.SetBirth(2020, 11, 30); eps[3] = epd; foreach (Employee ep in eps) { ep.WriteName(); ep.Earning(); } } }} C. 工资系统+计件工 修改例题9-3,增加Employee类的另一个派生类PieceWorker,表示计件工。 PieceWorker类具有专用的实例变量wage和pieces分别表示每件的工资和生产的件数。 在PieceWorker类中提供Earning方法的具体实现,计算员工的收入。计算方法是将件数乘以每件的工资。 创建一个Employee数组,存储新的类层次中每个具体类对象的引用,显示每个员工收入。 【注:】本题编译通过即可。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697using System;// Written by Sheauhaw Jang// 2020-11-10 10:54:13namespace CSharp_Week7_C{ abstract class Employee { public string Name { get; protected set; } public DateTime Birth { get; set; } public Employee(string namae) { Name = namae; Birth = new DateTime(1900, 1, 1); } public bool Bouns() { return DateTime.Now.Month == Birth.Month; } public abstract double GetSal(); public virtual void Clear() { } public void SetBirth(int y, int m, int d) { Birth = new DateTime(y, m, d); } public void WriteName() { Console.WriteLine(Name); } public double GetTotSal() { return GetSal() + (Bouns() ? 100 : 0); } public void Earning() { Console.WriteLine(GetTotSal()); } } class SalariedEmployee : Employee { public double Bsal { get; set; } public SalariedEmployee(string namae, double x) : base(namae) { Bsal = x; Clear(); } public override double GetSal() { return Bsal; } } class HourlyEmployee : Employee { public double SalPrh { get; protected set; } public int WorkT { get; set; } public HourlyEmployee(string namae, double preh) : base(namae) { SalPrh = preh; } public void NoteWork(int t) { WorkT += t; } public override void Clear() { WorkT = 0; } const int HourLaw = 40; public override double GetSal() { if (WorkT <= HourLaw) return SalPrh * WorkT; else return SalPrh * HourLaw + 1.5 * SalPrh * (WorkT - HourLaw); } } class CommissionEmployee : Employee { double Rate { get; set; } double ComVa { get; set; } public CommissionEmployee(string namae, double x) : base(namae) { Rate = x; } public override void Clear() { ComVa = 0; } public void NoteCom(double x) { ComVa += x; } public override double GetSal() { return ComVa * Rate; } } class BasePlusCommissionEmployee : CommissionEmployee { public double Bsal { get; set; } public BasePlusCommissionEmployee(string namae, double x, double r) : base(namae, r) { Bsal = x; } public override double GetSal() { return base.GetSal() + Bsal; } } class PieceWorker : Employee { double wage { get; set; } int pieces { get; set; } public PieceWorker(string namae, double x) : base(namae) { wage = x; } public override void Clear() { pieces = 0; } public void NotePieces(int x) { pieces += x; } public override double GetSal() { return pieces * wage; } } class Program { static void Main(string[] args) { Employee[] eps = new Employee[5]; SalariedEmployee epa = new SalariedEmployee(\"A\", 10000); epa.SetBirth(1926, 8, 17); eps[0] = epa; HourlyEmployee epb = new HourlyEmployee(\"B\", 250); epb.SetBirth(1997, 7, 1); epb.NoteWork(50); eps[1] = epb; CommissionEmployee epc = new CommissionEmployee(\"C\", 0.05); epc.NoteCom(1e7); epc.SetBirth(2002, 8, 17); eps[2] = epc; BasePlusCommissionEmployee epd = new BasePlusCommissionEmployee(\"D\", 10000, 0.05); epd.NoteCom(1e7); epd.SetBirth(2020, 11, 30); eps[3] = epd; PieceWorker epe = new PieceWorker(\"E\", 100); epe.NotePieces(100); epe.SetBirth(2077, 12, 31); eps[4] = epe; foreach (Employee ep in eps) { ep.WriteName(); ep.Earning(); } } }} D. 类和接口 定义一个动物类Animal,包含字段姓名、年龄,有1个带参数的构造方法,初始化2个私有字段。抽象方法叫Shout(); 鸽子类派生自Animal,新增私有字段羽毛(默认白色);覆写方法Shout(),方法体输出相关信息(自己组织格式)*岁的鸽子姓名咕咕叫; 猫类派生自Animal,新增属性胡须长度;覆写方法Shout(),方法体输出相关信息(自己组织格式)*岁的小猫姓名喵喵叫; 定义一个交通工具类Vehicle,包含颜色,品牌。有1个无参数的构造方法,初始化2个私有字段(默认值自己给)。 派生类飞机继承Vehicle。新增飞行高度属性。 定义接口IFly,包含方法Fly()。鸽子类、飞机类均继承该接口,实现Fly()。鸽子类的Fly()方法,输出*颜色的鸽子飞。飞机类的Fly()方法输出*品牌的飞机飞行在*千米的高空。 在主函数中生成对象,测试类中的方法。 【注:】本题编译通过即可。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253using System;// Written by Sheauhaw Jang// 2020-11-10 11:12:50namespace CSharp_Week7_D{ interface IFly { void Fly(); } abstract class Animal { public string Name { get; set; } public int Age { get; set; } public Animal(string namae, int x) { Name = namae; Age = x; } public abstract void Shout(); } class Pigeon : Animal, IFly { public int Wing { get; set; } public Pigeon(string namae, int x) : base(namae, x) { Wing = 0xffffff; } public override void Shout() { Console.WriteLine(\"{0}岁的鸽子{1}咕咕叫\", Age, Name); } public void Fly() { Console.WriteLine(\"{0}颜色的鸽子飞\", string.Format(\"#{0:X}\", Wing)); } } class Cat : Animal { public int Leng { get; set; } public Cat(string namae, int x) : base(namae, x) { Leng = 0; } public override void Shout() { Console.WriteLine(\"{0}岁的小猫{1}喵喵叫\", Age, Name); } } class Vehicle { public int Color { get; set; } public string Company { get; set; } public Vehicle() { Color = 0xffffff; Company = \"XJTU\"; } } class Plane : Vehicle, IFly { public int Height { get; set; } public void Fly() { Console.WriteLine(\"{0}品牌的飞机飞行在{1}千米的高空\", Company, Height); } } class Program { static void Main(string[] args) { Pigeon zdk = new Pigeon(\"Zeondik\", 18); zdk.Shout(); zdk.Fly(); Plane fakeloc = new Plane(); fakeloc.Height = 114514; fakeloc.Fly(); } }} E. *选做*——窗体程序“计算利率” 学习MOOC视频12.4例题计算利率,完成以下窗体程序。 要求: 1.熟悉Visual Studio新建Windows Form项目; 2.按照图示设计界面; \\3. 编写“确定”按钮的事件。 4.运行程序,输入“本金”、“利率”,选择“年龄”,点击“确定”按钮,“本息合计”显示计算结果。 【注】本题自愿完成。 解决方案","categories":[{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/categories/C/"}],"tags":[{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/tags/C/"}]},{"title":"C#程序设计 第7周题解","slug":"CSharp Week7","date":"2020-12-08T08:26:20.000Z","updated":"2020-12-08T08:26:22.000Z","comments":true,"path":"2020/12/08/CSharp Week7/","link":"","permalink":"https://sheauhawjang.github.io/2020/12/08/CSharp%20Week7/","excerpt":"A. Circle类的继承 定义圆类Circle,包含半径r,属性R能判断半径r的合理性(r>0),计算圆面积的方法double Area()。 从Circle类派生出圆柱体类Cylinder类。该类新增圆柱体的高h,属性H能判断高h的合理性(h>0),新增计算圆柱体体积的方法double Volume()。 如果半径、高不合法,就设置其值为0。 在Main方法中,创建一个Cylinder对象,输入半径和高(两行输入),并输出该对象的底面半径,高,底面积以及体积(面积和体积用double Math.round(doulbe b, int digit) digit取1。 (要求:不使用构造方法,并且类中的字段为私有,方法为公有)","text":"A. Circle类的继承 定义圆类Circle,包含半径r,属性R能判断半径r的合理性(r>0),计算圆面积的方法double Area()。 从Circle类派生出圆柱体类Cylinder类。该类新增圆柱体的高h,属性H能判断高h的合理性(h>0),新增计算圆柱体体积的方法double Volume()。 如果半径、高不合法,就设置其值为0。 在Main方法中,创建一个Cylinder对象,输入半径和高(两行输入),并输出该对象的底面半径,高,底面积以及体积(面积和体积用double Math.round(doulbe b, int digit) digit取1。 (要求:不使用构造方法,并且类中的字段为私有,方法为公有) 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849using System;// Written by Sheauhaw Jang// 2020-11-03 10:10:09namespace CSharp_Week6_A{ class Circle { private double r; public double R { get { return r; } set { r = value > 0 ? value : 0; } } public double Area() { return Math.PI * R * R; } } class Cylinder : Circle { private double h; public double H { get { return h; } set { h = value > 0 ? value : 0; } } public double Volume() { return Area() * H; } } static class OutputConvert { public static void OutputString(string sop, params double[] opv) { string[] ops = new string[4]; for (int i = 0; i < 4; ++i) { opv[i] = Math.Round(opv[i], 1); ops[i] = Convert.ToString(opv[i]); } Console.WriteLine(string.Join(\" \", ops)); } } class Program { static void Main(string[] args) { Cylinder ans = new Cylinder(); ans.R = Convert.ToDouble(Console.ReadLine()); ans.H = Convert.ToDouble(Console.ReadLine()); OutputConvert.OutputString(\" \", ans.R, ans.H, ans.Area(), ans.Volume()); } }} B. Circle类的继承——带参构造方法 定义圆类Circle,包含半径r,属性R能判断半径r的合理性(r>0),计算圆面积的方法double Area()。 从Circle类派生出圆柱体类Cylinder类。该类新增圆柱体的高h,属性H能判断高h的合理性(h>0),新增计算圆柱体体积的方法double Volume()。 如果半径、高不合法,就设置其值为0。 在Main方法中,创建一个Cylinder对象,输入半径和高(两行输入),并输出该对象的底面积、体积。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849using System;// Written by Sheauhaw Jang// 2020-11-03 10:27:06namespace CSharp_Week6_B{ class Circle { private double r; public double R { get { return r; } set { r = value > 0 ? value : 0; } } public double Area() { return Math.PI * R * R; } } class Cylinder : Circle { private double h; public double H { get { return h; } set { h = value > 0 ? value : 0; } } public double Volume() { return Area() * H; } } static class OutputConvert { public static void OutputString(string sop, params double[] opv) { string[] ops = new string[opv.Length]; for (int i = 0; i < opv.Length; ++i) { opv[i] = Math.Round(opv[i], 1); ops[i] = Convert.ToString(opv[i]); } Console.WriteLine(string.Join(\" \", ops)); } } class Program { static void Main(string[] args) { Cylinder ans = new Cylinder(); ans.R = Convert.ToDouble(Console.ReadLine()); ans.H = Convert.ToDouble(Console.ReadLine()); OutputConvert.OutputString(\" \", ans.Area(), ans.Volume()); } }} C. 点线类练习 从点类(Point):包含:带可选参数的构造方法Point(int x=0, int y=0), 输出坐标点的方法ShowPoint以及读写坐标x、y的属性方法。 派生类(Line):计算线段的长度。Line类中新增表示线段终点的字段EndPoint,起点字段StartPoint。 计算线段距离的方法Distance以及输出线段起点和终点的方法ShowLine。 在主函数中,创建两个点对象,输出线段的距离。 【注:】本题编译通过即可。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455using System;// Written by Sheauhaw Jang// 2020-11-03 11:09:15namespace CSharp_Week6_C{ class Point { public const int dim = 2; private int[] xs = new int[dim]; public int X { get { return xs[0]; } set { xs[0] = value; } } public int Y { get { return xs[1]; } set { xs[1] = value; } } public int At(int x) { return x < dim ? xs[x] : 0; } public Point(int x = 0, int y = 0) { X = x; Y = y; } public void ShowPoint() { Console.WriteLine(\"({0}, {1})\", X, Y); } } class Line { Point StartPoint, EndPoint; public Line(Point sp, Point ep) { StartPoint = sp; EndPoint = ep; } public void ShowLine() { Console.Write(\"StartPoint:\"); StartPoint.ShowPoint(); Console.Write(\"EndPoint:\"); EndPoint.ShowPoint(); } Func<int, int> sq = x => x * x; public double Distance() { int sqd = 0; for (int i = 0; i < Point.dim; ++i) sqd += sq(StartPoint.At(i) - EndPoint.At(i)); return Math.Sqrt(sqd); } public void ShowDistance() { Console.WriteLine(Distance()); } } class Program { static void Main(string[] args) { Point a = new Point(0, 0); Point b = new Point(1, 1); Line ab = new Line(a, b); ab.ShowDistance(); } }} D. Student类的继承练习 实现两个类。 StuGrade类。该类的作用是成绩相关的操作。包括: 私有字段 int[] gra(学生成绩); 构造函数 StuGrade(params int[] stusgra);用于初始化私有字段gra; 公有方法 public double AvgGrade();返回学生成绩的平均值。 Student类。包含: 2个public 自实现属性string Name(学生姓名)、string StuNum(学号); 1个private字段 string stuClass(学生班级); 1个StuGrade对象 stuG; 1个公有方法public bool IsStuNo(string s,out int res)。检测学号是否合法。其中s是待检查的学号。学号必须是8位数字,21开头。不是8位数字res置1,非21开头res置2。合法res=学号。 1个公有方法public bool AddStu(string name, string sno, StuGrade stug, string stuclass= \"数学\")。如果学号合法的对象,将姓名、学号、成绩、班级(默认是数学)赋值,返回true。否则,不赋值,返回false。 在Main函数中,新建Student类对象stu,并接收控制台输入的信息. 【样例输入】 姓名,学号 成绩 如果输入学号合法,输出 学号:Success!AverageGrade:平均分 如果输入学号非法,输出 学号:Invalid!Error Code:res的值 例如: 新建对象Student stu1,尝试对stu1设置信息Alex,20812000, 成绩是:1, 2, 3, 4, 5。将按照如下格式输出 20812000:Invalid!Error Code:2 新建Student类对象stu2 ,尝试对stu2设置信息Bob,21812000, 成绩是:1, 2, 3。将按照如下格式输出 21812000:Success!AverageGrade:2 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081using System;// Written by Sheauhaw Jang// 2020-11-03 10:30:01namespace CSharp_Week6_D{ class StuGrade { private int[] gra; public StuGrade(params int[] stusgra) { gra = stusgra; } public double AvgGrade() { double ans = 0; foreach (int sig in gra) ans += sig; ans /= gra.Length; return ans; } } class Student { public string Name { get; set; } public string StuNum { get; set; } private string stuClass; StuGrade stuG; const int vlen = 8; const string chpre = \"21\"; public static bool IsStuNo(string s, out int res) { if (s.Length != vlen) { res = 1; return false; } for (int i = 0; i < chpre.Length; ++i) if (s[i] != chpre[i]) { res = 2; return false; } res = Convert.ToInt32(s); return true; } public bool AddStu(string name, string sno, StuGrade stug, string stuclass = \"数学\") { int nov; if (!IsStuNo(sno, out nov)) return false; Name = name; StuNum = sno; stuG = stug; stuClass = stuclass; return true; } } public static class InputConvert { public static int[] GetInputArray(char SplitOperator) { string[] instr = Console.ReadLine().Split(SplitOperator); int[] invar = new int[instr.Length]; for (int i = 0; i < invar.Length; ++i) invar[i] = Convert.ToInt32(instr[i]); return invar; } } class Program { static void Main(string[] args) { string[] nameid = Console.ReadLine().Split(','); int res; if (!Student.IsStuNo(nameid[1], out res)) Console.WriteLine(\"{0}:Invalid!Error Code:{1}\", nameid[1], res); else { StuGrade sg = new StuGrade(InputConvert.GetInputArray(',')); Console.WriteLine(\"{0}:Success!AverageGrade:{1}\", nameid[1], sg.AvgGrade()); } } }}","categories":[{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/categories/C/"}],"tags":[{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/tags/C/"}]},{"title":"C#程序设计 第6周题解","slug":"CSharp Week6","date":"2020-12-08T08:20:08.000Z","updated":"2020-12-08T08:20:10.000Z","comments":true,"path":"2020/12/08/CSharp Week6/","link":"","permalink":"https://sheauhawjang.github.io/2020/12/08/CSharp%20Week6/","excerpt":"A. 重载方法的练习 在Main函数所在的类,实现两个方法用于计算成绩的平均值,小数点后1位。 public static double AvgGrade(int[] gra) //数值型成绩的平均值。得分1~5之间。课程数无限制。 public static double AvgGrade(string[] sgra) //成绩分为“good”和“ok”两个等级。good等价于4分,ok等价于1分。 在Main方法中,分别调用两种方法,均能输出平均成绩。输入用空格分开。 【注:】 四舍五入的区别请大家了解https://www.cnblogs.com/fanyong/archive/2013/05/30/chinese_round.html 大家选取“传统意义上的四舍五入”的定义方法。 保留*位小数的方法请参考 https://blog.csdn.net/qq_40985921/article/details/85414484","text":"A. 重载方法的练习 在Main函数所在的类,实现两个方法用于计算成绩的平均值,小数点后1位。 public static double AvgGrade(int[] gra) //数值型成绩的平均值。得分1~5之间。课程数无限制。 public static double AvgGrade(string[] sgra) //成绩分为“good”和“ok”两个等级。good等价于4分,ok等价于1分。 在Main方法中,分别调用两种方法,均能输出平均成绩。输入用空格分开。 【注:】 四舍五入的区别请大家了解https://www.cnblogs.com/fanyong/archive/2013/05/30/chinese_round.html 大家选取“传统意义上的四舍五入”的定义方法。 保留*位小数的方法请参考 https://blog.csdn.net/qq_40985921/article/details/85414484 123456789101112131415161718192021222324252627282930313233343536373839404142434445using System;// Written by Sheauhaw Jang// 2020-10-27 10:33:00namespace CSharp_Week5_A{ static class InputConvert { public static int[] ToInputArray(params string[] instr) { int[] invar = new int[instr.Length]; for (int i = 0; i < invar.Length; ++i) invar[i] = Convert.ToInt32(instr[i]); return invar; } } class Program { public static double AvgGrade(params int[] gra) { double ans = 0; foreach (int sg in gra) ans += sg; ans /= gra.Length; //ans = Math.Round(ans, 1); return ans; } public static double AvgGrade(params string[] sgra) { int[] gra = new int[sgra.Length]; for (int i = 0; i < sgra.Length; ++i) gra[i] = sgra[i] == \"good\" ? 4 : 1; return AvgGrade(gra); } static void Main(string[] args) { string[] ip = Console.ReadLine().Split(' '); double ans; if (ip[0][0] >= '0' && ip[0][0] <= '9') ans = AvgGrade(InputConvert.ToInputArray(ip)); else ans = AvgGrade(ip); Console.WriteLine(\"{0:0.0}\", ans); } }} B. 时间类 定义一个时间类。 成员有3个属性(包括对应的私有字段)年、月、日。属性要判断 年>0、12>=月份>0、日>0并要在所在月份天数之内。 一个构造方法,在构造方法中给属性赋值。 在program类中,定义一个方法,方法的两个参数就是时间类的对象。 方法的作用是,比较第一个参数(时间)和第二个参数(时间)的早晚,如果第一个时间早,返回1,相等返回0,小于返回-1。 在主函数main()中调用该方法。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110using System;// Written by Sheauhaw Jang// 2020-10-27 11:07:40namespace CSharp_Week5_B{ static class InputConvert { public static int[] ToInputArray(params string[] instr) { int[] invar = new int[instr.Length]; for (int i = 0; i < invar.Length; ++i) invar[i] = Convert.ToInt32(instr[i]); return invar; } } class Date { const int datelen = 3; private int year = -1, month = -1, day = -1; int[] data = new int[datelen]; public bool Vaild { get; private set; } public int Year { get { return year; } private set { if (value > 0) year = value; else Vaild = false; } } public int Month { get { return month; } private set { if (value > 0 && value <= 12) month = value; else Vaild = false; } } int DayLimit() { switch (Month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: if (Year % 400 == 0) return 29; else if (Year % 100 == 0) return 28; else if (Year % 4 == 0) return 29; else return 28; default: return -1; } } public int Day { get { return day; } private set { if (value > 0 && value <= DayLimit()) day = value; else Vaild = false; } } void Update(params int[] ip) { Vaild = true; for (int i = 0; i < datelen && i < ip.Length; ++i) data[i] = ip[i]; Year = data[0]; Month = data[1]; Day = data[2]; } void Update(params string[] sip) { Update(InputConvert.ToInputArray(sip)); } void Update(string date, char soperator) { Update(date.Split(soperator)); } public Date(params int[] ip) { Update(ip); } public Date(params string[] sip) { Update(sip); } public Date(string date, char soperator = '/') { Update(date, soperator); } public int CompareTo(Date b) { for (int i = 0; i < datelen; ++i) { if (data[i] < b.data[i]) return -1; if (data[i] > b.data[i]) return 1; } return 0; } } class Program { static void Main(string[] args) { string[] line = Console.ReadLine().Split(' '); Date[] cmp = new Date[line.Length]; for (int i = 0; i < line.Length; ++i) cmp[i] = new Date(line[i]); Console.WriteLine(-cmp[0].CompareTo(cmp[1])); } }} C. 控制台交互式小程序练习 开发计算机辅助教学程序,教小学生学乘法。程序功能: (1)程序开始时让用户选择“年级”为1或2。一年级使只用1位数乘法;二年级使用2位数乘法。 (2)用Random对象产生两个1位或2位正整数,然后输出以下问题,例如: How much is 6 times 7? 然后学生输入答案,程序检查学生的答案。如果正确,则打印“Very good!”,然后提出另一个乘法问题。如果不正确,则打印“No,Please try again.”,然后让学生重复回答这个问题,直到答对。 (3)答对3道题后程序结束。 (4)每个新的问题要求使用一个单独方法产生, 这个方法在程序开始时和每次用户答对时调用。 【注:】此程序无测试用例,编译通过即可。 偷懒了,没写。","categories":[{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/categories/C/"}],"tags":[{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/tags/C/"}]},{"title":"C#程序设计 第5周题解","slug":"CSharp Week5","date":"2020-12-08T08:16:31.000Z","updated":"2020-12-08T08:16:34.000Z","comments":true,"path":"2020/12/08/CSharp Week5/","link":"","permalink":"https://sheauhawjang.github.io/2020/12/08/CSharp%20Week5/","excerpt":"A. 属性的使用 定义Rectangle类,类中的两个属性Length和Width(其对应的私有字段为length和width,默认值为均为1)。 Length属性的set方法中验证其值必须在0~20(开区间)之间的浮点数。如果不满足保持其默认值。 方法: 计算长方形的周长public double Perimeter() 计算长方形的面积public double Area() 输入长方形的长和宽的值,输出长方形的周长、面积。","text":"A. 属性的使用 定义Rectangle类,类中的两个属性Length和Width(其对应的私有字段为length和width,默认值为均为1)。 Length属性的set方法中验证其值必须在0~20(开区间)之间的浮点数。如果不满足保持其默认值。 方法: 计算长方形的周长public double Perimeter() 计算长方形的面积public double Area() 输入长方形的长和宽的值,输出长方形的周长、面积。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354using System;// Written by Sheauhaw Jang// 2020-10-20 10:15:50namespace CSharp_Week4_A{ class Rectangle { double length = 1; double width = 1; double Length { get { return length; } set { if (value > 0 && value < 20) length = value; } } double Width { get { return width; } set { width = value; } } public Rectangle() { } public Rectangle(double l, double w) { Length = l; Width = w; } public double Perimeter() { return 2 * (length + width); } public double Area() { return length * width; } } static class InputConvert { public static double[] GetInputArray(char SplitOperator) { string[] instr = Console.ReadLine().Split(SplitOperator); double[] invar = new double[instr.Length]; for (int i = 0; i < invar.Length; ++i) invar[i] = Convert.ToDouble(instr[i]); return invar; } } class Program { static void Main(string[] args) { double[] lenwid = InputConvert.GetInputArray(' '); Rectangle tim = new Rectangle(lenwid[0], lenwid[1]); Console.WriteLine(tim.Perimeter()); Console.WriteLine(tim.Area()); } }} B. 利用一维数组求解问题。 读入若干(1-15个)整数(一行输入,空格分隔),每个数在10-100之间的整数包括10和100。 在读入每个数时,确认这个数的有效性(在10到100之间),并且若它和之前读入的数不一样,就把它存储到数组中,无效的数不存储。 读完所有数之后,仅显示用户输入的不同的数值。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061using System;using System.Collections;// Written by Sheauhaw Jang// 2020-10-20 10:48:45namespace CSharp_Week4_B{ class NumberPile { static readonly int[] range = { 10, 100 }; readonly bool[] check = new bool[range[1] - range[0] + 1]; ArrayList save = new ArrayList(); public NumberPile() { for (int i = 0; i < check.Length; ++i) check[i] = false; } public bool CheckIn(int x) { if (x < range[0] || x > range[1]) return false; return check[x - range[0]]; } public bool CheckChange(int x) { if (x < range[0] || x > range[1]) return false; return check[x - range[0]] = true; } public void Push(params int[] xs) { foreach (int x in xs) if (x >= range[0] && x <= range[1]) if (!CheckIn(x)) { save.Add(x); CheckChange(x); } } public void Write() { Console.WriteLine(string.Join(\" \", save.ToArray())); } } static class InputConvert { public static int[] GetInputArray(char SplitOperator) { string[] instr = Console.ReadLine().Split(SplitOperator); int[] invar = new int[instr.Length]; for (int i = 0; i < invar.Length; ++i) invar[i] = Convert.ToInt32(instr[i]); return invar; } } class Program { static void Main(string[] args) { NumberPile p = new NumberPile(); p.Push(InputConvert.GetInputArray(' ')); p.Write(); } }} C. 成绩排序 创建一个学生类。 字段:学号(string类型)、成绩(用一个一维数组,存储一个学生的5门课成绩) 方法:将学生的5门课成绩由小到大顺序输出。 主函数中,声明3个学生对象,从控制台给每个学生的学号和5门课成绩赋值,调用方法输出。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960using System;namespace CSharp_Week4_C{ class Student { string name; const int subnum = 5; int[] score = new int[subnum]; public Student() { name = \"NoName\"; for (int i = 0; i < subnum; ++i) score[i] = 0; } public Student(params string[] info) { if (info == null) return; if (info.Length > 0) name = info[0]; for (int i = 0; i < subnum; ++i) if (info.Length > i + 1) score[i] = Convert.ToInt32(info[i + 1]); else score[i] = 0; } public Student(string na, params int[] info) { name = na; for (int i = 0; i < subnum; ++i) if (info.Length > i) score[i] = info[i]; else score[i] = 0; } public void Sort() { Array.Sort(score); } public void Write() { string[] info = new string[subnum + 1]; info[0] = name; for (int i = 0; i < subnum; ++i) info[i + 1] = Convert.ToString(score[i]); Console.WriteLine(string.Join(\" \", info)); } } class Program { static void Main(string[] args) { const int stunum = 3; for (int i = 0; i < stunum; ++i) { Student stu = new Student(Console.ReadLine().Split(' ')); stu.Sort(); stu.Write(); } } }} D. 洗牌与发牌 参照课本第五章【案例研究】——模拟洗牌与发牌。 此题目涉及多种概念,请大家参照课本(或MOOC视频)完成代码编写。 【注:】提交后,编译通过即可。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173using System;using System.Text;// Written by Sheauhaw Jang// 2020-10-19 11:57:10namespace CSharp_Week4_D{ class Card { public int Number { get; private set; } public int Suit { get; private set; } public int Id { get; private set; } static string[] suits = new string[] { \"♠\", \"♥\", \"♣\", \"♦\" }; static string NumberName(int x) { switch (x) { case 1: return \"A\"; case 11: return \"J\"; case 12: return \"Q\"; case 13: return \"K\"; default: return Convert.ToString(x); } } public Card(int id) { Id = id; Number = id / 4 + 1; Suit = id % 4; } public Card(int num, int type) { Id = 4 * Number - 4 + Suit; Number = num; Suit = type; } public string GetSuitS() { return suits[Suit]; } public string GetNumberS() { return NumberName(Number); } public string GetName() { return GetSuitS() + GetNumberS(); } public int CompareTo(Card b) { if (Id < b.Id) return -1; if (Id > b.Id) return 1; return 0; } } class PokerPile { static int cardnum = 52; Card[] pcards = new Card[cardnum]; public PokerPile() { for (int i = 0; i < cardnum; ++i) pcards[i] = new Card(i); } void swap(ref Card a, ref Card b) { Card tmp = b; b = a; a = tmp; } public void Shuffle(params int[] seed) { Random tool; if (seed.Length == 0) { Console.WriteLine(\"随机洗牌中......\"); tool = new Random(); } else { Console.WriteLine(\"作弊洗牌中......\"); string dinfo = string.Format(\"{0:X}\", seed[0]); while (dinfo.Length < 8) dinfo = \"0\" + dinfo; dinfo = \"0x\" + dinfo; Console.WriteLine(\"种子为:{0}\", dinfo); tool = new Random(seed[0]); } for (int i = 0; i < cardnum; ++i) swap(ref pcards[i], ref pcards[tool.Next(i, cardnum)]); Console.WriteLine(\"洗牌完毕!\"); } public void Sort() { Console.WriteLine(\"恢复牌堆中......\"); Array.Sort(pcards, (a, b) => a.CompareTo(b)); Console.WriteLine(\"恢复完毕!\"); } const int playernum = 4; readonly static string[] defname = new string[] { \"甲\", \"乙\", \"丙\", \"丁\" }; readonly static string[] align = new string[] { \"第\", \"\", \"张:\", \"\", \"\\t\\t\" }; const int alignlen = 7; int GetPreStr(string org) // 防止破坏格式, 字母1格, 非字母2格, 不得超过7格. { int cnt = alignlen; for (int i = 0; i < cnt && i < org.Length; ++i) if (org[i] > 127) --cnt; return cnt; } public void HandOut(params string[] name) { Console.WriteLine(\"发牌中......\"); string[] rname = new string[playernum]; for (int i = 0; i < playernum; ++i) if (name.Length <= i || name[i].Length < 1) rname[i] = defname[i]; else { int remLen = GetPreStr(name[i]); if (remLen < name[i].Length) rname[i] = name[i].Remove(remLen); else rname[i] = name[i]; } for (int i = 0; i < playernum; ++i) Console.Write(\"\\t{0}\\t\\t\", rname[i]); for (int i = 0; i < cardnum; ++i) { if (i % playernum == 0) Console.WriteLine(); string[] s = new string[align.Length]; Array.Copy(align, s, align.Length); s[1] = Convert.ToString(i + 1); while (s[1].Length < 2) s[1] = \" \" + s[1]; s[3] = pcards[i].GetName(); Console.Write(string.Join(\"\", s)); } Console.WriteLine(); Console.WriteLine(\"发牌完毕!\"); } public void DoAsk() { while (true) { Console.Write(\">> \"); string[] csla = Console.ReadLine().Split(' '); if (csla.Length == 0) continue; switch (csla[0]) { case \"洗牌\": try { Shuffle(Convert.ToInt32(csla[1])); } catch { Shuffle(); } break; case \"恢复\": Sort(); break; case \"发牌\": string[] aft = new string[csla.Length - 1]; Array.Copy(csla, 1, aft, 0, aft.Length); HandOut(aft); break; case \"结束\": return; default: Console.WriteLine(\"命令未找到!\"); break; } } } } class Program { static void Main(string[] args) { Console.OutputEncoding = new UTF8Encoding(); PokerPile p = new PokerPile(); p.Shuffle(); p.HandOut(); p.Sort(); p.Shuffle(0x01315878); p.HandOut(\"徐忠锋\", \"乔亚男\", \"平田一郎\"); p.Sort(); p.HandOut(\"Zeondik,,Sheauhaw\".Split(',')); p.DoAsk(); } }}","categories":[{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/categories/C/"}],"tags":[{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/tags/C/"}]},{"title":"C#程序设计 第4周题解","slug":"CSharp Week4","date":"2020-12-08T08:14:17.000Z","updated":"2020-12-08T08:14:23.000Z","comments":true,"path":"2020/12/08/CSharp Week4/","link":"","permalink":"https://sheauhawjang.github.io/2020/12/08/CSharp%20Week4/","excerpt":"A. 孪生素数查找程序 所谓孪生素数指的是间隔为2 的相邻素数,就像孪生兄弟。最小的孪生素数是(3, 5),在100 以内的孪生素数还有(3,5), (5,7), (11,13),(17,19),(29,31),(41,43),(59,61),(71,73) 总计有 8 组。(备注:每组孪生素数之间用英文逗号,分隔) 输入正整数,输出小于等于number的孪生素数的组数。","text":"A. 孪生素数查找程序 所谓孪生素数指的是间隔为2 的相邻素数,就像孪生兄弟。最小的孪生素数是(3, 5),在100 以内的孪生素数还有(3,5), (5,7), (11,13),(17,19),(29,31),(41,43),(59,61),(71,73) 总计有 8 组。(备注:每组孪生素数之间用英文逗号,分隔) 输入正整数,输出小于等于number的孪生素数的组数。 1234567891011121314151617181920212223242526272829303132333435363738394041using System;namespace CSharp_Week3_A{ public static class NumberChecker { public static bool CheckPrime(int x) { if (x < 2) return false; for (int i = 2; i * i <= x; ++i) if (x % i == 0) return false; return true; } public static int NextNumber(int x) { return x + 2; } public static bool TwinPrime(int x) { return CheckPrime(x) && CheckPrime(NextNumber(x)); } public static void WriteTwin(int x, ref bool split) { if (split) Console.Write(\",\"); else split = true; Console.Write(\"({0},{1})\", x, NextNumber(x)); } } class Program { static void Main(string[] args) { bool split = false; int n = Convert.ToInt32(Console.ReadLine()); for (int i = 1; NumberChecker.NextNumber(i) <= n; ++i) if (NumberChecker.TwinPrime(i)) NumberChecker.WriteTwin(i, ref split); } }} B. 求a+aa+aaa+aaaa+...+aa...a 求a+aa+aaa+aaaa+...+aa...a(第n项,n个a),其中a是1~9的整数。例如, a=1,n=3时,式子为1+11+111; 当a=6,n=5时,式子为5+55+555+5555+55555。 格式: 第一行为输入a n 第二行为输出结果 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354using System;namespace CSharp_Week3_B{ public class Calculate { int a, n; long[] save; long ans = 0; void update() { if (n < 1) return; save = new long[n]; save[0] = a; for (int i = 1; i < n; ++i) save[i] = save[i - 1] * 10 + a; foreach (long sig in save) ans += sig; } public Calculate(int va, int vn) { a = va; n = vn; update(); } public void SetDigit(int va) { a = va; update(); } public void SetLength(int vn) { n = vn; update(); } public long At(int x) { return x >= 0 && x < n ? save[x] : 0; } public long Get(int len) { return len > 0 && len <= n ? save[len - 1] : 0; } public long GetSum() { return ans; } public void WriteSum() { Console.WriteLine(ans); } } public static class InputConvert { public static int[] GetInputArray() { string[] instr = Console.ReadLine().Split(' '); int[] invar = new int[instr.Length]; for (int i = 0; i<invar.Length; ++i) invar[i] = Convert.ToInt32(instr[i]); return invar; } } class Program { static void Main(string[] args) { int[] an = InputConvert.GetInputArray(); Calculate equ = new Calculate(an[0], an[1]); equ.WriteSum(); } }} C. 天数计算 输入公元年份和月份,输出该月份的天数。(用switch……case语句) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051using System;namespace CSharp_Week3_C{ public static class InputConvert { public static int[] GetInputArray(char SplitOperator) { string[] instr = Console.ReadLine().Split(SplitOperator); int[] invar = new int[instr.Length]; for (int i = 0; i < invar.Length; ++i) invar[i] = Convert.ToInt32(instr[i]); return invar; } } public static class DateCalculate { public static int GetDays(int year, int month) { switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: if (year % 400 == 0) return 29; if (year % 100 == 0) return 28; if (year % 4 == 0) return 29; return 28; default: return 0; } } public static void WriteDays(int year, int month) { Console.WriteLine(GetDays(year, month)); } } class Program { static void Main(string[] args) { int[] ym = InputConvert.GetInputArray(','); DateCalculate.WriteDays(ym[0], ym[1]); } }} D. 文字祖玛游戏 程序通过用户输入一个字符串(长度不超过30),由A、B、C、D、E五个字母组成,例如:ACBEEBBAD。 用户再输入一个字符,只能是A、B、C、D、E其中之一,然后再输入一个要插入的位置。 程序会将这个字符插入到字符串的指定位置前(第一个字符位置为0,第二个字符位置为1,依此类推),然后消除连续出现的三个相同的字符,直到没有连续三个相同的字符为止。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566using System;namespace CSharp_Week3_D{ public class ZumaMap { string map; static int rule = 3; public ZumaMap() { map = Console.ReadLine(); } public ZumaMap(string s) { map = s; } public string GetMap() { return map; } public void WriteMap() { Console.WriteLine(map); } public bool AutoRemove() { for (int i = 0; i + rule <= map.Length; ++i) { bool check = true; for (int j = 1; j < rule; ++j) if (map[i + j] != map[i]) { check = false; break; } if (check) { map = map.Remove(i, rule); return true; } } return false; } public void Update() { while (AutoRemove()) ; } public void Insert(int insloc, char insvar) { map = map.Insert(insloc, Convert.ToString(insvar)); Update(); } } public static class InputConvert { public static string[] GetInputStrings(char SplitOperator) { return Console.ReadLine().Split(SplitOperator); } public static int[] GetInputArray(char SplitOperator) { string[] instr = Console.ReadLine().Split(SplitOperator); int[] invar = new int[instr.Length]; for (int i = 0; i < invar.Length; ++i) invar[i] = Convert.ToInt32(instr[i]); return invar; } } class Program { static void Main(string[] args) { ZumaMap map = new ZumaMap(); string[] insertinfo = InputConvert.GetInputStrings(' '); int insloc = Convert.ToInt32(insertinfo[1]); char insvar = Convert.ToChar(insertinfo[0]); map.Insert(insloc, insvar); map.WriteMap(); } }}","categories":[{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/categories/C/"}],"tags":[{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/tags/C/"}]},{"title":"C#程序设计 第3周题解","slug":"CSharp Week3","date":"2020-12-08T08:10:47.000Z","updated":"2020-12-08T08:10:49.000Z","comments":true,"path":"2020/12/08/CSharp Week3/","link":"","permalink":"https://sheauhawjang.github.io/2020/12/08/CSharp%20Week3/","excerpt":"A. 输入输出练习 在一行内输入5个整数,空格分隔。输出5个整数,逗号分隔。英文符号。(输入的接收请参考课本例题1-5,注意Split()的用法)","text":"A. 输入输出练习 在一行内输入5个整数,空格分隔。输出5个整数,逗号分隔。英文符号。(输入的接收请参考课本例题1-5,注意Split()的用法) 1234567891011121314151617181920212223242526272829using System;// Written by Sheauhaw Jang// 2020-10-14 13:10:22namespace CSharp_Week2_A{ public static class InputConvert { public static string[] GetInputStrings(char SplitOperator) { return Console.ReadLine().Split(SplitOperator); } public static int[] GetInputArray(char SplitOperator) { string[] instr = GetInputStrings(SplitOperator); int[] invar = new int[instr.Length]; for (int i = 0; i < invar.Length; ++i) invar[i] = Convert.ToInt32(instr[i]); return invar; } } class Program { static void Main(string[] args) { string[] numstr = InputConvert.GetInputStrings(' '); Console.WriteLine(string.Join(\",\", numstr)); } }} B. 三角形的类和方法 定义一个三角型类,具有3个public的字段(double)为三角形的3边的长度。提供2个public的方法: bool IsTriAngle()判断这3边能否构成一个三角形; double Area() 求三角形的面积(如果不能构成三角形,返回值为-1) 输入三角形的3条边,用空格分隔。如果能构成三角形,直接输出三角形面积;否则输出-1 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465using System;// Written by Sheauhaw Jang// 2020-10-14 13:19:31namespace CSharp_Week2_B{ class TriAngle { static int sidenumber = 3; double[] sides = new double[sidenumber]; bool vaild; double totlen, area; bool TriAngleVaildCheck() { for (int i = 0; i < sidenumber; ++i) if (totlen <= 2 * sides[i]) return false; return true; } double AreaCalculate() { double barlen = totlen / 2; double ans = barlen; for (int i = 0; i < sidenumber; ++i) ans *= barlen - sides[i]; return Math.Sqrt(ans); } void update(double[] x) { totlen = 0; for (int i = 0; i < x.Length && i < sidenumber; ++i) sides[i] = x[i]; for (int i = 0; i < sidenumber; ++i) totlen += sides[i]; vaild = TriAngleVaildCheck(); area = vaild ? AreaCalculate() : 0; } public TriAngle(double[] x) { update(x); } public TriAngle(double a, double b, double c) { update(new double[]{ a, b, c }); } public bool IsTriAngle() { return vaild; } public double Area() { return area; } } public static class InputConvert { public static double[] GetInputArray(char SplitOperator) { string[] instr = Console.ReadLine().Split(SplitOperator); double[] invar = new double[instr.Length]; for (int i = 0; i < invar.Length; ++i) invar[i] = Convert.ToDouble(instr[i]); return invar; } } class Program { static void Main(string[] args) { TriAngle tri = new TriAngle(InputConvert.GetInputArray(' ')); if (tri.IsTriAngle()) Console.WriteLine(tri.Area()); else Console.WriteLine(-1); } }} C. 日期Date类 创建一个Date类,要求能输入以下格式的日期: 第一种:MM/YYYY 构造函数接收2个整数 第二种:June,1992 构造函数接收一个字符串和一个整数 当用户输入其出生年月日时,能够计算出用户的年龄(到年即可。向下取整)。当用户输入的日期无意义或未来时间,输出invalid。(当前时间取系统时间,请查C#自带的取时间的函数) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778using System;// Written by Sheauhaw Jang// 2020-10-19 11:36:13namespace CSharp_Week2_C{ class Date { static string[] engname = new string[] { \"\", \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\" }; public int Year { get; private set; } public int Month { get; private set; } public static int NowYear() { return DateTime.Now.Year; } public static int NowMonth() { return DateTime.Now.Month; } void SetTypeNum(string date) { string[] spdate = date.Split('/'); if (spdate.Length != 2) return; Year = Convert.ToInt32(spdate[1]); Month = Convert.ToInt32(spdate[0]); } void SetTypeEng(string date) { string[] spdate = date.Split(','); if (spdate.Length != 2) return; Year = Convert.ToInt32(spdate[1]); for (int i = 1; i <= 12; ++i) if (spdate[0] == engname[i]) Month = i; } void SetDefault() { Year = Month = 0; } public Date() { SetDefault(); } public Date(string date) { SetDefault(); if (date[2] == '/') SetTypeNum(date); else SetTypeEng(date); } public bool Vaild() { if (Month < 1 || Month > 12) return false; if (Year > NowYear()) return false; if (Year == NowYear() && Month > NowMonth()) return false; return true; } public int GetAge() { return NowYear() - Year; } } class Program { static void Main(string[] args) { string date = Console.ReadLine(); Date birth = new Date(date); if (birth.Vaild()) Console.WriteLine(\"{0}岁\", birth.GetAge()); else Console.WriteLine(\"invalid\"); } }} D. 心率检查 运动时,可以利用心率监测仪来查看心率是否处于安全范围内。其中最高心率=220-年龄;目标心率是最高心率的50%-85%(向下取整); 创建一个名称为HeartRates的类。这个类的的属性应该包含人的姓名、出生年份和当前年份。 类中还包含一个计算并返回年龄(以整年计算)的属性;一个计算并返回最高心率分方法;以及2个分别计算最低和最高目标心率的方法; 编写程序,实例化HeartRates类,输入个人姓名,出生年月日(空格分隔)。并输出对象的信息,包括姓名,出生年份;年龄;最高心率,最低目标心率,最高目标心率(空格分隔) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566using System;// Written by Sheauhaw Jang// 2020-10-19 11:55:43namespace CSharp_Week2_D{ public static class InputConvert { public static int[] GetInputArray(char SplitOperator) { string[] instr = Console.ReadLine().Split(SplitOperator); int[] invar = new int[instr.Length]; for (int i = 0; i < invar.Length; ++i) invar[i] = Convert.ToInt32(instr[i]); return invar; } } class HeartRates { public string Name { get; private set; } public int Year { get; private set; } public int Month { get; private set; } public int Days { get; private set; } public static int NowYear() { return DateTime.Now.Year; } void SetTypeNum(string date) { string[] spdate = date.Split('/'); Year = Convert.ToInt32(spdate[0]); Month = Convert.ToInt32(spdate[1]); Days = Convert.ToInt32(spdate[2]); } void SetDefault() { Year = Month = Days = 0; } public HeartRates() { SetDefault(); } public HeartRates(string[] info) { SetDefault(); Name = info[0]; SetTypeNum(info[1]); } public int GetAge() { return NowYear() - Year; } public int MaxRates() { return 220 - GetAge(); } public int MinGoalRates() { return (int)(MaxRates() * 0.5); } public int MaxGoalRates() { return (int)(MaxRates() * 0.85); } public string GetInfoLine() { string[] info = new string[6]; info[0] = Name; info[1] = Convert.ToString(Year) + \"年\"; info[2] = Convert.ToString(GetAge()) + \"岁\"; info[3] = \"最高心率\" + Convert.ToString(MaxRates()); info[4] = \"最低目标心率\" + Convert.ToString(MinGoalRates()); info[5] = \"最高目标心率\" + Convert.ToString(MaxGoalRates()); return string.Join(\" \", info); } public void WriteInfoLine() { Console.WriteLine(GetInfoLine()); } } class Program { static void Main(string[] args) { string[] infos = Console.ReadLine().Split(' '); HeartRates peo = new HeartRates(infos); peo.WriteInfoLine(); } }}","categories":[{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/categories/C/"}],"tags":[{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/tags/C/"}]},{"title":"C#程序设计 第2周题解","slug":"CSharp Week2","date":"2020-09-23T04:23:27.000Z","updated":"2020-09-23T04:23:27.000Z","comments":true,"path":"2020/09/23/CSharp Week2/","link":"","permalink":"https://sheauhawjang.github.io/2020/09/23/CSharp%20Week2/","excerpt":"A. 计算两个数的和、差、商、积。 从键盘分别输入两个不为0的整数(前2行输入),分别输出这两个整数的和 差 积 商。","text":"A. 计算两个数的和、差、商、积。 从键盘分别输入两个不为0的整数(前2行输入),分别输出这两个整数的和 差 积 商。 12345678910111213141516171819202122232425262728293031323334using System;// Written by Sheauhaw Jang// 2020-09-22 10:50:57namespace CSharp_Week1_A{ public class Calculate { public static int Get(int a, int b, int type) { switch(type) { case 0: return a + b; case 1: return a - b; case 2: return a * b; case 3: return a / b; } return 0; } } class Program { static void Main(string[] args) { int a = Convert.ToInt32(Console.ReadLine()); int b = Convert.ToInt32(Console.ReadLine()); for (int i = 0; i < 4; ++i) { if (i > 0) Console.Write(' '); Console.Write(Calculate.Get(a, b, i)); } } }} B. 时间转换 输入表示时间的整数,单位是秒。输出*天*小时*分*秒。 如果时间单位前的数值是0,则不输出该时间单位的数值。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546using System;// Written by Sheauhaw Jang// 2020-09-22 11:17:04namespace CSharp_Week1_B{ public class TimeManager { public static long day = 60 * 60 * 24; public static long hour = 60 * 60; public static long minute = 60; public static long second = 1; public static long[] units = { day, hour, minute, second }; public static string[] unitsName = { \"天\", \"小时\", \"分\", \"秒\" }; public static long GetUnitCount(long tVar, int type) { if (type != 0) tVar %= units[type - 1]; return tVar / units[type]; } public static bool WriteUnitCount(long tVar, int type) { long ans = GetUnitCount(tVar, type); if (ans == 0) return false; Console.Write(ans); Console.Write(unitsName[type]); return true; } public static bool WriteCount(long tVar) { bool ans = false; for (int i = 0; i < units.Length; ++i) if (WriteUnitCount(tVar, i)) ans = true; return ans; } } class Program { static void Main(string[] args) { long tVar = Convert.ToInt64(Console.ReadLine()); TimeManager.WriteCount(tVar); } }} C. 整数加密 对于一个4位整数(从0000-9999)按如下方式加密:将每位数字加7后对10取余,用余数替换原来的数字;然后将1,3位数字互换;2,4位数字互换。 输入一个4位数,输出加密后的结果。 123456789101112131415161718192021222324252627282930313233343536373839404142using System;// Written by Sheauhaw Jang// 2020-09-22 11:44:47namespace CSharp_Week1_C{ public class Encode { static int AddModulo(int x, int p) { return x >= p ? x - p : x; } static void Swap<T>(ref T a, ref T b) { T tmp = b; b = a; a = tmp; } public static int[] DoEncoding(string x) { int[] code = new int[x.Length]; for (int i = 0; i < x.Length; ++i) { code[i] = x[i] - '0'; code[i] = AddModulo(code[i] + 7, 10); } Swap(ref code[0], ref code[2]); Swap(ref code[1], ref code[3]); return code; } public static void WriteCode(string x) { int[] code = DoEncoding(x); foreach (int digit in code) Console.Write(digit); } } class Program { static void Main(string[] args) { string x = Console.ReadLine(); Encode.WriteCode(x); } }} D. 字符串输入输出 输入一个字符串,按照样例格式输出。 样例: Alice Hi Alice, Welcome to C# 2020! Best wishes! 1234567891011121314151617using System;// Written by Sheauhaw Jang// 2020-09-22 11:58:50namespace CSharp_Week1_D{ class Program { static void Main(string[] args) { string s = Console.ReadLine(); Console.WriteLine(\"Hi {0},\", s); Console.WriteLine(\"Welcome to C# 2020!\"); Console.WriteLine(); Console.WriteLine(\"Best wishes!\"); } }} E. 字符大小写转换 输入一个字母,如果它是小写字母则输出它的大写字母,如果它是大写字母输出它的小写字母。 123456789101112131415161718using System;// Written by Sheauhaw Jang// 2020-09-22 21:28:37namespace CSharp_Week1_E{ class Program { static void Main(string[] args) { int s = Console.Read(); if (s >= 'a' && s <= 'z') s = s - 'a' + 'A'; else s = s - 'A' + 'a'; Console.WriteLine(Convert.ToChar(s)); } }}","categories":[{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/categories/C/"}],"tags":[{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/tags/C/"}]},{"title":"2020 XJTU 校队夏季训练8 E题题解","slug":"2020 Summer Training 8E","date":"2020-08-31T15:09:52.000Z","updated":"2020-09-01T14:27:04.000Z","comments":true,"path":"2020/08/31/2020 Summer Training 8E/","link":"","permalink":"https://sheauhawjang.github.io/2020/08/31/2020%20Summer%20Training%208E/","excerpt":"题目来源: 2019-2020 XX Opencup GP of Tokyo: E. Count Modulo 2 题目链接: http://codeforces.com/gym/102586/problem/E 题面 一共 \\(T\\) 组数据. 现有 \\(k\\) 个 两两不同 的数字 \\(A_1,A_2,\\cdots,A_k\\). 给定正整数 \\(N,S\\), 构造数列 \\(a_1,a_2,\\cdots,a_N\\), 满足下列条件: \\(\\displaystyle\\sum_{i=1}^Na_i=S\\). \\(\\forall i\\in[1,N]\\), \\(a_i\\in\\{A_1,A_2,\\cdots,A_k\\}\\). 求构造的方案数在模 \\(\\mathbf 2\\) 意义下的结果. 数据范围 \\[ 1\\le T\\le 5 \\] \\[ 1\\le N\\le10^{18} \\] \\[ 0\\le S\\le 10^{18} \\] \\[ 1\\le k\\le 200 \\] \\[ 0\\le A_1<A_2<\\cdots<A_k\\le10^5 \\]","text":"题目来源: 2019-2020 XX Opencup GP of Tokyo: E. Count Modulo 2 题目链接: http://codeforces.com/gym/102586/problem/E 题面 一共 \\(T\\) 组数据. 现有 \\(k\\) 个 两两不同 的数字 \\(A_1,A_2,\\cdots,A_k\\). 给定正整数 \\(N,S\\), 构造数列 \\(a_1,a_2,\\cdots,a_N\\), 满足下列条件: \\(\\displaystyle\\sum_{i=1}^Na_i=S\\). \\(\\forall i\\in[1,N]\\), \\(a_i\\in\\{A_1,A_2,\\cdots,A_k\\}\\). 求构造的方案数在模 \\(\\mathbf 2\\) 意义下的结果. 数据范围 \\[ 1\\le T\\le 5 \\] \\[ 1\\le N\\le10^{18} \\] \\[ 0\\le S\\le 10^{18} \\] \\[ 1\\le k\\le 200 \\] \\[ 0\\le A_1<A_2<\\cdots<A_k\\le10^5 \\] 题解 组合数学计算 若数列 \\(a\\) 满足题设条件, 则 \\(a\\) 由若干个 \\(A_1,A_2,\\cdots,A_k\\) 组成. 设 \\(a\\) 由 \\(t_i\\) 个 \\(A_i\\) (\\(i=1,2,\\cdots,k\\)) 组成, 则由题意有: \\[ \\begin{aligned} t_1A_1+t_2A_2+\\cdots+t_kA_k&=S\\\\ t_1+t_2+\\cdots+t_k&=N \\end{aligned}\\tag1 \\] 由于数列中的元素顺序任意交换后仍满足条件. 于是将命题 \\((1)\\) 对应的数列归为一类, 则这样的一类中的数列数量, 依组合数学, 可知: \\[ C=\\frac{N!}{t_1!t_2!\\cdots t_k!} \\] 注意到只考虑模 \\(2\\) 意义下的结果, 于是只考虑 \\(C\\bmod 2\\ne0\\) 的情况即可. 由于模数为 \\(2\\), 只要 \\(C\\bmod2\\ne0\\), 就一定有 \\(C\\bmod2=1\\), 对结果的贡献为 \\(1\\). 二进制拆位 定理 \\(n!\\) 的标准分解式为: \\[ n!=\\prod_{p}{p^{\\alpha(p,n)}} \\] \\[ \\newcommand{\\flor}[1]{\\left\\lfloor #1 \\right\\rfloor}\\alpha(p,n)=\\sum_{i}{\\left\\lfloor\\frac{n}{p^i}\\right\\rfloor} \\] 由上述定理, \\(C\\) 的标准分解式为: \\[ C=\\prod_{p}{p^{A_p}} \\] \\[ \\begin{aligned} A_p&=\\sum_{i}{\\flor{\\frac{N}{p^i}}}-\\sum_{j=1}^k\\sum_{i}{\\flor{\\frac{t_j}{p^i}}}\\\\ &=\\sum_{i}\\left(\\flor{\\frac{N}{p^i}}-\\sum_{j=1}^k\\flor{\\frac{t_j}{p^i}}\\right) \\end{aligned} \\] 于是, 对于任意素数 \\(p\\), \\(C\\bmod p\\ne0\\) 的充分必要条件是 \\(A_p=0\\). 由于 \\(\\forall i\\), \\[ \\sum_{j=1}^k\\flor{\\frac{t_j}{p^i}}\\le\\flor{\\sum_{j=1}^k\\frac{t_j}{p^i}}=\\flor{\\frac{N}{p^i}}\\tag2 \\] 于是 \\(A_p=0\\) 的充分必要条件是: \\(\\forall i\\), \\((2)\\) 式等号成立. 从 \\(p\\) 进制数运算的角度来看, \\(\\flor{x/p^i}\\) 就是 \\(x\\) 的 \\(p\\) 进制数去掉低 \\(i\\) 位的结果, 等号成立的条件就是 \\(t_1,t_2,\\cdots,t_k\\) 的低 \\(i\\) 位之和不会在第 \\(i+1\\) 位上产生进位. 因为: \\[ \\flor{\\frac{N}{p^i}}=\\flor{\\sum_{i=1}^k\\frac{t_j}{p^i}}=\\sum_{j=1}^k\\flor{\\frac{t_j}{p^i}}+\\flor{\\sum_{j=1}^k\\left\\{\\frac{t_j}{p^i}\\right\\}} \\] 其中: \\(\\{x\\}\\) 表示 \\(x\\) 的小数部分, \\(\\displaystyle\\flor{\\sum_{j=1}^k\\left\\{\\frac{t_j}{p^i}\\right\\}}\\) 就是产生的进位. 由于 \\(\\forall i\\), 第 \\(i\\) 位都不产生进位, 若用 \\(x[i]\\) 表示 \\(x\\) 的第 \\(i\\) 位数字 (最低位为 \\(0\\)), 则可以得到 \\(\\forall i\\), \\[ \\sum_{j=1}^kt_j[i]=N[i] \\] 对于上述命题, 考虑 \\(p=2\\) 的特例, 有一个比较好的性质: \\(C\\bmod 2\\) 的结果只有 \\(0,1\\) 两种取值. \\(\\forall i\\), \\(N[i]\\) 只有 \\(0,1\\) 两种取值. 若 \\(N[i]=0\\), 则 \\(t_1[i]=t_2[i]=\\cdots=t_k[i]=0\\). 否则, \\(t_1[i],t_2[i],\\cdots,t_k[i]\\) 中有且仅有一个 \\(1\\). 这时, 讨论 \\(t_1[i],t_2[i],\\cdots,t_k[i]\\) 哪个是 \\(1\\) 即可. 如果 \\(t_{xi}[i]=1\\), 则会带来 \\(2^{i-1}A_{xi}\\) 的贡献. 于是只需要讨论, 有多少种 \\(A_{x1}, A_{x2},\\cdots\\) 的选择方案, 使得 \\[ \\sum_{N[i]=1}2^{i-1}A_{xi}=S \\] 即可. 背包问题转化 对于选择方案, 其实本质是一个背包问题: 对于重量为 \\(2^{i-1}\\) 的物品, 若 \\(N[i]=1\\), 则你可以选择 \\(A_1,A_2,\\cdots,A_k\\) 个, 否则不能选择; 最终让背包容量为 \\(S\\). 令 \\(dp(i,v)\\) 为考虑了 \\(i\\) 位, 且已占用背包容量为 \\(v\\) 的方案数, 则状态转移为: \\[ dp(i,v)=\\begin{cases} \\displaystyle \\sum_{j=1}^kdp(i-1,v-2^{i-1}A_j)& N[i]=1\\\\ dp(i-1,v)&N[i]=0 \\end{cases} \\] 或者写为 \\[ dp(i,v)\\stackrel{+}\\longrightarrow \\begin{cases} dp(i+1,v+2^i A_j)&j=1,2,\\cdots,k&N[i]=1\\\\ dp(i+1,v)&&N[i]=0 \\end{cases} \\] 最终答案为 \\(dp(\\flor{\\log N}+1,S)\\). 时间复杂度为 \\(O(kS\\log N)\\), 不能接受, 考虑优化. 二进制优化 注意到考虑了 \\(i\\) 位后, 低 \\(i\\) 位的值不再改变. 我们只需要考虑低 \\(i\\) 位与 \\(S\\) 的低 \\(i\\) 位相同的情况即可, 转移的时候不需要再考虑这些, 这样我们只需要记录 \\(v\\) 去掉低 \\(i\\) 位后的值 \\(v'\\) 即可. 记 \\(v=2^{i-1}v'+S\\bmod 2^{i-1}\\), 于是状态转移变成了: \\[ dp(i,v')= \\begin{cases} \\displaystyle\\sum_{j=1}^kdp(i-1,2v'+S[i]-A_j)&j=1,2,\\cdots,k&N[i]=1\\\\ dp(i-1,2v'+S[i])&&N[i]=0 \\end{cases} \\] 或者写为: \\[ dp(i,v')\\stackrel{+}\\longrightarrow \\begin{cases} \\displaystyle dp\\left(i+1,\\frac{v'+A_j-S[i]}2\\right)&j=1,2,\\cdots,k&N[i]=1\\\\ \\displaystyle dp\\left(i+1,\\frac{v'-S[i]}2\\right)&&N[i]=0 \\end{cases}\\tag3 \\] 最终答案即 \\(dp(\\flor{\\log N}+1, 0)\\). 记 \\(\\boldsymbol A:=\\{A_1,A_2,\\cdots,A_k\\}\\), \\(\\bar A=\\sup\\boldsymbol A\\) 若 \\(v'\\le\\bar A\\), 则 \\[ \\frac{v'+A_j-S[i]}{2}\\le\\frac{\\bar A+\\bar A-S[i]}{2}\\le\\bar A \\] 由于状态边界 \\(dp(0,0)=1\\) 的 \\(v'=0\\le\\bar A\\), 于是所有有效的状态都满足 \\(v'\\le\\bar A\\), 状态转移时 \\(v'>\\bar A\\) 的情况不再考虑. 于是时间复杂度为 \\(O(k\\bar A\\log N)\\), 空间复杂度 \\(O(\\bar A\\log N)\\). Bitset 优化 由于动态转移的过程是模 \\(2\\) 意义下的加法, 本质上是 \\(0,1\\) 之间的异或, 自然考虑 bitset 优化的可能性. bitset 可以快速地进行整体异或, 左移, 右移等操作. 如何利用这个特性呢? 注意到下标的整体转移可以左移右移, 而 \\((3)\\) 式的分子就是整体转移, 于是考虑先整体转移再除以 \\(2\\) 的中间状态. 记 \\(tdp(i,v')=dp(i,v'/2)\\), 这样 \\((3)\\) 式的状态转移就可以写成: \\[ dp(i,v')\\stackrel{+}\\longrightarrow \\begin{cases} \\displaystyle tdp\\left(i+1,v'+A_j\\right)&j=1,2,\\cdots,k&N[i]=1\\\\ \\displaystyle tdp\\left(i+1,v'\\right)&&N[i]=0 \\end{cases}\\tag3 \\] \\[ tdp(i+1,v')\\stackrel{+}\\longrightarrow dp\\left(i+1,\\flor{\\frac{v'}2}\\right)\\quad v'[0]=S[i] \\] \\[ dp(i+1,v')=tdp(i+1,2v'+S[i])\\tag4 \\] \\((3)\\) 式的转移可以通过右移, 进行整体转移, 这一步是 \\(O(k\\bar A)\\) 的, 但是获得了 \\(1/64\\) 的常数. \\((4)\\) 式的转移可以直接每一位计算, 这一步是 \\(O(\\bar A)\\) 的. 于是整体复杂度获得了 \\(1/64\\) 的常数, 速度加快了. 注意: \\(dp\\) 的 \\(v'\\le\\bar A\\), 于是中间状态 \\(tdp\\) 的 \\(v'\\le2\\bar A\\). bitset 类的长度应该为 \\(2\\bar A\\). 代码实现 123456789101112131415161718192021222324252627282930313233343536373839404142434445#include <bits/stdc++.h>using namespace std;typedef long long ll;int as[210], ck[64], cks[64];const int mxn = 2.05e5;bitset<mxn> dp[64], tdp;int main(){ ios::sync_with_stdio(false); cin.tie(0); int t; cin >> t; while (t--) { ll n, s, k; cin >> n >> s >> k; for (int i = 0; i < k; ++i) cin >> as[i]; for (ll i = 0; i < 63; ++i) if ((n >> i) & 1ll) ck[i] = 1; for (ll i = 0; i < 63; ++i) if ((s >> i) & 1ll) cks[i] = 1; dp[0].set(0); int frm; for (int i = 0; i <= 62; ++i) { if (ck[i]) for (int j = 0; j < k; ++j) tdp ^= (dp[i] << as[j]); else tdp = dp[i]; for (int kp = cks[i]; kp < mxn; kp += 2) dp[i + 1][kp >> 1] = tdp[kp]; tdp.reset(); } cout << dp[63][0] << \"\\n\"; for (int i = 0; i < 64; ++i) dp[i].reset(); memset(ck, 0, sizeof(ck)); memset(cks, 0, sizeof(cks)); } return 0;} 花絮 二进制优化的题目很多, 我的思路来自 XJTUOJ-1046 mob的科学麻将, 这也是一道经典的二进制优化的题目. 题目链接: https://oj.xjtuicpc.com/problem/1046. 本题的题解可以见本人编写的《小学期实录》第91页. 这道题调了许多时间, 少任意一个优化, 或者数组开小了, 都会造成 Wrong Answer 或者 Time Limit Exceeded.","categories":[{"name":"XCPC题解","slug":"XCPC题解","permalink":"https://sheauhawjang.github.io/categories/XCPC%E9%A2%98%E8%A7%A3/"}],"tags":[{"name":"数论","slug":"数论","permalink":"https://sheauhawjang.github.io/tags/%E6%95%B0%E8%AE%BA/"},{"name":"组合数学","slug":"组合数学","permalink":"https://sheauhawjang.github.io/tags/%E7%BB%84%E5%90%88%E6%95%B0%E5%AD%A6/"},{"name":"动态规划","slug":"动态规划","permalink":"https://sheauhawjang.github.io/tags/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/"},{"name":"bitset","slug":"bitset","permalink":"https://sheauhawjang.github.io/tags/bitset/"},{"name":"训练","slug":"训练","permalink":"https://sheauhawjang.github.io/tags/%E8%AE%AD%E7%BB%83/"}]},{"title":"2020 小学期 Day7F 题解","slug":"2020 Microterm 1-7F","date":"2020-08-20T14:51:30.000Z","updated":"2020-08-21T14:20:01.000Z","comments":true,"path":"2020/08/20/2020 Microterm 1-7F/","link":"","permalink":"https://sheauhawjang.github.io/2020/08/20/2020%20Microterm%201-7F/","excerpt":"题目来源: Educational Codeforces Round 85: E. Divisor Paths 题目链接: https://codeforces.com/contest/1334/problem/E 题目来源: XJTUOJ-1167 zxh的高考幸运法阵 题目链接: https://oj.xjtuicpc.com/problem/1167 题面 给定一个正整数 \\(D\\), 根据如下规则构造一个图 \\(\\mathfrak D\\): \\(\\mathfrak D\\) 的每一个节点都是 \\(D\\) 的一个正因数. \\(\\mathfrak D\\) 的两个节点 \\(x,y\\) 如果满足: \\(x>y\\), \\(y\\mid x\\) 且 \\(x/y\\) 是素数, 那么 \\(\\mathfrak D\\) 上就会有一个 \\(x,y\\) 之间的无向边, 边权为 \\(d(x)-d(y)\\). 其中 \\(d\\) 是除数函数, 表示因子个数. 现在有 \\(q\\) 次询问, 每次询问 \\(\\mathfrak D\\) 中两个节点 \\(u,v\\) 之间的最短路的个数 \\(N(u,v)\\), 输出对 \\(p\\) 取模后的结果. 备注 在 Codeforces 中的题目 \\(p=998244353\\). 在 XJTUOJ 中的题目 \\(p=919260817\\). 注意, \\(919260817\\) 是一个质数. 数据范围 \\[ 1\\le D\\le 10^{15} \\] \\[ 1\\le q\\le3\\cdot10^5 \\] \\[ 1\\le u,v\\le D \\]","text":"题目来源: Educational Codeforces Round 85: E. Divisor Paths 题目链接: https://codeforces.com/contest/1334/problem/E 题目来源: XJTUOJ-1167 zxh的高考幸运法阵 题目链接: https://oj.xjtuicpc.com/problem/1167 题面 给定一个正整数 \\(D\\), 根据如下规则构造一个图 \\(\\mathfrak D\\): \\(\\mathfrak D\\) 的每一个节点都是 \\(D\\) 的一个正因数. \\(\\mathfrak D\\) 的两个节点 \\(x,y\\) 如果满足: \\(x>y\\), \\(y\\mid x\\) 且 \\(x/y\\) 是素数, 那么 \\(\\mathfrak D\\) 上就会有一个 \\(x,y\\) 之间的无向边, 边权为 \\(d(x)-d(y)\\). 其中 \\(d\\) 是除数函数, 表示因子个数. 现在有 \\(q\\) 次询问, 每次询问 \\(\\mathfrak D\\) 中两个节点 \\(u,v\\) 之间的最短路的个数 \\(N(u,v)\\), 输出对 \\(p\\) 取模后的结果. 备注 在 Codeforces 中的题目 \\(p=998244353\\). 在 XJTUOJ 中的题目 \\(p=919260817\\). 注意, \\(919260817\\) 是一个质数. 数据范围 \\[ 1\\le D\\le 10^{15} \\] \\[ 1\\le q\\le3\\cdot10^5 \\] \\[ 1\\le u,v\\le D \\] 题解 记 \\(S(x)\\) 为 \\(x\\) 的因子构成的集合. 考虑在 \\(\\mathfrak D\\) 边上行走的效果: 设 \\(u,v\\) 之间连接了一条边, \\(u>v\\): 从 \\(v\\) 到 \\(u\\) 是 “向上走”, 编号乘上了一个素数, \\(S\\) 增加了一些因子, 边权就是 \\(S\\) 增加的因子数; 从 \\(u\\) 到 \\(v\\) 是 “向下走”, 编号除以了一个素数, \\(S\\) 减少了一些因子, 边权就是 \\(S\\) 减少的因子数. 考虑整除的情形: 即 \\(x\\) 走到 \\(y\\) 的过程, 其中 \\(x\\mid y\\). 这样至少要增加 \\(d(y)-d(x)\\) 个因子. 这时, 最理想的情况就是只增加因子, 不减少因子, 这样的路径长度就是 \\(d(y)-d(x)\\). 不断地向上走, 不断地乘上一个素数, 直到节点到达 \\(y\\), 这样的路径就是一条最短路. 设 \\(y/x=p_1^{\\alpha_1}p_2^{\\alpha_2}\\cdots p_s^{\\alpha_s}\\), 则一条最短路需要乘 \\(\\alpha_1\\) 次 \\(p_1\\), 乘 \\(\\alpha_2\\) 次 \\(p_2\\), \\(\\cdots\\), 乘 \\(\\alpha_s\\) 次 \\(p_s\\). 乘素数的顺序不同, 所代表的最短路也不同. 依组合数学, 一共有 \\[ \\frac{\\left(\\displaystyle\\sum_{i=1}^s\\alpha_i\\right)!}{\\displaystyle\\prod_{i=1}^s\\alpha_i!}=\\frac{(\\alpha_1+\\alpha_2+\\cdots+\\alpha_s)!}{\\alpha_1!\\alpha_2!\\cdots\\alpha_s!}=N(x,y)\\tag1 \\] 种排列方式, 这就是这种情形的答案. 对于不整除的情形, 我们需要分别乘一些素数和除以一些素数. 乘和除的顺序是怎样的? 应该是先尽可能地向下走, 再向上走. 即, 先从 \\(x\\) 走到 \\(\\gcd(x,y)\\), 之后再从 \\(\\gcd(x,y)\\) 走到 \\(y\\). 这是因为, 向下走会减少之后每一步向上走的时候增加的因子数目, 同时避免向上走导致的向下走删除的因子数目的增多. 这两步走法都是整除的情形, 可以用公式 \\((1)\\) 计算. 由乘法原理, 走法数就是这两步走法数的乘积, 即 \\[ N(x,y)=N(\\gcd(x,y),x)\\cdot N(\\gcd(x,y),y) \\] 综上所述: \\[ N(x,y)=\\begin{cases} \\displaystyle\\frac{(\\alpha_1+\\alpha_2+\\cdots+\\alpha_s)!}{\\alpha_1!\\alpha_2!\\cdots\\alpha_s!}&x\\mid y&\\displaystyle \\frac yx=p_1^{\\alpha_1}p_2^{\\alpha_2}\\cdots p_s^{\\alpha_s}\\\\ N(\\gcd(x,y),x)\\cdot N(\\gcd(x,y),y)&x\\nmid y \\end{cases} \\] 在算法实现上, 阶乘可以预处理, 算出 \\(y/x\\) 的标准分解式即可直接得到答案. 由于 \\(x,y,y/x\\) 都是 \\(D\\) 的因子, 标准分解式中的质数一定是 \\(D\\) 的质因子, 而 \\(D\\) 的质因子最多有 \\(\\log D\\) 个, 于是可以预处理 \\(D\\) 的所有质因子, 然后计算标准分解式时, 计算每个质因子的指数即可. 分解复杂度为 \\(O(\\log D)\\), 计算复杂度为 \\(O(\\log D)\\). 总时间复杂度为 \\(O(q\\log D)\\). 代码实现 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465#include <bits/stdc++.h>using namespace std;typedef long long ll;class llp; // 见我的模板vector<ll> ps;map<ll, int> cnt;const int mx = 1e5;llp pows[mx], invs[mx];void dvd(ll d){ for (ll p = 2; p * p <= d; ++p) if (d % p == 0) { ps.push_back(p); do d /= p; while (d % p == 0); } if (d != 1) ps.push_back(d);}ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }llp solve(ll u, ll v){ if (u == v) return 1; if (u > v) swap(u, v); if (v % u != 0) return solve(gcd(u, v), u) * solve(gcd(u, v), v); cnt.clear(); ll up = v / u; ll tcnt = 0; for (ll p : ps) while (up % p == 0) up /= p, ++cnt[p], ++tcnt; llp ans = pows[tcnt]; for (auto x : cnt) ans *= invs[x.second]; return ans;}int main(){ pows[0] = 1; for (int i = 1; i < mx; ++i) pows[i] = pows[i - 1] * i; invs[mx - 1] = ~pows[mx - 1]; for (int i = mx - 2; i >= 0; --i) invs[i] = invs[i + 1] * (i + 1); ll d; scanf(\"%lld\", &d); dvd(d); int q; scanf(\"%d\", &q); for (int t = 0; t < q; ++t) { ll v, u; scanf(\"%lld%lld\", &u, &v); printf(\"%d\\n\", (int)solve(v, u)); } return 0;}","categories":[{"name":"XCPC题解","slug":"XCPC题解","permalink":"https://sheauhawjang.github.io/categories/XCPC%E9%A2%98%E8%A7%A3/"}],"tags":[{"name":"数论","slug":"数论","permalink":"https://sheauhawjang.github.io/tags/%E6%95%B0%E8%AE%BA/"},{"name":"图论","slug":"图论","permalink":"https://sheauhawjang.github.io/tags/%E5%9B%BE%E8%AE%BA/"},{"name":"组合数学","slug":"组合数学","permalink":"https://sheauhawjang.github.io/tags/%E7%BB%84%E5%90%88%E6%95%B0%E5%AD%A6/"},{"name":"小学期","slug":"小学期","permalink":"https://sheauhawjang.github.io/tags/%E5%B0%8F%E5%AD%A6%E6%9C%9F/"}]},{"title":"2020 小学期第一期 Day7G 题解","slug":"2020 Microterm 1-7G","date":"2020-08-19T04:33:50.000Z","updated":"2020-08-20T14:55:49.000Z","comments":true,"path":"2020/08/19/2020 Microterm 1-7G/","link":"","permalink":"https://sheauhawjang.github.io/2020/08/19/2020%20Microterm%201-7G/","excerpt":"题目来源: XJTUOJ-1168 zxh的后宫管理系统 题目链接: https://oj.xjtuicpc.com/problem/1168 题面 一共 \\(T\\) 组数据. 现有一个未知的整数 \\(k\\), 满足 \\(1\\le k\\le n\\). 现在你被宣称 \\(k\\) 的值等于 \\(x\\), 但是你不知道真假. 你现在可以提交一个任意大的正整数 \\(y\\), 之后获得返回值 \\(\\gcd(k,y)\\). 你需要寻找一个合适的 \\(y\\), 使得你可以通过返回值来查验 \\(x\\) 和 \\(k\\) 是否相等. 如果有很多满足条件的值, 选阿泽最小的那个. 如果没有合适的 \\(y\\), 输出 \\(-1\\). 由于 \\(y\\) 很大, 输出对 \\(920011128\\) 取模后的结果. 简要描述 给定 \\(n, x\\), 试给出一个最小的 \\(y\\), 使得 \\(\\forall 1\\le a\\le n\\), 若 \\(a\\ne x\\), 则 \\(\\gcd(a,y)\\ne \\gcd(x,y)\\). 由于 \\(y\\) 很大, 输出对 \\(920011128\\) 取模后的结果. 数据范围 \\[ 1\\le T<10 \\] \\[ 1\\le k\\le n\\le10^7 \\]","text":"题目来源: XJTUOJ-1168 zxh的后宫管理系统 题目链接: https://oj.xjtuicpc.com/problem/1168 题面 一共 \\(T\\) 组数据. 现有一个未知的整数 \\(k\\), 满足 \\(1\\le k\\le n\\). 现在你被宣称 \\(k\\) 的值等于 \\(x\\), 但是你不知道真假. 你现在可以提交一个任意大的正整数 \\(y\\), 之后获得返回值 \\(\\gcd(k,y)\\). 你需要寻找一个合适的 \\(y\\), 使得你可以通过返回值来查验 \\(x\\) 和 \\(k\\) 是否相等. 如果有很多满足条件的值, 选阿泽最小的那个. 如果没有合适的 \\(y\\), 输出 \\(-1\\). 由于 \\(y\\) 很大, 输出对 \\(920011128\\) 取模后的结果. 简要描述 给定 \\(n, x\\), 试给出一个最小的 \\(y\\), 使得 \\(\\forall 1\\le a\\le n\\), 若 \\(a\\ne x\\), 则 \\(\\gcd(a,y)\\ne \\gcd(x,y)\\). 由于 \\(y\\) 很大, 输出对 \\(920011128\\) 取模后的结果. 数据范围 \\[ 1\\le T<10 \\] \\[ 1\\le k\\le n\\le10^7 \\] 题解 答案为 \\[ y=x\\prod_{p\\le n/x}p \\] 证明见 2020 CCPC Wannafly 冬令营 Day1H 题解. 采用线性筛预处理 \\([1,10^7]\\) 中的所有素数. 若每次询问暴力计算素数乘积, 则复杂度为 \\(O(Tn)\\). 若采用前缀积, 则复杂度为 \\(O(T+n)\\). 代码实现 123456789101112131415161718192021222324252627282930313233343536373839404142#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e7 + 5;const int p = 920011128;vector<int> ps; // 所有素数bool chk[maxn]; // 合数为truell psum[maxn];void fillPrime(int rge){ for (int i = 2; i <= rge; i++) { if (!chk[i]) ps.push_back(i); for (int j = 0; j < ps.size() && ps[j] <= rge / i; j++) { chk[i * ps[j]] = true; if (i % ps[j] == 0) break; } }}int main(){ const int rge = 1e7 + 3; fillPrime(rge); psum[0] = psum[1] = 1; for (int i = 2; i <= rge; ++i) if (chk[i]) psum[i] = psum[i - 1]; else psum[i] = psum[i - 1] * i % p; int t; cin >> t; for (int tt = 0; tt < t; ++tt) { ll n, k; cin >> n >> k; cout << k * psum[n / k] % p << endl; } return 0;}","categories":[{"name":"XCPC题解","slug":"XCPC题解","permalink":"https://sheauhawjang.github.io/categories/XCPC%E9%A2%98%E8%A7%A3/"}],"tags":[{"name":"数论","slug":"数论","permalink":"https://sheauhawjang.github.io/tags/%E6%95%B0%E8%AE%BA/"},{"name":"小学期","slug":"小学期","permalink":"https://sheauhawjang.github.io/tags/%E5%B0%8F%E5%AD%A6%E6%9C%9F/"},{"name":"构造","slug":"构造","permalink":"https://sheauhawjang.github.io/tags/%E6%9E%84%E9%80%A0/"}]},{"title":"2020 CCPC Wannafly 冬令营 Day1H 题解","slug":"2020 Wannafly Winter 1H","date":"2020-08-18T12:11:01.000Z","updated":"2020-08-19T15:50:44.000Z","comments":true,"path":"2020/08/18/2020 Wannafly Winter 1H/","link":"","permalink":"https://sheauhawjang.github.io/2020/08/18/2020%20Wannafly%20Winter%201H/","excerpt":"题目来源: 2020 CCPC Wannafly 冬令营 Day1: H. 最大公约数 题面 一共 \\(T\\) 组数据. 现有一个未知的整数 \\(k\\), 满足 \\(1\\le k\\le n\\). 现在你被宣称 \\(k\\) 的值等于 \\(x\\), 但是你不知道真假. 你现在可以提交一个任意大的正整数 \\(y\\), 之后获得返回值 \\(\\gcd(k,y)\\). 你需要输出一个合适的 \\(y\\), 使得你可以通过返回值来查验 \\(x\\) 和 \\(k\\) 是否相等. 如果有很多满足条件的值, 输出最小的那个. 如果没有合适的 \\(y\\), 输出 \\(-1\\). 简要描述 给定 \\(n, x\\), 试给出一个最小 \\(y\\), 使得 \\(\\forall 1\\le a\\le n\\), 若 \\(a\\ne x\\), 则 \\(\\gcd(a,y)\\ne \\gcd(x,y)\\). 数据范围 \\[ 1\\le T\\le 50 \\] \\[ 1\\le k\\le n\\le500 \\]","text":"题目来源: 2020 CCPC Wannafly 冬令营 Day1: H. 最大公约数 题面 一共 \\(T\\) 组数据. 现有一个未知的整数 \\(k\\), 满足 \\(1\\le k\\le n\\). 现在你被宣称 \\(k\\) 的值等于 \\(x\\), 但是你不知道真假. 你现在可以提交一个任意大的正整数 \\(y\\), 之后获得返回值 \\(\\gcd(k,y)\\). 你需要输出一个合适的 \\(y\\), 使得你可以通过返回值来查验 \\(x\\) 和 \\(k\\) 是否相等. 如果有很多满足条件的值, 输出最小的那个. 如果没有合适的 \\(y\\), 输出 \\(-1\\). 简要描述 给定 \\(n, x\\), 试给出一个最小 \\(y\\), 使得 \\(\\forall 1\\le a\\le n\\), 若 \\(a\\ne x\\), 则 \\(\\gcd(a,y)\\ne \\gcd(x,y)\\). 数据范围 \\[ 1\\le T\\le 50 \\] \\[ 1\\le k\\le n\\le500 \\] 题解 注意到 \\(\\gcd(x,y)=\\gcd(\\gcd(x,y),y)\\), 于是应满足 \\(\\gcd(x,y)=x\\), 即 \\(x\\mid y\\). 设 \\(y=xy'\\). 若 \\(x\\nmid a\\), 则显然 \\(\\gcd(a,y)\\ne x\\). \\(\\forall a'\\in(1,n/x]\\), 都有 \\(\\gcd(a'x,y)=x\\gcd(a',y')\\), 于是此时 \\(\\gcd(a',y')\\ne 1\\). 考虑到: 对于任意 \\((1,n/x]\\) 中的素数 \\(p\\), 亦都应该有 \\(\\gcd(p,y')\\ne 1\\), 此时有 \\(\\gcd(p,y')=p\\), \\(p\\mid y'\\). 于是这些素数的乘积 \\(P\\) 满足 \\(P\\mid y'\\). \\(P\\le y'\\). 若 \\(P=y'\\), 则 \\(\\forall a'\\in (1,n/x]\\), \\(a'\\) 的任意素因子 \\(p\\) 一定满足 \\(1<p\\le a'\\le n/x\\), \\(p\\mid y\\), 于是 \\(\\gcd(a',y')\\ne 1\\), \\(\\gcd(a'x,y)\\ne x\\). 于是取 \\(P=y'\\) 是可行的, 而且是最小的解. 预处理 \\([1,500]\\) 中的所有素数, 解就是 \\[ y=x\\prod_{p\\le n/x}p \\] 由于 \\(y\\) 的可能的最大值超过了 \\(2^{128}\\), 于是应该使用高精度乘法, 或者使用 Python. 忽略高精度乘法的复杂度常数. 若每次询问暴力计算素数乘积, 则复杂度为 \\(O(Tn)\\). 若采用前缀积, 则复杂度为 \\(O(T+n)\\). 代码实现 1234567891011121314prime = [2,3,5,7,11,13,17,19,...,599] # 600以内的素数请自己打表补全, 这里省略.ts = 0hds = [1]for i in range (1, 600): if (prime[ts] == i): hds.append(int(prime[ts] * hds[i - 1])) ts += 1 else: hds.append(hds[i - 1])t = int(input())for rt in range (0, t): n, k = map(int, input().split(' ')) print(k * hds[n // k])","categories":[{"name":"XCPC题解","slug":"XCPC题解","permalink":"https://sheauhawjang.github.io/categories/XCPC%E9%A2%98%E8%A7%A3/"}],"tags":[{"name":"数论","slug":"数论","permalink":"https://sheauhawjang.github.io/tags/%E6%95%B0%E8%AE%BA/"},{"name":"构造","slug":"构造","permalink":"https://sheauhawjang.github.io/tags/%E6%9E%84%E9%80%A0/"},{"name":"2020 CCPC WannaFly 冬令营","slug":"2020-CCPC-WannaFly-冬令营","permalink":"https://sheauhawjang.github.io/tags/2020-CCPC-WannaFly-%E5%86%AC%E4%BB%A4%E8%90%A5/"},{"name":"高精度","slug":"高精度","permalink":"https://sheauhawjang.github.io/tags/%E9%AB%98%E7%B2%BE%E5%BA%A6/"}]},{"title":"模 p 同余类模板","slug":"Modulo p Module","date":"2020-08-14T13:00:23.000Z","updated":"2020-08-14T14:14:08.000Z","comments":true,"path":"2020/08/14/Modulo p Module/","link":"","permalink":"https://sheauhawjang.github.io/2020/08/14/Modulo%20p%20Module/","excerpt":"该模板为作者原创. 问题引入 请输出对 \\(p\\) 取模后的结果. 请输出模 \\(p\\) 意义下的结果. 最终答案可以表示为 \\(a/b\\), 请输出 \\(a\\cdot b^{-1}\\bmod p\\), 其中 \\(b^{-1}\\) 是 \\(b\\) 对模 \\(p\\) 的乘法逆元. 在我们做题的时候, 经常会遇到输出在模 \\(p\\) 意义下的结果的题目. 上面三种是经典的这种要求的说法.","text":"该模板为作者原创. 问题引入 请输出对 \\(p\\) 取模后的结果. 请输出模 \\(p\\) 意义下的结果. 最终答案可以表示为 \\(a/b\\), 请输出 \\(a\\cdot b^{-1}\\bmod p\\), 其中 \\(b^{-1}\\) 是 \\(b\\) 对模 \\(p\\) 的乘法逆元. 在我们做题的时候, 经常会遇到输出在模 \\(p\\) 意义下的结果的题目. 上面三种是经典的这种要求的说法. 传统做法 这种题目在计算的过程中, 需要用到大量的取模运算. 原则上, 每进行一次加减乘除的运算, 都需要进行至少一次取模. 在读入一个变量后, 也应该立即进行至少一次取模. 如果结果产生了负数, 则可能需要再进行一次取模来避免这种情况的发生. 例如: 计算 \\((a+b)\\bmod p\\). \\(-2^{63}<a,b<2^{63}\\), \\(1<p<2^{62}\\). 123456789#include<stdio.h>typedef long long ll;int main(){ ll a, b, p; scanf(\"%lld%lld%lld\", &a, &b, &p); printf(\"%lld\", ((a % p + b % p) % p + p) % p); return 0;} 注意到, 这个简单的程序进行了 4 次了取模. 这样产生了一些问题: 在这个程序中, 每一步取模都是缺一不可的. 对 \\(a,b\\) 的取模是防止 \\(a+b\\) 过大; 对和取模是题目要求; 最后对取模后的结果在加上一个 \\(p\\) 后取模是为了防止直接取模得到负数. 上述四个取模缺少任意一个没有替代品的取模, 都会导致答案的错误. 而在做题的过程中, 上述的取模运算或替代品都是机械化而重复的, 有代码复用的可能; 同时, 这些运算缺一不可, 而在赛场考场上做题时, 在大面积的取模过程中, 可能一时疏忽漏掉某个取模, 导致算法正确的程序出现 Wrong Answer 的情况, 这种错误又很难查验, 因此高效便捷的代码复用很有必要. 而且, 取模运算速度较慢, 应该减少模运算的使用: 在某些情况下利用 if-else 结构或三目运算符 ?: 来作为直接偷懒使用取模符号的替代品. 然而, 这些替代品虽然增加了效率, 但是却让代码更加反直觉, 编写更为复杂, 大量重复出现不利于赛场考场的应用. 代码复用就可以令这些问题迎刃而解. 代码实现 题面固定模数 \\(p\\) 情况的实现, 这也是最常见的一种情况. 如果 \\(p\\) 是通过键盘输入, 且对于一组数据, 输入后不再改变, 则只需将类声明中的 static const int 类型的常量的声明作为全程序的全局变量即可. 但是对变量取模会显著地比对常量取模更慢. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980#include <bits/stdc++.h>using namespace std;#define rep(i, n) for (int i = 0; i < n; ++i)typedef long long ll;class llp{ int v; template <class T> llp(T a, int) { v = a; }public: static const int p = 998244353; static const int phi = p - 1; static const int invp = phi - 1; llp() { v = 0; } template <class T> static T mod(T a) { return a %= p, a >= 0 ? a : a + p; } template <class T> static T &opmod(T &a) { return a = mod(a); } template <class T> llp(T a) { v = mod(a); } template <class T> explicit operator T() const { return v; } int operator*() const { return v; } int *operator&() const { return (int *)&v; } friend istream &operator>>(istream &ipt, llp &x) { return ipt >> x.v, opmod(x.v), ipt; } friend ostream &operator<<(ostream &opt, llp x) { return opt << x.v; } llp operator+(llp b) const { return v + b.v >= p ? llp(v + b.v - p, 0) : llp(v + b.v, 0); } friend llp operator+(ll a, llp b) { return b + a; } llp &operator+=(llp b) { return v += b.v, v = v >= p ? v - p : v, *this; } llp &operator++() { return *this += 1; } llp operator++(int) { return ++*this, *this - 1; } llp operator-() const { return v ? llp(p - v, 0) : llp(); } llp operator-(llp b) const { return *this + (-b); } friend llp operator-(ll a, llp b) { return -b + a; } llp &operator-=(llp b) { return *this += -b; } llp &operator--() { return *this -= 1; } llp operator--(int) { return --*this, *this + 1; } llp operator*(llp b) const { return ll(v) * b.v; } friend llp operator*(ll a, llp b) { return b * a; } llp &operator*=(llp b) { return *this = *this * b; } llp operator[](ll b) const { llp ans = 1, a = *this; while (b) { if (b & 1) ans *= a; a *= a, b >>= 1; } return ans; } llp operator^(ll b) const { return (*this)[b]; } llp &operator^=(ll b) { return *this = *this ^ b; } llp operator~() const { return *this ^ invp; } llp operator/(llp b) const { return *this * ~b; } friend llp operator/(ll a, llp b) { return (~b) * a; } llp &operator/=(llp b) { return *this = *this / b; } llp operator<<(int b) const { return *this * llp(2)[b]; } llp &operator<<=(int b) { return *this = *this << b; } llp operator>>(int b) const { return *this / llp(2)[b]; } llp &operator>>=(int b) { return *this = *this >> b; } bool operator==(ll b) const { return mod(b) == v; } bool operator==(llp b) const { return v == b.v; } bool operator!=(ll b) const { return !(*this == b); } bool operator!=(llp b) const { return !(*this == b); } bool operator<(llp b) const { return v < b.v; } bool operator<=(llp b) const { return v <= b.v; } bool operator>(llp b) const { return v > b.v; } bool operator>=(llp b) const { return v >= b.v; } friend llp operator<(ll a, llp b) { return b > a; } friend llp operator<=(ll a, llp b) { return b >= a; } friend llp operator>(ll a, llp b) { return b < a; } friend llp operator>=(ll a, llp b) { return b <= a; } int var() const { return v; } int mod() const { return p; } llp sqd() const { return *this * *this; } llp inv() const { return ~*this; } llp pow(ll b) const { return *this ^ b; }};","categories":[{"name":"学习笔记","slug":"学习笔记","permalink":"https://sheauhawjang.github.io/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"数论","slug":"数论","permalink":"https://sheauhawjang.github.io/tags/%E6%95%B0%E8%AE%BA/"},{"name":"原创","slug":"原创","permalink":"https://sheauhawjang.github.io/tags/%E5%8E%9F%E5%88%9B/"},{"name":"模板","slug":"模板","permalink":"https://sheauhawjang.github.io/tags/%E6%A8%A1%E6%9D%BF/"}]},{"title":"数学分析读书报告(2020年春)","slug":"Mathematical Analysis Reading Report 2020 Spring","date":"2020-04-29T11:17:15.000Z","updated":"2020-04-30T14:01:32.000Z","comments":true,"path":"2020/04/29/Mathematical Analysis Reading Report 2020 Spring/","link":"","permalink":"https://sheauhawjang.github.io/2020/04/29/Mathematical%20Analysis%20Reading%20Report%202020%20Spring/","excerpt":"\\[ \\newcommand{\\isum}[2]{\\sum\\limits_{ #2 = #1 }^{\\infty}} \\newcommand{\\iprod}[2]{\\prod\\limits_{ #2 = #1 }^{\\infty}} \\newcommand{\\lsum}[3]{\\sum\\limits_{ #2 = #1 }^{ #3 }} \\newcommand{\\lprod}[3]{\\prod\\limits_{ #2 = #1 }^{ #3 }} \\newcommand{\\llim}[2]{\\lim\\limits_{ #1 \\rightarrow #2 }} \\newcommand{\\brac}[1]{\\left( #1 \\right)} \\newcommand{\\lrac}[1]{\\left\\{ #1 \\right\\}} \\newcommand{\\flor}[1]{\\left\\lfloor #1 \\right\\rfloor} \\newcommand{\\ceil}[1]{\\left\\lceil #1 \\right\\rceil} \\newcommand{\\agle}[1]{\\left\\langle #1 \\right\\rangle} \\newcommand{\\abs}[1]{\\left| #1 \\right|} \\newcommand{\\abss}[1]{\\left\\| #1 \\right\\|} \\newcommand{\\id}[1]{\\text{( #1 ) }} \\newcommand{\\mathbs}[1]{\\boldsymbol{ #1 }} \\newcommand{\\mvec}[1]{\\overrightarrow{ #1 }} \\newcommand{\\mbar}[1]{\\overline{ #1 }} \\newcommand{\\bigf}{\\displaystyle} \\newcommand{\\dif}{\\mathrm{d}} \\newcommand{\\ddif}[1]{\\frac{\\dif}{\\dif #1 }} \\newcommand{\\cddif}[1]{\\cfrac{\\dif}{\\dif #1 }} \\newcommand{\\eset}{\\varnothing} \\newcommand{\\sh}{\\mathrm{sh\\ }} \\newcommand{\\ch}{\\mathrm{ch\\ }} \\newcommand{\\Imm}{\\mathrm{Im\\ }} \\newcommand{\\Ker}{\\mathrm{Ker\\ }} \\newcommand{\\rank}{\\mathrm{rank\\ }} \\newcommand{\\diag}{\\mathrm{diag\\ }} \\newcommand{\\sgn}{\\mathrm{sgn\\ }} \\newcommand{\\simeqq}{\\cong} \\newcommand{\\tdeg}{^\\circ} \\newcommand{\\roku}{\\partial} \\newcommand{\\bksl}{\\backslash} \\newcommand{\\mrm}{\\mathrm} \\newcommand{\\mbb}{\\mathbb} \\newcommand{\\mbf}{\\mathbf} \\newcommand{\\mscr}{\\mathscr} \\newcommand{\\mbs}[1]{\\boldsymbol{ #1 }} \\newcommand{\\kaz}[1]{\\begin{cases} #1 \\end{cases}} \\newcommand{\\pmat}[1]{\\begin{pmatrix} #1 \\end{pmatrix}} \\text{数学分析读书报告(2020年春)} \\] 在第一学期的数学分析课程中, 我们定义了一整套实数系统. 当时我们先用皮亚诺公理和集合论两种方式定义了自然数集, 然后再用自然数对的商集定义了整数集, 用整数对的集定义了有理数集, 最后又用戴德金分割定义了实数. 然而最近读到了卓里奇的《数学分析》, 在这本书里, 作者用了另一种方式定义了这一套系统: 先给出实数集的公理系统, 之后在逐步导出自然数集, 整数集和有理数集.","text":"\\[ \\newcommand{\\isum}[2]{\\sum\\limits_{ #2 = #1 }^{\\infty}} \\newcommand{\\iprod}[2]{\\prod\\limits_{ #2 = #1 }^{\\infty}} \\newcommand{\\lsum}[3]{\\sum\\limits_{ #2 = #1 }^{ #3 }} \\newcommand{\\lprod}[3]{\\prod\\limits_{ #2 = #1 }^{ #3 }} \\newcommand{\\llim}[2]{\\lim\\limits_{ #1 \\rightarrow #2 }} \\newcommand{\\brac}[1]{\\left( #1 \\right)} \\newcommand{\\lrac}[1]{\\left\\{ #1 \\right\\}} \\newcommand{\\flor}[1]{\\left\\lfloor #1 \\right\\rfloor} \\newcommand{\\ceil}[1]{\\left\\lceil #1 \\right\\rceil} \\newcommand{\\agle}[1]{\\left\\langle #1 \\right\\rangle} \\newcommand{\\abs}[1]{\\left| #1 \\right|} \\newcommand{\\abss}[1]{\\left\\| #1 \\right\\|} \\newcommand{\\id}[1]{\\text{( #1 ) }} \\newcommand{\\mathbs}[1]{\\boldsymbol{ #1 }} \\newcommand{\\mvec}[1]{\\overrightarrow{ #1 }} \\newcommand{\\mbar}[1]{\\overline{ #1 }} \\newcommand{\\bigf}{\\displaystyle} \\newcommand{\\dif}{\\mathrm{d}} \\newcommand{\\ddif}[1]{\\frac{\\dif}{\\dif #1 }} \\newcommand{\\cddif}[1]{\\cfrac{\\dif}{\\dif #1 }} \\newcommand{\\eset}{\\varnothing} \\newcommand{\\sh}{\\mathrm{sh\\ }} \\newcommand{\\ch}{\\mathrm{ch\\ }} \\newcommand{\\Imm}{\\mathrm{Im\\ }} \\newcommand{\\Ker}{\\mathrm{Ker\\ }} \\newcommand{\\rank}{\\mathrm{rank\\ }} \\newcommand{\\diag}{\\mathrm{diag\\ }} \\newcommand{\\sgn}{\\mathrm{sgn\\ }} \\newcommand{\\simeqq}{\\cong} \\newcommand{\\tdeg}{^\\circ} \\newcommand{\\roku}{\\partial} \\newcommand{\\bksl}{\\backslash} \\newcommand{\\mrm}{\\mathrm} \\newcommand{\\mbb}{\\mathbb} \\newcommand{\\mbf}{\\mathbf} \\newcommand{\\mscr}{\\mathscr} \\newcommand{\\mbs}[1]{\\boldsymbol{ #1 }} \\newcommand{\\kaz}[1]{\\begin{cases} #1 \\end{cases}} \\newcommand{\\pmat}[1]{\\begin{pmatrix} #1 \\end{pmatrix}} \\text{数学分析读书报告(2020年春)} \\] 在第一学期的数学分析课程中, 我们定义了一整套实数系统. 当时我们先用皮亚诺公理和集合论两种方式定义了自然数集, 然后再用自然数对的商集定义了整数集, 用整数对的集定义了有理数集, 最后又用戴德金分割定义了实数. 然而最近读到了卓里奇的《数学分析》, 在这本书里, 作者用了另一种方式定义了这一套系统: 先给出实数集的公理系统, 之后在逐步导出自然数集, 整数集和有理数集. 既然是从实数集开始, 那么作者是如何定义实数集的呢? 下面就是实数集的定义: 实数集 满足以下四组条件的集合 \\(\\mbb R\\) 叫做实数集, 其中的元素叫做实数, 这些条件构成了实数集的公理系统: 1. 加法公理 确定了一个映射(加法) \\[ +:\\mbb R\\times\\mbb R\\rightarrow\\mbb R \\] s.t. \\(\\mbb R\\) 中任意二元 \\(x,y\\) 之有序对 \\((x,y)\\) 都有某元素 \\(x+y\\in\\mbb R\\) 与之对应, 称 \\(x+y\\) 为 \\(x,y\\) 之和. 该映射亦满足以下条件: \\(1_+\\). 存在加法零元 \\(0\\) s.t. \\(\\forall x\\in\\mbb R\\) 都有 \\[ x+0=0+x=x \\] \\(2_+\\). \\(\\forall x\\in\\mbb R\\), 存在负元 \\(-x\\in\\mbb R\\) s.t. \\[ x+(-x)=(-x)+x=0 \\] \\(3_+\\). 运算 \\(+\\) 是结合的, 即 \\(\\forall x,y,z\\in\\mbb R\\) 满足 \\[ x+(y+z)=(x+y)+z \\] \\(4_+\\). 运算 \\(+\\) 是交换的, 即 \\(\\forall x,y\\in\\mbb R\\) 满足 \\[ x+y=y+x \\] 群 装备了满足上述 \\(1_+,2_+,3_+\\) 条件的运算的集合称为群. xxxxxxxxxx #include <bits/stdc++.h>using namespace std;#define rep(i, n) for (int i = 0; i < n; ++i)typedef long long ll;class llp{ int v; template llp(T a, int) { v = a; }public: static const int p = 998244353; static const int phi = p - 1; static const int invp = phi - 1; llp() { v = 0; } template static T mod(T a) { return a %= p, a >= 0 ? a : a + p; } template static T &opmod(T &a) { return a = mod(a); } template llp(T a) { v = mod(a); } template explicit operator T() const { return v; } int operator() const { return v; } int operator&() const { return (int )&v; } friend istream &operator>>(istream &ipt, llp &x) { return ipt >> x.v, opmod(x.v), ipt; } friend ostream &operator<<(ostream &opt, llp x) { return opt << x.v; } llp operator+(llp b) const { return v + b.v >= p ? llp(v + b.v - p, 0) : llp(v + b.v, 0); } friend llp operator+(ll a, llp b) { return b + a; } llp &operator+=(llp b) { return v += b.v, v = v >= p ? v - p : v, this; } llp &operator++() { return this += 1; } llp operator++(int) { return ++this, this - 1; } llp operator-() const { return v ? llp(p - v, 0) : llp(); } llp operator-(llp b) const { return this + (-b); } friend llp operator-(ll a, llp b) { return -b + a; } llp &operator-=(llp b) { return this += -b; } llp &operator--() { return this -= 1; } llp operator--(int) { return --this, this + 1; } llp operator(llp b) const { return ll(v) b.v; } friend llp operator(ll a, llp b) { return b a; } llp &operator=(llp b) { return this = this b; } llp operator const { llp ans = 1, a = this; while (b) { if (b & 1) ans = a; a = a, b >>= 1; } return ans; } llp operator^(ll b) const { return (this)[b]; } llp &operator^=(ll b) { return this = this ^ b; } llp operator~() const { return this ^ invp; } llp operator/(llp b) const { return this * ~b; } friend llp operator/(ll a, llp b) { return (~b) * a; } llp &operator/=(llp b) { return this = this / b; } llp operator<<(int b) const { return this llp(2)[b]; } llp &operator<<=(int b) { return this = this << b; } llp operator>>(int b) const { return this / llp(2)[b]; } llp &operator>>=(int b) { return this = this >> b; } bool operator==(ll b) const { return mod(b) == v; } bool operator==(llp b) const { return v == b.v; } bool operator!=(ll b) const { return !(this == b); } bool operator!=(llp b) const { return !(this == b); } bool operator<(llp b) const { return v < b.v; } bool operator<=(llp b) const { return v <= b.v; } bool operator>(llp b) const { return v > b.v; } bool operator>=(llp b) const { return v >= b.v; } friend llp operator<(ll a, llp b) { return b > a; } friend llp operator<=(ll a, llp b) { return b >= a; } friend llp operator>(ll a, llp b) { return b < a; } friend llp operator>=(ll a, llp b) { return b <= a; } int var() const { return v; } int mod() const { return p; } llp sqd() const { return this * this; } llp inv() const { return ~this; } llp pow(ll b) const { return *this ^ b; }};c++ 如果这个运算是交换的, 即满足条件 \\(4_+\\), 那么这个群称为交换群或 Abel 群. \\(\\mbb R\\) 关于加法运算是 Abel 群. 2. 乘法公理 确定了一个映射(乘法) \\[ \\bullet:\\mbb R\\times\\mbb R\\rightarrow\\mbb R \\] s.t. \\(\\mbb R\\) 中任意二元 \\(x,y\\) 之有序对 \\((x,y)\\) 都有某元素 \\(x\\cdot y\\in\\mbb R\\) 与之对应, 称 \\(x\\cdot y\\) 为 \\(x,y\\) 之积. 该映射亦满足以下条件: \\(1_\\bullet\\). 存在单位元 \\(1\\) s.t. \\(\\forall x\\in\\mbb R\\bksl0\\) 都有 \\[ x\\cdot1=1\\cdot x=x \\] \\(2_\\bullet\\). \\(\\forall x\\in\\mbb R\\bksl0\\), 存在逆元 \\(x^{-1}\\in\\mbb R\\bksl0\\) s.t. \\[ x\\cdot x^{-1}=x^{-1}\\cdot x=0 \\] \\(3_\\bullet\\). 运算 \\(\\bullet\\) 是结合的, 即 \\(\\forall x,y,z\\in\\mbb R\\) 满足 \\[ x\\cdot(y\\cdot z)=(x\\cdot y)\\cdot z \\] \\(4_\\bullet\\). 运算 \\(\\bullet\\) 是交换的, 即 \\(\\forall x,y\\in\\mbb R\\) 满足 \\[ x\\cdot y=y\\cdot x \\] \\(\\mbb R\\bksl0\\) 关于乘法运算是 Abel 群. 1-2. 加法与乘法 乘法对加法有分配性: \\(\\forall x,y,z\\in\\mbb R\\), \\[ (x+y)\\cdot z=x\\cdot z+y\\cdot z \\] 由于乘法是交换的, 左分配律亦成立. 域 若一个集合上定义了两种运算, 它们满足上述的所有公理, 就称这个集合为一个代数域, 简称域. 3. 序公理 \\(\\mbb R\\) 的元素间有不等关系 \\(\\le\\), 对 \\(\\mbb R\\) 的元素 \\(x,y\\), 或满足 \\(x\\le y\\), 或不满足 \\(x\\le y\\). 同时还满足以下条件: \\(0_\\le\\). \\(\\forall x\\in\\mbb R\\), \\(x\\le x\\). (反身性) \\(1_\\le\\). 若 \\(x\\le y\\) 且 \\(y\\le x\\), 则 \\(x=y\\). (反对称性) \\(2_\\le\\). 若 \\(x\\le y\\) 且 \\(y\\le z\\), 则 \\(x\\le z\\). (传递性) \\(3_\\le\\). \\(\\forall x,y\\in\\mbb R\\), \\(x\\le y\\) 或 \\(y\\le x\\). 序 如果某个集合的某些元素间有满足公理 \\(0_\\le,1_\\le,2_\\le\\) 的二元关系, 就称该集合为偏序集. 若偏序集满足 \\(3_\\le\\), 即任意两个元素间均有这种关系, 就称此集合为线性序集.(个人更喜欢全序集 [2]这个名字) \\(\\mbb R\\) 关于不等关系是全序集. 1-3. 加法与序 \\(\\forall x,y,z\\in\\mbb R\\), 若 \\(x\\le y\\), 则 \\(x+z\\le y+z\\). 2-3. 乘法与序 \\(\\forall x,y\\in\\mbb R\\),若 \\(0\\le x\\) 且 \\(0\\le y\\), 则 \\(0\\le x\\cdot y\\). 4. 完备公理 若 \\(X,Y\\) 是 \\(\\mbb R\\) 的非空子集, 且有性质: 若 \\(\\forall x\\in X,y\\in Y\\), 都有 \\(x\\le y\\); 那么 \\(\\exists c\\in\\mbb R\\), s.t. \\(\\forall x\\in X,y\\in Y\\) 都有 \\(x\\le c\\le y\\). 以上便是实数集的公理系统了. 有了这套公理系统, 就构造出了一个抽象系统. 但是, 类似皮亚诺公理存在的问题一样, 书中也提出了两个问题: 无矛盾性: 这套公理是否相容? 是否真的存在满足上述公理系统的集合? 范畴性: 这组公理确定的数学对象是否唯一? 任意两个不同的实现是否同构? 关于无矛盾性的问题, 书中用集合论公理系统出发建立自然数集, 然后是有理数集, 最后是是实数集的描述来证明的. 感觉起来像是我们之前学习的那一种方式. 范畴性的问题似乎是构造两个实数模型 \\(\\mbb R\\) 到 \\(\\mbb R'\\) 的同构映射, 但是我想不到比较合适的方法定义这个映射. 下面是实数的一些代数性质. 书中对部分定理进行了证明. 由于证明很简单, 这里不做赘述. 加法公理的推论 \\(1\\tdeg\\) 实数集中有唯一的零元. \\(2\\tdeg\\) 实数集中每个元素有唯一的负元. \\(3\\tdeg\\) 方程 \\(a+x=b\\) 在 \\(\\mbb R\\) 中有唯一解 \\(x=b+(-a)\\) (通常表示为 \\(b-a\\)). 乘法公理的推论 \\(1\\tdeg\\) 实数集中有唯一的单位元. \\(2\\tdeg\\) 实数集中每个 \\(x\\ne0\\), 有唯一的逆元 \\(x^{-1}\\). \\(3\\tdeg\\) 方程 \\(a\\cdot x=b\\), 当 \\(a\\in\\mbb R\\bksl0\\) 时, 有唯一解 \\(x=b\\cdot a^{-1}\\). 加法与乘法的推论 \\(1\\tdeg\\) \\(\\forall x\\in\\mbb R\\), \\(x\\cdot0=0\\cdot x=0\\). \\(2\\tdeg\\) 若 \\(x\\cdot y=0\\), 则 \\(x=0\\) 或 \\(y=0\\). \\(3\\tdeg\\) \\(\\forall x\\in\\mbb R\\), \\(-x=(-1)\\cdot x\\). \\(4\\tdeg\\) \\(\\forall x\\in\\mbb R\\), \\((-1)\\cdot(-x)=x\\). \\(3\\tdeg\\) \\(\\forall x\\in\\mbb R\\), \\((-x)\\cdot(-x)=x\\cdot x\\). 序公理的推论 定义 \\(x\\le y\\) 可以写作 \\(y\\ge x\\). \\(x\\ne y\\) 时, \\(x\\le y\\) 可以写成 \\(x<y\\) 或 \\(y>x\\), 此时称之为严格不等式. \\(1\\tdeg\\) \\(\\forall x,y\\in\\mbb R\\), \\[ x<y,x=y,x>y \\] 恰有一种关系成立. \\(2\\tdeg\\) \\(\\forall x,y,z\\in\\mbb R\\): 若 \\(x<y\\) 且 \\(y\\le z\\), 则 \\(x<z\\); 若 \\(x\\le y\\) 且 \\(y<z\\), 则 \\(x<z\\). 序与加法及减法 \\(1\\tdeg\\) \\(0<1\\). \\(2\\tdeg\\) 若 \\(0<x\\) 则 \\(0<x^{-1}\\). 若 \\(0<x\\), \\(x<y\\), 则 \\(0<y^{-1}\\), \\(y^{-1}<x^{-1}\\). 由完备定理, 我们可以得到关于上下界的一些比较好的性质. 首先有一些关于上下界的定义: 上界与下界 设 \\(X\\subseteq\\mbb R\\), 若 \\(\\exists c\\in\\mbb R\\), s.t. \\(\\forall x\\in X\\) 都有 \\(x\\le c\\), 就称 \\(X\\) 是上有界集, \\(c\\) 是 \\(X\\) 的的一个上界. 将上述定义中的 \\(\\le\\) 改为 \\(\\ge\\), 就得到了下有界集和下界的定义. 既有上界又有下界的集合叫做有界集. 极大元与极小元 设 \\(X\\subseteq\\mbb R,a\\in X\\), 若 \\(\\forall x\\in X\\), 都有 \\(x\\le a\\), 那么称 \\(a\\) 为 \\(x\\) 的最大元或极大元, 记做 \\(\\max X\\). 将上述定义中的 \\(\\le\\) 改为 \\(\\ge\\), 就得到了极小元的定义, 记做 \\(\\min X\\). 一个集合不一定存在极大元或极小元. 极大元或极小元若存在, 则只能有一个. 上确界与下确界 设 \\(X\\subseteq\\mbb R\\): \\(X\\) 的上界中的最小者称为 \\(X\\) 的上确界, 记做 \\(\\sup X\\). \\(X\\) 的下界中的最大者称为 \\(X\\) 的下确界, 记做 \\(\\inf X\\). 即 \\[ \\begin{aligned} \\sup X&:=\\min\\lrac{c\\in\\mbb R|\\forall x\\in X,x\\le c}\\\\ \\inf X&:=\\min\\lrac{c\\in\\mbb R|\\forall x\\in X,c\\le x}\\\\ \\end{aligned} \\] 通过这种定义得到的上确界和下确界的存在性是未知的. 但是我们由下面的定理可知上下确界是一定存在的. 上确界原理 实数集的任何非空有上界的子集有唯一的上确界. 证明: 设 \\(X\\) 是给定的集合, \\(Y=\\lrac{y\\in\\mbb R|\\forall x\\in X,x\\le y}\\) 是上界构成的集合. 由定义可知, \\(\\forall x\\in X,y\\in Y\\), \\(x\\le y\\). 由题意知, \\(x\\ne\\eset,y\\ne\\eset\\). 由完备公理, \\(\\exists c\\in\\mbb R\\) s.t. \\(\\forall x\\in X,y\\in Y\\), \\(x\\le c\\le y\\). 于是 \\(c\\) 是 \\(x\\) 的上界, \\(c\\in Y\\). 于是 \\(c\\) 是 \\(Y\\) 的极小元, \\(c=\\min Y=\\sup X\\). 证毕. 类似的, 可以有下确界原理: 实数集的任何非空有下界的子集有唯一的下确界. 至此, 我们定义了实数集的公理系统, 似乎这篇报告到这里就可以结束了. 但是我们回顾一下之前我们定义实数集的过程: 自然数集, 整数集, 有理数集, 实数集. 但是现在按上述定义, 我们只定义了实数集! 前面的自然数集, 整数集和有理数集都还没有定义! 也就是说, 我们的工作还没有完成! 下面就开始定义其他的那些集合. 在定义自然数集之前, 先定义归纳集: 归纳集 设 \\(X\\subseteq\\mbb R\\), 若 \\(\\forall x0\\in X\\), 有 \\(x+1\\in X\\), 就称 \\(X\\) 为一个归纳集. 例如: \\(\\mbb R\\) 和 \\(\\mbb R_+\\) 都是归纳集. 命题 任意多个归纳集 \\(X_\\alpha\\) 之交集 \\(\\bigf X=\\bigcap_{\\alpha\\in A}X_\\alpha\\) 若非空, 则 \\(X\\) 也是归纳集. 证明: \\(\\forall x\\in X\\): \\(\\forall\\alpha\\in A\\), \\(x\\in X_\\alpha\\). 于是 \\(\\forall\\alpha\\in A\\), \\(x+1\\in X_\\alpha\\). 于是 \\(x+1\\in X\\). \\(X\\) 是归纳集. 证毕. 自然数集 包含数 \\(1\\) 的最小归纳集叫自然数集, 用 \\(\\mbb N\\) 表示, 其元素叫自然数. 容易发现, 自然数集就是由 \\(1\\), \\(1+1\\), \\((1+1)+1\\) 组成的集合. 数学归纳原理 若 \\(E\\subseteq\\mbb N\\), \\(1\\in E\\), 且 \\(\\forall x\\in E\\), \\(x+1\\in E\\). 则 \\(E=\\mbb N\\). 证明: 由归纳集定义, \\(E\\) 是归纳集. 又 \\(1\\in E\\), 由自然数集定义, \\(\\mbb N\\subseteq E\\). 又 \\(E\\subseteq\\mbb N\\), 于是 \\(E=\\mbb N\\). 证毕. 自然数集的部分性质 \\(1\\tdeg\\) 自然数的和与积是自然数. 证明: \\[ A:=\\lrac{n\\in\\mbb N|\\forall m\\in\\mbb N,m+n\\in\\mbb N}\\subseteq\\mbb N \\] 由自然数定义, \\(1\\in A\\). \\(\\forall n\\in A\\), \\(\\forall m\\in\\mbb N\\), \\(m+n\\in\\mbb N\\), \\(m+(n+1)=(m+n)+1\\in\\mbb N\\). 于是 \\(n+1\\in A\\). 于是由数学归纳原理 \\(A=\\mbb N\\). 于是自然数的和是自然数. \\[ B:=\\lrac{n\\in\\mbb N|\\forall m\\in\\mbb N,m\\cdot n\\in\\mbb N}\\subseteq\\mbb N \\] 由 \\(1\\) 的定义, \\(1\\in B\\). \\(\\forall n\\in B\\), \\(\\forall m\\in\\mbb N\\), \\(m\\cdot n\\in\\mbb N\\), \\(m\\cdot(n+1)=m\\cdot n+m\\in\\mbb N\\). 于是 \\(n+1\\in B\\). 于是由数学归纳原理 \\(B=\\mbb N\\). 于是自然数的积是自然数. 证毕. 用类似的方法可以证明 \\(2\\tdeg-5\\tdeg\\): \\(2\\tdeg\\) 若 \\(n\\in\\mbb N\\), \\(n\\ne1\\), 则 \\(n-1\\in\\mbb N\\). \\(3\\tdeg\\) \\(\\forall n\\in\\mbb N\\), \\(\\lrac{x\\in\\mbb N|n<x}\\) 有极小元 \\(n+1\\). \\(4\\tdeg\\) \\(\\forall m,n\\in\\mbb N\\), 若 \\(n<m\\), 则 \\(n+1\\le m\\). \\(5\\tdeg\\) 若 \\(n\\in\\mbb N\\), 则没有 \\(x\\in\\mbb N\\) 能满足 \\(n<x<n+1\\). \\(6\\tdeg\\) 自然数集的任何非空子集都有最小元. 证明: 设 \\(M\\subseteq\\mbb N\\), \\(M\\ne\\eset\\). 若 \\(1\\in M\\), 则 \\(\\min M=1\\). 否则, 设 \\(E=\\mbb N\\bksl M\\), \\(1\\in E\\). 在 \\(E\\) 中必能找到自然数 \\(n\\in E\\) s.t. 不超过 \\(n\\) 的自然数都在 \\(E\\) 中而 \\(n+1\\in M\\). 否则 \\(1\\in E\\subseteq\\mbb N\\), 当 \\(n\\in E\\) 时, \\(n+1\\in E\\), 于是 \\(E=\\mbb N\\), \\(M=\\eset\\), 矛盾. \\(n+1\\in M\\) 即 \\(M\\) 的最小元, 因为 \\(n\\) 与 \\(n+1\\) 之间没有自然数. 其实我不是很能理解这个证明, 有点循环论证的感觉. 整数 自然数集, 自然数的相反数的集合, 以及 \\(\\lrac0\\) 的并集叫做整数集, 记做 \\(\\mbb Z\\). 整数对加法和乘法运算封闭. \\(\\mbb Z\\) 关于加法运算构成 Abel 群. 有了整数的定义, 就能得到初等数论中的关于整数的一些性质, 这里不做赘述. 对比之前我们由自然数得到整数的过程, 我们使用的是 \\(\\mbb N\\times\\mbb N\\) 的商集得到的 \\(\\mbb Z\\) 的. 但是现在我们先定义了 \\(\\mbb R\\), 于是就有了相反数, 在定义 \\(\\mbb Z\\) 时就简洁了许多. 有理数 形如 \\(m\\cdot n^{-1}\\) 的数叫有理数, 其中 \\(m,n\\in\\mbb Z\\). 有理数构成的集合叫有理数集, 用 \\(\\mbb Q\\) 表示. 有理数 \\(q=m\\cdot n^{-1}\\) 也可以写成有理分数 \\(\\bigf\\frac{m}n\\) 的形式. “小学生都知道”, \\(\\forall k\\in\\mbb Z\\), 若 \\(k\\ne0\\), 则 \\(\\bigf\\frac{m}{n}=\\frac{mk}{nk}\\). 下面简单地证明这件事: 由结合性, \\((nk)(k^{-1}n^{-1})=1\\), \\(k^{-1}n^{-1}=(nk)^{-1}\\). 于是 \\((mk)(nk)^{-1}=mk(k^{-1}n^{-1})=m\\cdot n^{-1}\\). 于是 \\(\\forall m\\cdot n^{-1}\\), \\(k:=\\gcd(m,n)\\), 于是 \\(m=m'k,n=n'k\\), 其中 \\(m',n'\\in\\mbb Z\\), \\(\\gcd(m,n)=1\\). 由小学生都知道的结论, \\(m\\cdot n^{-1}=m'\\cdot n'^{-1}\\). 于是每个有理数经过约分后, 都能用互素的整数有序对给出. 无理数 不是有理数的实数叫无理数. 下面构造一个无理数 \\(\\sqrt2\\) 以证明无理数是存在的. 构造集合 \\(X=\\lrac{x|x^2<2}\\), \\(Y=\\lrac{y|2<y^2}\\). 显然, \\(1\\in X,2\\in Y\\), 且 \\(\\forall x\\in X,y\\in Y\\), \\(x\\le y\\). 于是由完备公理, \\(\\exists t\\in\\mbb R\\) s.t. \\(\\forall x\\in X,y\\in Y\\), \\(x\\le t\\le y\\). 记 \\(p=2-t^2\\), \\(a=t+\\cfrac{p}{3t}\\). 由于 \\(1\\in x,2\\in y\\), 于是 \\(1\\le t\\le2\\), 于是 \\(-2\\le p\\le1\\). \\(1\\le t\\le t^2\\), \\(p^2\\le p\\). 若 \\(t^2<2\\), 则 \\(p>0\\), \\(a>t\\). \\[ a^2=t^2+\\frac23p+\\frac{p^2}{9t^2}\\le t^2+\\frac23p+\\frac19p<t^2+p=2 \\] 于是 \\(a^2\\in X\\), \\(a^2>t^2\\), 矛盾. 若 \\(t^2>2\\), 则 \\(p<0\\), \\(a<t\\). \\[ a^2=t^2+\\frac23p+\\frac{p^2}{9t^2}\\ge t^2+\\frac23p>t^2+p=2 \\] 于是 \\(a^2\\in Y\\), \\(a^2<t^2\\), 矛盾. 于是 \\(t^2=2\\), 也就是所谓的 \\(\\sqrt2:=t\\) 是存在的.下面证明 \\(\\sqrt2\\) 是无理数. 若 \\(\\sqrt2\\) 是有理数, 设 \\(\\sqrt2=\\cfrac{m}n\\), \\(m,n\\in\\mbb Z\\), \\(\\gcd(m,n)=1\\). 于是 \\(m^2=2n^2\\). 由 \\(2\\mid m^2\\), \\(2\\mid m\\). 于是设 \\(m=2k\\), \\((2k)^2=2n^2\\), \\(2k^2=n^2\\), \\(2\\mid n\\), 于是 \\(\\gcd(m,n)\\ge2\\), 矛盾. 于是 \\(\\sqrt2\\) 是无理数. 代数数与超越数 一个实数若是某个整系数多项式代数方程的根, 那么这个实数叫做代数数, 否则叫做超越数. \\(\\sqrt2\\) 是方程 \\(x^2=2\\) 的根, 是代数数. \\(e\\)[3] 和 \\(\\pi\\)[4] 都是超越数, 结论是广为人知的, 但是证明很复杂, 在参考资料中有证明. 总之, 代数数和超越数都是存在的. 完备公理的应用 前面的结论的证明中, 只有证明上下确界原理和 \\(\\sqrt2\\) 的存在性中使用到了完备公理. 关于完备公理有下述结论: \\(1\\tdeg\\) 自然数集的任何非空有界子集有极大元. 证明: 设 \\(E\\subseteq\\mbb N\\) 是一不空有界集, 记 \\(s:=\\sup E\\in\\mbb R\\). 由于 \\(s\\) 是上确界, 于是 \\(s-1\\) 不是 \\(E\\) 的上界, 于是一定 \\(\\exists n\\in E\\), s.t. \\(s-1<n\\). 于是 \\(s<n+1\\). \\(\\forall x\\in E\\), \\(x\\le s<n+1\\). 就是 \\(\\forall x\\in E\\), \\(x\\le n\\). 于是 \\(n=\\max E\\). 用类似的方法可以证明 \\(2\\tdeg-5\\tdeg\\): \\(2\\tdeg\\) 自然数集的任何非空有界子集有极小元. \\(3\\tdeg\\) 自然数集没有上界. \\(4\\tdeg\\) 整数集的任何上有界非空子集有极大元和极小元. \\(5\\tdeg\\) 整数集没有上下界. \\(6^\\circ\\) 阿基米德原理 若 \\(h>0\\), 则 \\(\\forall x\\in\\mbb R\\), 有唯一地整数 \\(k\\) s.t. \\((k-1)h\\le x<kh\\). 证明: \\(\\mbb Z\\) 无上界, 于是 \\(\\lrac{n\\in\\mbb Z\\bigg|\\cfrac{x}h<n}\\) 是 \\(\\mbb Z\\) 的非空下有界子集, 于是有极小元 \\(k\\). 于是 \\(k-1\\le\\cfrac{x}h<k\\). 于是 \\((k-1)h\\le x<kh\\). 阿基米德原理有以下推论: \\(7\\tdeg\\) \\(\\forall\\varepsilon>0\\), \\(\\exists n\\in\\mbb N\\), s.t. \\(0<\\cfrac1n<\\varepsilon\\). \\(8\\tdeg\\) 若 \\(x\\in\\mbb R\\), \\(x\\ge0\\), 且 \\(\\forall n\\in\\mbb N\\) 都有 \\(x<\\cfrac1n\\), 则 \\(x=0\\). \\(9\\tdeg\\) \\(\\forall a,b\\in\\mbb R\\), 若 \\(a<b\\) 则 \\(\\exists q\\in\\mbb Q\\) s.t. \\(a<q<b\\). 证明: \\(\\exists n\\in\\mbb N\\), s.t. \\(0<\\cfrac1n<b-a\\). 又 \\(\\exists m\\in\\mbb N\\), s.t. \\(\\cfrac{m-1}n\\le a<\\cfrac{m}n\\). 于是 \\(\\cfrac{m}n\\le a+\\cfrac1n<b\\). 于是 \\(a<\\cfrac{m}n<b\\). 至此, 我们就构建了一个完整的实数域系统, 并给出了一些结论. 这样就可以得到我们在数学分析课程中得到的一些结论. 参考资料 [1] B.A.卓里奇 数学分析(第一卷)(第4版)[M]. 北京: 高等教育出版社, 2006. [2] 全序关系, 维基百科, https://zh.wikipedia.org/zh-hans/全序关系 [3] 如何证明 \\(e\\) 是超越数, 知乎, https://zhuanlan.zhihu.com/p/47709039 [4] 如何证明 \\(\\pi\\) 是超越数, 知乎, https://zhuanlan.zhihu.com/p/56607777 [5] 数学分析笔记(二)——实数理论, 知乎, https://zhuanlan.zhihu.com/p/38393931","categories":[{"name":"学习笔记","slug":"学习笔记","permalink":"https://sheauhawjang.github.io/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"数学分析","slug":"数学分析","permalink":"https://sheauhawjang.github.io/tags/%E6%95%B0%E5%AD%A6%E5%88%86%E6%9E%90/"},{"name":"原创","slug":"原创","permalink":"https://sheauhawjang.github.io/tags/%E5%8E%9F%E5%88%9B/"},{"name":"读书报告","slug":"读书报告","permalink":"https://sheauhawjang.github.io/tags/%E8%AF%BB%E4%B9%A6%E6%8A%A5%E5%91%8A/"}]},{"title":"2020 校赛模拟赛 F 题解","slug":"2020 School Contest Simulation F","date":"2020-04-25T10:28:07.000Z","updated":"2020-08-17T00:50:33.000Z","comments":true,"path":"2020/04/25/2020 School Contest Simulation F/","link":"","permalink":"https://sheauhawjang.github.io/2020/04/25/2020%20School%20Contest%20Simulation%20F/","excerpt":"题目来源: XJTUOJ-1143 ddd和万马奔腾 题目链接: https://oj.xjtuicpc.com/problem/1143 题面 数论描述 给定 \\(n\\) 个正整数 \\(m_1,m_2,\\cdots,m_n\\), 判断每个 \\(m\\) 是不是模 \\(p\\) 意义下的 \\(k\\) 次剩余。多个 \\(m\\) 符合条件按从小到大顺序输出. 通俗描述 给定 \\(n\\) 个正整数 \\(m_1,m_2,\\cdots,m_n\\), 判断每个 \\(m\\) 是否满足: \\(\\gcd(m,p)=1\\). 存在一个整数 \\(a\\), 使得 \\(a^k\\equiv m\\pmod p\\). 如果一个数 \\(m\\) 满足上述两个条件, 则称 \\(m\\) 是模 \\(p\\) 意义下的 \\(k\\) 次剩余。多个 \\(m\\) 符合条件按从小到大顺序输出. \\(x\\equiv y\\pmod p\\) 的定义是 \\(p\\mid(x-y)\\), 等价描述是存在整数 \\(b\\) 使得 \\(x-bp=y\\). 数据范围 \\[ 1<k\\le10^5 \\] \\[ 1<p\\le10^5 \\] \\[ 1\\le n,m<p \\]","text":"题目来源: XJTUOJ-1143 ddd和万马奔腾 题目链接: https://oj.xjtuicpc.com/problem/1143 题面 数论描述 给定 \\(n\\) 个正整数 \\(m_1,m_2,\\cdots,m_n\\), 判断每个 \\(m\\) 是不是模 \\(p\\) 意义下的 \\(k\\) 次剩余。多个 \\(m\\) 符合条件按从小到大顺序输出. 通俗描述 给定 \\(n\\) 个正整数 \\(m_1,m_2,\\cdots,m_n\\), 判断每个 \\(m\\) 是否满足: \\(\\gcd(m,p)=1\\). 存在一个整数 \\(a\\), 使得 \\(a^k\\equiv m\\pmod p\\). 如果一个数 \\(m\\) 满足上述两个条件, 则称 \\(m\\) 是模 \\(p\\) 意义下的 \\(k\\) 次剩余。多个 \\(m\\) 符合条件按从小到大顺序输出. \\(x\\equiv y\\pmod p\\) 的定义是 \\(p\\mid(x-y)\\), 等价描述是存在整数 \\(b\\) 使得 \\(x-bp=y\\). 数据范围 \\[ 1<k\\le10^5 \\] \\[ 1<p\\le10^5 \\] \\[ 1\\le n,m<p \\] 题解 显然 \\(i^k\\equiv(i\\%p)^k\\pmod p\\). 所有可能是 \\(k\\) 次剩余的数至多有 \\(p-1\\) 个, 他们在 \\(1^k,2^k,\\cdots,(p-1)^k\\pmod p\\) 当中. 将这些数字枚举出来并放入一个 std::set 或 bool 数组进行存储. 对于给定的一个 \\(m\\), 先判断 \\(\\gcd(m,p)\\) 是否为 \\(1\\). 如果是, 再判断上述 \\(p-1\\) 个数字中有没有 \\(m\\). 如果两个条件都符合, 那么 \\(m\\) 就是模 \\(p\\) 意义下的 \\(k\\) 次剩余, 否则就不是. 使用快速幂算法可以在 \\(O(\\log k)\\) 的时间里算出一个 \\(i^k\\), 算出所有可能的 \\(p-1\\) 个数的时间复杂度是 \\(O(p\\log k)\\). 求 \\(\\gcd\\) 使用辗转相除法可以在 \\(O(\\log p)\\) 的时间内求得 \\(\\gcd (m,p)\\). 使用 std::set 进行查询一次的时间复杂度是 \\(O(\\log p)\\), 使用 bool 数组进行查询一次的时间复杂度是 \\(O(1)\\). 于是总时间复杂度就是 \\(O(p\\log k+n\\log p)\\). 代码实现 1234567891011121314151617181920212223242526272829303132333435363738394041424344#include <bits/stdc++.h>using namespace std;typedef long long ll;inline int gcd(int a, int b){ return b ? gcd(b, a % b) : a;}inline int kpow(ll a, int k, int p){ ll ans = 1; while (k) { if (k & 1) ans *= a, ans %= p; a *= a, a %= p; k >>= 1; } return ans;}int main(){ int k, p, n; vector<int> que; set<int> pop, ans; cin >> k >> p >> n; for (int i = 0; i < n; ++i) { int a; cin >> a; que.push_back(a); } for (int i = 1; i < p; ++i) pop.insert(kpow(i, k, p)); for (int i = 0; i < n; ++i) if (gcd(que[i], p) == 1 && pop.count(que[i])) ans.insert(que[i]); cout << ans.size() << endl; for (int a : ans) cout << a << \" \"; return 0;}","categories":[{"name":"XCPC题解","slug":"XCPC题解","permalink":"https://sheauhawjang.github.io/categories/XCPC%E9%A2%98%E8%A7%A3/"}],"tags":[{"name":"数论","slug":"数论","permalink":"https://sheauhawjang.github.io/tags/%E6%95%B0%E8%AE%BA/"},{"name":"校赛","slug":"校赛","permalink":"https://sheauhawjang.github.io/tags/%E6%A0%A1%E8%B5%9B/"}]},{"title":"2020 CCPC WannaFly 冬令营 Day5H 题解","slug":"2020 Wannafly Winter 5H","date":"2020-01-18T18:58:24.000Z","updated":"2023-05-27T12:37:09.000Z","comments":true,"path":"2020/01/19/2020 Wannafly Winter 5H/","link":"","permalink":"https://sheauhawjang.github.io/2020/01/19/2020%20Wannafly%20Winter%205H/","excerpt":"题目来源: 2020 CCPC Wannafly 冬令营 Day5: H. Geometry PTSD 题面 在以 \\(O\\) 为球心的单位球面上寻找三个点 \\(A, B, C\\), s.t.: \\[ \\min(|AB|,|BC|,|CA|)\\geq1.7 \\] \\[ 0<d(O,ABC)\\leq10^{-18} \\] 输出格式 每行输出三个整数 \\(x,y,z\\in[-10^{6},10^6]\\cap\\mathbb Z\\), 表示选取了点 \\[ \\left(\\frac{x}{\\sqrt{x^2+y^2+z^2}},\\frac{y}{\\sqrt{x^2+y^2+z^2}},\\frac{z}{\\sqrt{x^2+y^2+z^2}}\\right) \\]","text":"题目来源: 2020 CCPC Wannafly 冬令营 Day5: H. Geometry PTSD 题面 在以 \\(O\\) 为球心的单位球面上寻找三个点 \\(A, B, C\\), s.t.: \\[ \\min(|AB|,|BC|,|CA|)\\geq1.7 \\] \\[ 0<d(O,ABC)\\leq10^{-18} \\] 输出格式 每行输出三个整数 \\(x,y,z\\in[-10^{6},10^6]\\cap\\mathbb Z\\), 表示选取了点 \\[ \\left(\\frac{x}{\\sqrt{x^2+y^2+z^2}},\\frac{y}{\\sqrt{x^2+y^2+z^2}},\\frac{z}{\\sqrt{x^2+y^2+z^2}}\\right) \\] 题解 设原点为 \\(O\\). \\(A,B,C\\) 每个点选取的三个整数分别为 \\(\\boldsymbol A(A_x, A_y, A_z), \\boldsymbol B(B_x, B_y, B_z), \\boldsymbol C(C_x, C_y, C_z)\\), 记: \\[ \\left|\\boldsymbol P\\right|:=\\sqrt{P_x^2+P_y^2+P_z^2},\\quad\\forall \\boldsymbol P\\in\\{\\boldsymbol A,\\boldsymbol B,\\boldsymbol C\\} \\] \\[ D_0:=\\overrightarrow{OA}\\times\\overrightarrow{OB}\\cdot\\overrightarrow{OC}=\\left| \\begin{array}{ccc} \\frac{A_x}{|\\boldsymbol A|} & \\frac{A_y}{|\\boldsymbol A|} & \\frac{A_z}{|\\boldsymbol A|}\\\\ \\frac{B_x}{|\\boldsymbol B|} & \\frac{B_y}{|\\boldsymbol B|} & \\frac{B_z}{|\\boldsymbol B|}\\\\ \\frac{C_x}{|\\boldsymbol C|} & \\frac{C_y}{|\\boldsymbol C|} & \\frac{C_z}{|\\boldsymbol C|}\\\\\\end{array} \\right| \\] \\[ D:= {D_0}{|\\boldsymbol A||\\boldsymbol B||\\boldsymbol C|} = \\left| \\begin{array} {ccc} A_x & A_y & A_z \\\\ B_x & B_y & B_z \\\\ C_x & C_y & C_z \\end{array} \\right| \\] 由三棱锥体积公式,可得: \\[ \\begin{align} V:=V_{OABC} &=\\frac{1}{3}Sh\\\\ &=\\frac{1}{6}|D_0|=\\frac{|D|}{6|\\boldsymbol A||\\boldsymbol B||\\boldsymbol C|} \\end{align} \\] \\[ h=\\frac{|D|}{2S|\\boldsymbol A||\\boldsymbol B||\\boldsymbol C|} \\] 注意到 \\(\\sqrt3\\approx1.7\\), 故尽量选取等边三角形以达到最优。 同时注意到: \\[ D= \\left| \\begin{array} {ccc} 1 & 1 & 0 \\\\ 0 & -1 & 1 \\\\ -1 & 0 & -1 \\end{array} \\right| \\] 满足:\\(D=0\\), \\(|AB|=|BC|=|CA|=\\sqrt3\\). 同理, \\[ D= \\left| \\begin{array} {ccc} 10^6 & 10^6 & 0 \\\\ 0 & -10^6 & 10^6 \\\\ -10^6 & 0 & -10^6 \\end{array} \\right| \\] 有同样的性质,此时: \\[ |\\boldsymbol A|=|\\boldsymbol B|=|\\boldsymbol C|=\\sqrt2\\cdot10^6 \\] \\[ h=\\frac{|D|}{2S|\\boldsymbol A||\\boldsymbol B||\\boldsymbol C|}=\\frac{|D|}{3\\sqrt6\\cdot10^{18}} \\] 微调 \\(\\boldsymbol A,\\boldsymbol B,\\boldsymbol C\\) , s.t. \\(|D|\\leq7\\) 即可。 打表发现:满足条件的一个 \\(D\\) 是: \\[ D=\\left|\\begin{array}{ccc}999999 & 10^6 & 0 \\\\0 & -999999 & 999997 \\\\-999997 & 0 & -999996\\end{array}\\right|=-4 \\] \\[ h=\\frac{|D|}{2S|\\boldsymbol A||\\boldsymbol B||\\boldsymbol C|}\\approx\\frac{4}{3\\sqrt6\\cdot10^{18}}<10^{-18} \\]","categories":[{"name":"XCPC题解","slug":"XCPC题解","permalink":"https://sheauhawjang.github.io/categories/XCPC%E9%A2%98%E8%A7%A3/"}],"tags":[{"name":"2020 CCPC WannaFly 冬令营","slug":"2020-CCPC-WannaFly-冬令营","permalink":"https://sheauhawjang.github.io/tags/2020-CCPC-WannaFly-%E5%86%AC%E4%BB%A4%E8%90%A5/"},{"name":"计算几何","slug":"计算几何","permalink":"https://sheauhawjang.github.io/tags/%E8%AE%A1%E7%AE%97%E5%87%A0%E4%BD%95/"},{"name":"打表","slug":"打表","permalink":"https://sheauhawjang.github.io/tags/%E6%89%93%E8%A1%A8/"}]},{"title":"2020 CCPC WannaFly 冬令营 Day2H 题解","slug":"2020 Wannafly Winter 2H","date":"2020-01-18T14:01:51.000Z","updated":"2020-01-18T14:01:51.000Z","comments":true,"path":"2020/01/18/2020 Wannafly Winter 2H/","link":"","permalink":"https://sheauhawjang.github.io/2020/01/18/2020%20Wannafly%20Winter%202H/","excerpt":"题目来源: 2020 CCPC Wannafly 冬令营 Day2: H. 叁佰爱抠的序列 题面 现有一个整数 \\(m\\), 构造了一个长度为 \\(n\\) 的序列 \\(A\\), 满足: 1. \\(\\forall a \\in A,\\, a\\in[1,m]\\cap\\mathbb Z\\) 2. \\(\\forall x,y\\in[1,m]\\cap\\mathbb Z,\\,x\\ne y\\), \\(\\exists p\\in[1,n)\\cap\\mathbb Z\\), s.t. \\(\\{A[p],A[p+1]\\}=\\{x,y\\}\\) 其中 \\(A[p]\\) 表示 \\(A\\) 中的第 \\(p\\) 个元素的值. 给定一个 \\(n\\), 求 \\(m\\) 可能的最大值. 若 \\(n\\leq N=2\\cdot10^6\\), 则再输出 \\(m\\) 取得最大值时可能的一个序列 \\(A\\). 数据范围 \\[ 1\\leq n\\leq10^{18} \\]","text":"题目来源: 2020 CCPC Wannafly 冬令营 Day2: H. 叁佰爱抠的序列 题面 现有一个整数 \\(m\\), 构造了一个长度为 \\(n\\) 的序列 \\(A\\), 满足: 1. \\(\\forall a \\in A,\\, a\\in[1,m]\\cap\\mathbb Z\\) 2. \\(\\forall x,y\\in[1,m]\\cap\\mathbb Z,\\,x\\ne y\\), \\(\\exists p\\in[1,n)\\cap\\mathbb Z\\), s.t. \\(\\{A[p],A[p+1]\\}=\\{x,y\\}\\) 其中 \\(A[p]\\) 表示 \\(A\\) 中的第 \\(p\\) 个元素的值. 给定一个 \\(n\\), 求 \\(m\\) 可能的最大值. 若 \\(n\\leq N=2\\cdot10^6\\), 则再输出 \\(m\\) 取得最大值时可能的一个序列 \\(A\\). 数据范围 \\[ 1\\leq n\\leq10^{18} \\] 题解 构造一个 \\(m\\) 个顶点的无向图 \\(\\boldsymbol G\\), \\(\\forall p\\in [1,n)\\), 在 \\(A[p]\\) 和 \\(A[p+1]\\) 之间连一条边, 记作第一类边. 则 \\(A\\) 的条件 \\((2)\\) 就转化成了 \\(\\boldsymbol G\\) 中任意两个不同点都要有边直接连接, 最多有 \\(n-1\\) 条边. 这样, 我们就得到了 \\(n\\) 的一个下界: \\[ n\\geq\\frac{1}{2}m(m-1)+1 \\tag{3} \\] 等号成立当且仅当任意两个不同点之间直接连接的边有且仅有 \\(1\\) 条. 另一方面, 观察这些连接的边: \\[ A[1]\\rightarrow A[2]\\rightarrow A[3]\\rightarrow...\\rightarrow A[n] \\] 考虑从 \\(A[1]\\) 号点出发, 按照上述顺序遍历整个图, 发现每条边经过且只经过了一次, 这对应了一个欧拉回路, 于是 \\(\\boldsymbol G\\) 中至多两个点的度数为奇数. 反过来, 如果 \\(\\boldsymbol G\\) 中至多两个点的度数为奇数, 那么可以构造出这样一个欧拉回路以及对应的序列. 考虑以上两个要素: 任意两个不同点之间直接连接的边有且仅有一条时, 每个点的度数是 \\(m-1\\). 如果 \\(m\\) 是奇数, 那么每个点的度数全部都是偶数, 故可以构造出一个序列 \\(A\\). \\((3)\\) 式等号可以成立. 如果 \\(m\\) 是偶数, 那么每个点的度数全部都是奇数, \\(m>2\\) 时不能构造出一个欧拉回路. 这时, 我们可以任取 \\(m-2\\) 个度数为奇数的点, 配对连边, 记作第二类边. 于是这 \\(m-2\\) 个点度数均加 \\(1\\), 变为了偶数. 这样 \\(G\\) 中只有 \\(2\\) 个点度数为奇数, 可以构造欧拉回路. 此时有: \\[ n\\geq\\frac{1}{2}m(m-1)+1+\\frac{1}{2}(m-2)=\\frac{1}{2}m^2 \\] 综上所述, 定义: \\[ f(m):=\\left\\{ \\begin{align} \\frac{1}{2}m(&m-1)+1 & m\\equiv 0\\pmod 2\\\\ \\frac{1}{2}&m^2 & m\\equiv 1\\pmod 2 \\end{align}\\right. \\] 条件便可以总结为: \\[ n\\geq f(m) \\tag4 \\] 我们可以从 \\(1\\) 到 \\(n\\) 枚举所有可能的 \\(m\\), 取其中满足 \\(n\\geq f(m)\\) 的最大值. 复杂度为 \\(O(n)\\), 不能接受. 注意到: \\(\\forall m\\equiv 0\\pmod 2\\), \\(\\displaystyle \\frac{1}{2}(m-1)(m-2)+1<\\frac{1}{2}m^2<\\frac{1}{2}m(m+1)+1\\). 即: \\(\\forall m\\in\\mathbb N_+\\), \\(f(m)<f(m+1)\\). \\(f\\) 严格单调增, 故可以使用二分查找, 复杂度为 \\(O(\\log n)\\), 可以接受. 也可以分别解不等式: \\[ \\begin{align} \\frac{1}{2}x(x-1)+1&\\le n \\tag5\\\\ \\frac{1}{2}x^2&\\le n \\tag6 \\end{align} \\] 取不等式 \\((4)\\) 解中最大的奇数和不等式 \\((5)\\) 解中最大的偶数的较大者, 复杂度为 \\(O(1)\\). 很好. 现在思考一种 \\(\\forall m\\in\\mathbb N_+\\) 都能构造欧拉回路以及对应的序列 \\(A\\) 的方法. 先考虑 \\(n=f(m)\\) 的情况, 这种情况构造的序列记作 \\(A_m\\), 此时 \\(A=A_m\\). 对于 \\(m\\) 是奇数的情况, 考虑数学归纳法: 一、\\(m=1\\) 时, 由于没有边, 欧拉环路显然存在, \\(A_1=[1]\\). 二、设我们构造出了 \\(m=k\\) 时的图的欧拉环路以及对应的序列 \\(A_k\\). 显然, 欧拉环路可以从任意一个点出发, 遍历一遍图后回到起点. \\(A[1]\\) 可以是任意一个数, \\(A[n]=A[1]\\). 不妨令 \\(A[1]=A[n]=1\\). 现在我们加入两个点 \\(k+1,k+2\\). 考虑序列 \\(B=[2,3,...,k]\\), 在 \\(B\\) 中所有的奇数前面插入 \\(k+1\\), 后面插入 \\(k+2\\), 则 \\(B=[2,k+1,3,k+2,...,k+1,k,k+2]\\). 令 \\(A_{k+2}=[A_k,k+1,k+2,B,1]\\). 这样, \\(m=k+2\\) 时的序列以及对应的欧拉回路就构造好了. 对于 \\(m\\) 时偶数的情况, 考虑数学归纳法: 一、\\(m=2\\) 时, 由于只有一条边, 欧拉环路显然存在, \\(A_2=[1,2]\\). 二、设我们构造出了 \\(m=k\\) 时的图的欧拉环路以及对应的序列 \\(A_k\\). 显然, 欧拉环路应该从一个度数为奇数的点出发, 遍历一遍图后回到另一个度数为奇数的点. \\(A[1],A[n]\\) 可以是任意两个不同的数, 不妨令 \\(A[1]=1,A[n]=k\\). 现在我们加入两个点 \\(k+1,k+2\\). 将 \\(k,k+1\\) 配对连接第二类边. 考虑序列 \\(B=[2,3,...,k]\\), 在 \\(B\\) 中所有的奇数前面插入 \\(k+1\\), 后面插入 \\(k+2\\), 则 \\(B=[2,k+1,3,k+2,...,k+1,k,k+2]\\). 令 \\(A_{k+2}=[A_k,k+1,k+2,B]\\). 这样, \\(m=k+2\\) 时的序列以及对应的欧拉回路就构造好了. 当然, 这个构造只是一种构造. 其他的任何满足题意的构造均可行. 现在考虑 \\(n>f(m)\\) 的情况. 很显然, 令 \\(A=[A_m,\\underbrace{1,1,...,1}_{n-f(m)}]\\) 即可. 构造复杂度为 \\(O(N)\\). 可以接受. 代码实现 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172#include <bits/stdc++.h>using namespace std;typedef long long ll;ll get(ll m){ if (m & 1) return (m * (m - 1) >> 1) + 1; return m * m >> 1;}bool check(ll m, ll n){ return get(m) <= n;}ll rget(ll n, ll l, ll r){ if (l + 1 == r) return l; ll mid = l + r >> 1; if (check(mid, n)) return rget(n, mid, r); return rget(n, l, mid);}void opt(ll m){ if (m & 1) { printf(\"1\"); int o = 1, n = 1; for (int i = 2; i < m; i += 2) { printf(\" %d\", i); n = i; do { o = o % (i - 1) + 1; n = n == i ? i + 1 : i; printf(\" %d %d\", n, o); } while (o != 1 || n != i + 1); } } else { printf(\"1 2\"); int o = 2, n = 1; for (int i = 3; i < m; i += 2) { printf(\" %d\", i); n = i; do { o = o % (i - 1) + 1; n = n == i ? i + 1 : i; printf(\" %d %d\", n, o); } while (o != i - 1 || n != i); printf(\" %d\", o = i + 1); } }}int main(){ ll n; scanf(\"%lld\", &n); ll m = rget(n, 0, 2e9); printf(\"%lld\\n\", m); if (n <= 2e6) { opt(m); for (int i = get(m); i < n; ++i) printf(\" 1\"); } return 0;}","categories":[{"name":"XCPC题解","slug":"XCPC题解","permalink":"https://sheauhawjang.github.io/categories/XCPC%E9%A2%98%E8%A7%A3/"}],"tags":[{"name":"图论","slug":"图论","permalink":"https://sheauhawjang.github.io/tags/%E5%9B%BE%E8%AE%BA/"},{"name":"构造","slug":"构造","permalink":"https://sheauhawjang.github.io/tags/%E6%9E%84%E9%80%A0/"},{"name":"2020 CCPC WannaFly 冬令营","slug":"2020-CCPC-WannaFly-冬令营","permalink":"https://sheauhawjang.github.io/tags/2020-CCPC-WannaFly-%E5%86%AC%E4%BB%A4%E8%90%A5/"}]},{"title":"2020 CCPC WannaFly 冬令营 Day5J 题解","slug":"2020 Wannafly Winter 5J","date":"2020-01-18T13:33:30.000Z","updated":"2020-01-18T13:33:30.000Z","comments":true,"path":"2020/01/18/2020 Wannafly Winter 5J/","link":"","permalink":"https://sheauhawjang.github.io/2020/01/18/2020%20Wannafly%20Winter%205J/","excerpt":"题目来源: 2020 CCPC Wannafly 冬令营 Day5: J. Xor on Figures 题面 给定一个整数 \\(k\\) 以及一个 \\(2^k\\times2^k\\) 矩阵 \\(\\boldsymbol A\\) , \\(\\boldsymbol A\\) 中任一元素 \\(a_{ij}\\) 都有 \\(a_{ij}\\in\\{0,1\\}\\). 定义平移 \\(m\\times n\\) 矩阵 \\(\\boldsymbol X\\) 操作如下: \\[ \\boldsymbol X=\\left[\\begin{array} {cc} \\boldsymbol A & \\boldsymbol B\\\\ \\boldsymbol C & \\boldsymbol D \\end{array} \\right] :\\Longrightarrow \\boldsymbol X \\rightarrow \\left[\\begin{array} {cc} \\boldsymbol D & \\boldsymbol C\\\\ \\boldsymbol B & \\boldsymbol A \\end{array} \\right] \\] 其中 \\(\\boldsymbol A\\) 是 \\(a\\times b\\) 矩阵, \\(a\\in[0,m]\\cap\\mathbb Z,b\\in[0,n]\\cap\\mathbb Z\\). 定义用矩阵 \\(\\boldsymbol B\\) 覆盖矩阵 \\(\\boldsymbol A\\) 操作如下: \\[ \\boldsymbol B(b_{ij})\\sim \\boldsymbol A(a_{ij}) :\\Longrightarrow \\boldsymbol A\\rightarrow (a_{ij}\\,\\mathrm{xor}\\,b_{ij}) \\] 你可以选择任意多个经过任意平移操作后的 \\(\\boldsymbol A\\) 依次覆盖一个 \\(\\boldsymbol{0}\\) 矩阵, 求最终可以得到多少种不同的矩阵. 数据范围 \\[ 1\\leq k\\leq5 \\]","text":"题目来源: 2020 CCPC Wannafly 冬令营 Day5: J. Xor on Figures 题面 给定一个整数 \\(k\\) 以及一个 \\(2^k\\times2^k\\) 矩阵 \\(\\boldsymbol A\\) , \\(\\boldsymbol A\\) 中任一元素 \\(a_{ij}\\) 都有 \\(a_{ij}\\in\\{0,1\\}\\). 定义平移 \\(m\\times n\\) 矩阵 \\(\\boldsymbol X\\) 操作如下: \\[ \\boldsymbol X=\\left[\\begin{array} {cc} \\boldsymbol A & \\boldsymbol B\\\\ \\boldsymbol C & \\boldsymbol D \\end{array} \\right] :\\Longrightarrow \\boldsymbol X \\rightarrow \\left[\\begin{array} {cc} \\boldsymbol D & \\boldsymbol C\\\\ \\boldsymbol B & \\boldsymbol A \\end{array} \\right] \\] 其中 \\(\\boldsymbol A\\) 是 \\(a\\times b\\) 矩阵, \\(a\\in[0,m]\\cap\\mathbb Z,b\\in[0,n]\\cap\\mathbb Z\\). 定义用矩阵 \\(\\boldsymbol B\\) 覆盖矩阵 \\(\\boldsymbol A\\) 操作如下: \\[ \\boldsymbol B(b_{ij})\\sim \\boldsymbol A(a_{ij}) :\\Longrightarrow \\boldsymbol A\\rightarrow (a_{ij}\\,\\mathrm{xor}\\,b_{ij}) \\] 你可以选择任意多个经过任意平移操作后的 \\(\\boldsymbol A\\) 依次覆盖一个 \\(\\boldsymbol{0}\\) 矩阵, 求最终可以得到多少种不同的矩阵. 数据范围 \\[ 1\\leq k\\leq5 \\] 题解 定义数域 \\(B=\\{0,1\\}\\) 上的加法和数量乘法运算: \\[ \\begin{align} \\forall a, b\\in B, \\quad&a\\oplus b =a \\,\\mathrm{xor}\\, b\\\\ &a\\odot b = a \\cdot b \\end{align} \\] 考虑 \\(m\\times n\\) 的矩阵 $ A M_{mn}(B)$, 对 \\(\\boldsymbol A(1; 1)\\) 做一个标记, 则对这个矩阵进行平移操作后, 标记可能在任意一个位置, 有 \\(m\\times n\\) 种取值. 故最多有 $ m n$ 个操作算子 \\(\\boldsymbol F\\). 定义数域 \\(B\\) 上矩阵的加法和数量乘法运算: \\[ \\begin{aligned} & \\forall \\boldsymbol X(x_{ij}), \\boldsymbol Y(y_{ij})\\in M_{m\\times n}(B), & \\boldsymbol X\\oplus \\boldsymbol Y&=(x_{ij}\\oplus y_{ij})\\\\ & \\forall a\\in B, \\boldsymbol X(x_{ij})\\in M_{m\\times n}(B), & a\\odot \\boldsymbol X&=(a\\odot x_{ij}) \\end{aligned} \\] 这样, $ M_{mn}(B) $ 构成了数域 \\(B\\) 上的线性空间. 显然, \\(\\langle\\boldsymbol F \\rangle\\) 是 \\(M_{m\\times n}(B)\\) 的一个线性子空间. 我们需要求的就是 \\(|\\langle\\boldsymbol F\\rangle|\\). 考虑 \\(\\langle\\boldsymbol F \\rangle\\) 的一个基 \\(\\mathfrak B=\\{\\lambda_i;i\\in[1, \\mathrm{rank}\\langle\\boldsymbol F\\rangle]\\cap\\mathbb Z\\}\\), 则 \\(\\forall \\boldsymbol X \\in \\langle \\boldsymbol F\\rangle\\), \\(\\boldsymbol X\\) 可以被 \\(\\mathfrak B\\) 惟一地线性表出, 即存在唯一的一组 \\(k_i\\in B,i\\in[1, |\\mathfrak B|]\\cap\\mathbb Z\\), s.t. \\[ \\boldsymbol X=\\sum_{i=1}^{|\\mathfrak B|}k_i\\lambda_i \\] \\(\\forall i\\in[1,|\\mathfrak B|]\\cap \\mathbb Z,k_i\\) 一共有 \\(0,1\\) 两个取值, 故 \\(\\boldsymbol X\\) 共有 \\(2^{|\\mathfrak B|}\\) 种不同的取值. 线性空间 \\(M_{m\\times n}(B)\\) 与 \\(B^{m\\times n}\\) 同构. 将所有的 \\(m\\times n\\) 个 \\(\\boldsymbol F\\) 转化成 \\(m\\times n\\) 个 \\(m\\times n\\) 维向量, 放入矩阵中高斯消元求秩即可. 复杂度为 \\(O(m^3n^3)=O(2^{6k})\\). 位运算与高斯消元的常数极小, 可以接受. 算出矩阵的秩后, 答案即 \\[ 2^{|\\mathfrak B|}=2^{\\mathrm{rank}\\langle\\boldsymbol F\\rangle} \\] 在 \\(\\bmod p\\) 意义下进行快速幂即可.","categories":[{"name":"XCPC题解","slug":"XCPC题解","permalink":"https://sheauhawjang.github.io/categories/XCPC%E9%A2%98%E8%A7%A3/"}],"tags":[{"name":"2020 CCPC WannaFly 冬令营","slug":"2020-CCPC-WannaFly-冬令营","permalink":"https://sheauhawjang.github.io/tags/2020-CCPC-WannaFly-%E5%86%AC%E4%BB%A4%E8%90%A5/"},{"name":"线性代数","slug":"线性代数","permalink":"https://sheauhawjang.github.io/tags/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/"}]},{"title":"Hello World","slug":"hello-world","date":"2019-12-11T13:11:47.000Z","updated":"2019-12-11T13:11:47.000Z","comments":true,"path":"2019/12/11/hello-world/","link":"","permalink":"https://sheauhawjang.github.io/2019/12/11/hello-world/","excerpt":"","text":"Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick Start Create a new post 1$ hexo new \"My New Post\" More info: Writing Run server 1$ hexo server More info: Server Generate static files 1$ hexo generate More info: Generating Deploy to remote sites 1$ hexo deploy More info: Deployment","categories":[],"tags":[]}],"categories":[{"name":"XCPC题解","slug":"XCPC题解","permalink":"https://sheauhawjang.github.io/categories/XCPC%E9%A2%98%E8%A7%A3/"},{"name":"学习笔记","slug":"学习笔记","permalink":"https://sheauhawjang.github.io/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"},{"name":"心境","slug":"心境","permalink":"https://sheauhawjang.github.io/categories/%E5%BF%83%E5%A2%83/"},{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/categories/C/"}],"tags":[{"name":"构造","slug":"构造","permalink":"https://sheauhawjang.github.io/tags/%E6%9E%84%E9%80%A0/"},{"name":"网络赛","slug":"网络赛","permalink":"https://sheauhawjang.github.io/tags/%E7%BD%91%E7%BB%9C%E8%B5%9B/"},{"name":"概率论","slug":"概率论","permalink":"https://sheauhawjang.github.io/tags/%E6%A6%82%E7%8E%87%E8%AE%BA/"},{"name":"ICPC 2022","slug":"ICPC-2022","permalink":"https://sheauhawjang.github.io/tags/ICPC-2022/"},{"name":"数论","slug":"数论","permalink":"https://sheauhawjang.github.io/tags/%E6%95%B0%E8%AE%BA/"},{"name":"抽象代数","slug":"抽象代数","permalink":"https://sheauhawjang.github.io/tags/%E6%8A%BD%E8%B1%A1%E4%BB%A3%E6%95%B0/"},{"name":"小学期","slug":"小学期","permalink":"https://sheauhawjang.github.io/tags/%E5%B0%8F%E5%AD%A6%E6%9C%9F/"},{"name":"动态规划","slug":"动态规划","permalink":"https://sheauhawjang.github.io/tags/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/"},{"name":"ICPC 2019","slug":"ICPC-2019","permalink":"https://sheauhawjang.github.io/tags/ICPC-2019/"},{"name":"正式赛","slug":"正式赛","permalink":"https://sheauhawjang.github.io/tags/%E6%AD%A3%E5%BC%8F%E8%B5%9B/"},{"name":"心境","slug":"心境","permalink":"https://sheauhawjang.github.io/tags/%E5%BF%83%E5%A2%83/"},{"name":"拾忆","slug":"拾忆","permalink":"https://sheauhawjang.github.io/tags/%E6%8B%BE%E5%BF%86/"},{"name":"原创","slug":"原创","permalink":"https://sheauhawjang.github.io/tags/%E5%8E%9F%E5%88%9B/"},{"name":"ICPC 2023","slug":"ICPC-2023","permalink":"https://sheauhawjang.github.io/tags/ICPC-2023/"},{"name":"省赛","slug":"省赛","permalink":"https://sheauhawjang.github.io/tags/%E7%9C%81%E8%B5%9B/"},{"name":"搜索","slug":"搜索","permalink":"https://sheauhawjang.github.io/tags/%E6%90%9C%E7%B4%A2/"},{"name":"线性代数","slug":"线性代数","permalink":"https://sheauhawjang.github.io/tags/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/"},{"name":"C#","slug":"C","permalink":"https://sheauhawjang.github.io/tags/C/"},{"name":"组合数学","slug":"组合数学","permalink":"https://sheauhawjang.github.io/tags/%E7%BB%84%E5%90%88%E6%95%B0%E5%AD%A6/"},{"name":"bitset","slug":"bitset","permalink":"https://sheauhawjang.github.io/tags/bitset/"},{"name":"训练","slug":"训练","permalink":"https://sheauhawjang.github.io/tags/%E8%AE%AD%E7%BB%83/"},{"name":"图论","slug":"图论","permalink":"https://sheauhawjang.github.io/tags/%E5%9B%BE%E8%AE%BA/"},{"name":"2020 CCPC WannaFly 冬令营","slug":"2020-CCPC-WannaFly-冬令营","permalink":"https://sheauhawjang.github.io/tags/2020-CCPC-WannaFly-%E5%86%AC%E4%BB%A4%E8%90%A5/"},{"name":"高精度","slug":"高精度","permalink":"https://sheauhawjang.github.io/tags/%E9%AB%98%E7%B2%BE%E5%BA%A6/"},{"name":"模板","slug":"模板","permalink":"https://sheauhawjang.github.io/tags/%E6%A8%A1%E6%9D%BF/"},{"name":"数学分析","slug":"数学分析","permalink":"https://sheauhawjang.github.io/tags/%E6%95%B0%E5%AD%A6%E5%88%86%E6%9E%90/"},{"name":"读书报告","slug":"读书报告","permalink":"https://sheauhawjang.github.io/tags/%E8%AF%BB%E4%B9%A6%E6%8A%A5%E5%91%8A/"},{"name":"校赛","slug":"校赛","permalink":"https://sheauhawjang.github.io/tags/%E6%A0%A1%E8%B5%9B/"},{"name":"计算几何","slug":"计算几何","permalink":"https://sheauhawjang.github.io/tags/%E8%AE%A1%E7%AE%97%E5%87%A0%E4%BD%95/"},{"name":"打表","slug":"打表","permalink":"https://sheauhawjang.github.io/tags/%E6%89%93%E8%A1%A8/"}]}