记录(2)
4月23日模拟赛
A
单独考虑一个连通块,可以证明,一个连通块如果不是完全图,点数至多是 \(P+2\)。因此若干个连通块并起来点数最多是 \(3P\)(而非 \(P+2\)!)。
那么相当于对于每对 \((n,P)\) 数 \(n\) 个点 \(P\) 个三元环的有标号联通图个数,\(n\le 17\)。
直接搜有标号的图显然只考虑链就已经是阶乘的复杂度了,因此要想办法只搜无标号图。
对着图同构搜没法做。考虑对于 \(G\),从 \(1\) 号点开始 bfs,(若有多个点,优先访问编号较小的)按照 bfs 序重标号为 \(1...n\) 得到一个无标号图 \(G'\),则一个有标号图 \(G\) 唯一对应一个无标号图 \(G'\)。设 \(p_i\) 表示 \(i\) 最小的连边,则对于这个无标号图 \(G'\) 需要满足 \(p_i\) 单调不降,在此基础上有恰好 \(\frac{(n-1)!}{\prod c_i!}\) 个图能够映射到 \(G'\)。
感受一下,这种图很多情况下大部分点都是直接连着 \(1\),因此 bfs 序很多就是 \(1...n\),所以这个 bfs 序的同构几乎就是完全的图同构了,跑得很快。
Balancing Network
第一问:
考虑将整个过程倒置,那么其实就是对于一对导线 \((x,y)\) 如果 \(x,y\) 有其中一个状态是 1,就可以把另外一个也变成 1,最后要求所有导线全都变成 1。可以枚举根之后贪心,那么设能成为最后一根的导线集合为 \(P\),任何一个 \(P\) 中的导线经过上述判定结果都是合法。对于每对 \((x,y)\),连接 \((x,y'),(x',y)\)(\(x',y'\) 表示下一列的对应点),即从这个点出发,能到达任意第一列的点。再倒置,将边反向,对每个第一列点求出能到哪些导线。从右往左扫描列 \(j\),对每行 \(i\),维护一个 bitset \(f_{j,i}\) 表示第 \(j\) 列第 \(i\) 行能到第 \(m\) 列哪些行,那么一次 \((x,y)\) 造成的影响即 \(f_x|=f_y,f_y|=f_x\)。最后 \(P\) 即所有 \(f_{1,i}\) 的交集。
第二问:
对于 \(n=2\),由于 \(m\ge 1\) 显然无解。
对于 \(n\ge 3\),我们说明一定有解。如果 \(n>3\),将后 \(n-3\) 列的边都指向前 \(3\) 列,转化为 \(n=3\)。
不妨假设第一条边是 \((1,2)\),那么操作完 \(1,2\) 总有一个 1 一个 0,恰好有两种可能。
维护一个状态,\((a,b,c)\),表示 \(a,b\) 之中恰有一个 1 一个 0,但具体还没有确定;\(c\) 一定是 1。加入一条边 \((x,y)\) 时,如果 \(x,y\in\{a,b\}\),那么将上一次操作随意确定了,这一次先留着不动;否则不妨假设 \(x=c,y=a,z=b\),那么将上一次定为 \(z\) 指向 \(y\),状态变为 \((x,z,y)\)。最后可能剩一条边,任意定向即可。也可以说是“反悔”了上一次的选择。写起来代码可以利用一个小性质 \(1\oplus2\oplus3=0\)。
Hard Cut
首先,假定/打表验证基本上(也就是可能有反例),总是能构出来 \(2^{\left\lceil\log_2 c\right\rceil}\)。
那么考虑找到 \(1\) 的中点,分成两半,递归构造。假设猜想成立,那么除了 \(c=1\) 或 \(c=2^k+1,k>0\) 就构完了,\(c=1\) 是平凡的,于是只需要考虑 \(c=2^k+1\)。
这种情况下,尝试先用 \(2^k\) 构出 \(2^{k+1}\),再稍作调整。首先,经过分讨,我们确实可以用 \(4\) 构 \(8\),那么递归就能构出任意 \(2^k,k\ge 2\)。那么加上最后单独的 \(1\),就构出了 \(2^k+1\),那么想怎么去掉 \(1\),枚举一些子段擦掉,假设值为 \(v\),然后背包看看能不能凑出 \(v-1\)。当 \(c\) 比较大的时候总是有解的,对于 \(c\) 比较小的情况,比如 11111,实际不一定有解,可以直接大力背包。
写起来代码,可以直接判掉 \(c\le 32\) 跑背包,若 \(c\ne 2^k+1\) 分治,若 \(c=2^k+1\) 用上面的方法构出 \(2^{k+1}+1\) 再调整。
排序大师 木林森 (剥叶子)Constructing a matrix (匹配)Summation By Construction (细节调整)Distinct GCDs (Hard Version) (固定k,求解f(k);lcm怎么做)Square Resistance Value(连分数逼近:两个定理,误差分析:最优性)星图重绘(前后缀最值、四个象限 证明、欧拉公式的应用)Urban Planning(更精细的构造)
4月28日模拟赛
A
B
C
建图,每条有向边是一个二元组 \((a,b)\),正着走是 \((a,b)\),反着走 \((-a,-b)\),询问是否存在 \(s,t\) 的长度为 \((a_0,b_0)\) 的路径。
求出任意一个 dfs 树,则只需要考虑用反祖边形成的环(或自环)线性组合。考虑维护 \(a,b,c\) 表示有 \((a,b),(0,c)\),其中 \(a\ne 0\)。加入一组 \((d,e)\) 时将 \((a,b),(d,e)\) 对 \(a,d\) 做辗转相除。
核心:用所有返组边构成的环可以线性组合出所有环/路径.
4月29日模拟赛
A
如果是空心的,可以在中间和两边随便填,然后转化为实心的.
分成 4 段构造. 有点像构造 \(|x_i-y_i|\) 要求构成排列.
B
考虑如何判定一个子串是否合法.则有结论:非法等价于,设 \(S_i=a_i-S_{i-1}\),则 \(S_0=S_n=0,S_i>0\).即将偶数位置的 \(a_i\) 取负,折线图上每一步都跨越 \(0\),最终回到 \(0\).
那么考虑如何判定整个串合法性,只需要维护对于每个左端点 \(\{S_i\}\) 的集合,且 \(1\le S_i\le m\).
时间复杂度 \(O(nm2^m)\) 或 \(O(n2^m)\).
三种理解方式:匹配\dp\打表猜结论.
C
考虑 \(S=1,T=n\).首先这种情况不会走回头路,因为如果存在回头路,如果走了一圈回到自己下方则显然可以直接下去,如果回到上方,则不如直接上去.
如果是从较低的桥切换到较高的桥,则一定是在高桥的一个端点处进行切换.可以归纳+调整证明.
反之,只要确定了所有经过的桥,那么总是存在经过所有桥的路径(因为保证了端点处可以上桥).
所以,对于这个子任务,可以将 \(H_i\) 视为 \(+\infty\),转化为上一个子任务.
部分分做法1
将所有 \([L_i,R_i],[L_j,R_j]\) 有交的 \(i,j\) 之间连接一条 \(|H_i-H_j|\) 的边.不妨假设 \(H_i\le H_j\),则条件等价于 \(R_i\in [L_j,R_j]\) 或 \(R_j\in [L_i,R_i]\).使用线段树优化建图,但可能存在负权边,但是因为时序是递增的,考虑在线段树上维护一个时间戳,可以在 pushup 时合并,时间只会顺流.点数和边数均为 \(O(m\log n)\) 量级,复杂度为 \(O(m\log n(\log m+\log\log n))\).
部分分做法2
做法1 并没有用到这个图的性质.
考虑从较低的桥 \(Y\) 切换到较高的桥 \(X\) 时,两座桥在高度上一定是相邻的.因为如果不是,考虑高桥 \(X\) 下方的桥 \(Z\),不如先从 \(Y\) 到 \(Z\),再从 \(Z\) 到 \(X\).因此对于一座较高的桥,只需要找到其下方的第一座桥连边.点数和边数均为 \(O(m)\) 量级,时间复杂为 \(O(m\log m)\).
完整解法
完整的路径可以分为三个阶段,第一阶段只会绕 \(S\) 螺旋 上升,第二阶段不会回头,第三阶段绕 \(T\) 螺旋下降(即第一阶段的对称).因为没时间,证明就不细写了.
对于一三阶段,对于每座桥找到 \(S,T\) 左右第一个支点一定是螺旋上升的较上的拐点,加入关键点集合.则关键点数为 \(O(n)\).考虑如何找出关键边.
则只有拐点到下方第一个点的边是有用的,证明仍然不细说.
时间复杂仍然为 \(O(m\log m)\).
Almost Multiplication Table
先二分答案不会使问题变难.
从极端情况开始调整,核心要求:让 \(X_i\) 逐渐变大,让 \(Y_i\) 逐渐变小.调整轮数为 \(O(n\sqrt V)\),每轮 \(O(n+m)\).
Graph Coloring
做法 1(全序图情况)
全序图即所有边的方向为 \(i\to j\),其中 \(i<j\).
构造 \(i,j\) 之间的边权为 \(\left\lfloor\log_2(i\oplus j)\right\rfloor\).
做法 2(全序图情况)
考虑分治,对于内部的链递归构造,对于跨过两边的链,要求两边之间的边的颜色不能同于任何内部的颜色,因此新设置一种颜色即可.
当 \(n=2^k\) 时两种做法等价.
做法 3(一般图 \(2\log_2 n\))
考虑两张全序图 \(G_1,G_2\),分别包含所有 \(i<j\) 和 \(i>j\) 的边,对两张图分别构造,再将颜色拼接在一起,直接按进制是 \(log^2\),但是没必要,按等价类划分即可.
正解
末日三问
线段树,两条链,\(1+2+4+...=O(n)\),打tag
整块可以转化为全局加
全局加可以做单log,空间可以做线性(逐层处理)
先分治求出\(f_k\),(max,+)是闵和,逐位取max是合并点集求凸包
平面图最段路,分散层叠,……,k进制fwt,分园,单位根多项式,分治fwt,章两分解三个矩阵叠加法
4月30日模拟赛
C
\(m=0\) 做法1
到一个点 \(i\) 时,\(1...i-1\) 一定都是 L。设 \(f_i\) 表示从 \(i\) 第一次到 \(i+1\) 的步数,转移为 \(f_i=2+\sum_{j=a_i}^{i-1}f_j\)。设 \(F_i\) 为 \(f_0+f_1+...+f_i\),则 \(F_i=2+2F_{i-1}-F_{a_i-1}\)。
\(m=0\) 做法2
设 \(g_i\) 表示从 \(0\) 开始第一次到 \(i+1\) 的步数,到 \(i+1\) 一定会经过 \(i\),所以先算上 \(g_{i-1}\),然后会跳到 \(a_{i-1}\),则还需要加上从 \(a_{i-1}\) 开始第一次到 \(i-1\) 的步数,这等于 \(g_{i-1}-g_{a_{i-1}}\),因为到 \(i-1\) 的状态一定会经过到 \(a_{i-1}\) 的状态,这两个状态之间的步数为 \(g_{i-1}-g_{a_{i-1}}\)。
则 \(g_i=2+2g_{i-1}-g_{a_{i-1}}\)。
75分做法3
将 \(b_{i-1}=2\) 的 \(i\) 设为关键点,则经过一个点时,前面的点,除关键点外,都是 L。
设 \(f_{i,S}\) 表示从 \(i\) 开始,第一次到 \(>i\) 的点时,走了多少步,到了哪个点,以及关键点的状态。先从 \(i\) 跳到 \(b_i\),再利用 \(i-1\) 之前的 dp 值,可以逐步跳到 \(\ge i\) 为止,此时如果在 \(i\),那么一定会跳到 \(i+b_i\)。
复杂度为 \(O(n^22^m)\),使用并查集可以 \(O(n^22^m\alpha(n))\)。
密码学第三次小作业
因为 \((e_1,e_2)=1\),存在 \(x,y\) 使得 \(xe_1+ye_2=1\)。则 \(m=c_1^xc_2^y\)。如果 \(x\) 或 \(y<0\),需要先求 \(c_1^{-1}\),再快速幂。
5月1日模拟赛
A
B
C
部分分做法1
令 \(a_{i,j}=1\) 达到最大值 \(n^3\)。
令 $a_{i,j}=
Game of Stacks
Go Play wallnut bowling
平衡树维护链,拆链合并+减半警报
有趣的家庭菜园 5
设区间左端点为 \(p\)。
二分答案(还是,先二分一手是不劣的),对于每个 \(a_i\),若 \(a_i\) 在选中的区间内(这里有一个关于 \(p\) 的限制),存在 \(l_i,r_i\),\(a_i\) 只能匹配到 \(b_{l_i}...b_{r_i}\),那么设 \(f(p)\) 表示区间内 \(<a_i\) 的个数(假设 \(a_i\) 互不相同),对于 \(f(p)\) 有对应的限制,因为 \(f(p)\) 关于 \(p\) 是一个分段的一次函数(图像法),可以将 \(f(p)\) 的限制转化到 \(p\) 上,用差分维护。若 \(a_i\) 不在选中的区间内同理。
核心:考虑单个元素的限制
XOR-ranges
子问题,笛卡尔树,dp
先令 \(a_{i,j}=1\),答案取到最大值 \(n^3\)。
5月2日模拟赛
A
设 \(r_i\) 表示 \(i\) 后面第一个 \(j\) 满足 \(a_j<a_i\)。
\(X\ge 0\) 做法
如果 \(i<p\le r_i\),变化到的位置是确定的,也就是 \(i\) 后面第一个 \(<a_i-X\) 的位置 \(r'_i\)。
否则不变。使用差分维护。
求 \(r'_i\) 有三种做法:扫描值域 set 维护(好写)、单调栈(性质更好)、在 \(i\to r_i\) 的图上做倍增(\(i,r_i,r_{r_i},...\) 就是整个单调栈)。
这一部分 \(O(n\log n)\)。
\(X<0\) 做法
设 \(Y=-X\),那么也就是选择一个非空且非整个数组的前缀 \(+Y\)。
性质1 答案不会变小。
性质2 \(ans'-n\le ans\le ans'\)。
性质3 如果存在 \(a_i<0\),一定可以取到 \(ans'\)。
证明:
性质4 一定选择后缀最小值。
证明:
枚举后缀最小值 \(p\),那么只有后缀最小值的 \(r_i\) 会变化,且变化的 \(i\) 是一段区间,双指针统计,这一部分时间线性。
B
设 \(f_{i,j}(x)\) 表示 \(i\) 子树选择 \(j\) 层,最上层的点权值 \(\le x\) 的方案数,设 \(F_{i,j}(x)\) 为 \(f_{i,j}(x)\) 的前缀和。
则 \(f_{i,j}(x)=\prod f_{v,j}(x)+\sum_{y\le x}[L_i\le y\le R_i]\prod f_{v,j-1}(y)\)。
显然 \(f_{i,j}(x)\) 是关于 \(x\) 的函数,更具体的,\(f_{i,j}(x)\) 是分段函数,每一段都是关于 \(x\) 的不超过 \(n\) 次多项式。
对每一段维护前 \(n\) 个连续点值,点积点和可以轻松维护,前缀和需要求一个插值。
对连续点值插值的复杂度为 \(O(n)\)。对着式子写一下,就是 \(i!(n-i)!(-1)^i\),需要求 \(\frac{\prod(x-j)}{i-j}\),可以线性逆元/前后缀积。
做法2
不同于做法1,设最上层权值最大值等于 \(x\) 的方案数,但是需要差分,可以考察 \(F_{i,j}\),给出 \(F_{i,j}\) 的转移,避免了差分。
做法3
如果真要差分也能做。
秋季限定生成树问题
观察1 当 \((x,y)\ge 2\) 时一定不优,证明:
待补
因此答案不会超过对于所有 \(1\le x<n\),\(x\) 最大的出边求和。即 \(\sum_{x=1}^{n-1} x(\max_{x<y\le n,(x,y)=1}y)+1\)。并且上界可以取到。
对于每个 \(y\),计算有多少 \(1\le x<y\),满足 \(x\) 和 \(y+1...n\) 都不互质,\(x\) 和 \(y\) 互质。容斥成和 \(y+1...n\) 都不互质的减去和 \(y...n\) 都不互质的。
\(n-y\) 不会很大,一个比较松的界是 prime gap。
暴搜,依次 dfs 每个数,维护 \(d\) 表示限制 \(d\mid x\)。对于一个数 \(y\),\([(x,y)\ne 1]=1-\sum_{t|y}\mu(t)[t\mid x]=-\sum_{t|y,t>1}\mu(t)[t\mid x]\),将 \(d\) 变为 \(d,t\) 的 lcm。因为 \(t>1\),不会搜很多步就会搜出一个 \(>n\) 的 \(d\)。
剪枝1 若 \((d,x)\ne 1\),已经蕴含了有关 \(x\) 的限制,可以直接 dfs 到下一个数。可以省去求 lcm。
剪枝2 按照 \(|\omega(x)|\) 从小到大 dfs。
剪枝3 直接从大到小 dfs,就不需要对每个 \(y\) 单独求一遍了。
不要在 dfs 的过程中把 ss[S] 覆盖掉了,注意别爆 longlong
一般图最大权完美匹配的一(两)个错误的费用流建模:
一般图大小为 \(k\) 的最大匹配的点集 \(S_k\subset S_{k+1}\)。
动态维护点集 \(S\) 的重心、求一个点 \(c\) 到点集 \(S\) 所有点距离和、求点集 \(T\) 内的点到 \(c\) 的最大距离。
求法:
- \(S\) 的重心一定在 \(S\) dfs 序第 \([m/2]+1\) 个点(中位数)到根的路径上。/ 点分树 / 全局树剖,二分 / satt
- 淀粉树/拆贡献/
- 淀粉树
删点、找到 \(S\) 中距离 \(c\) 最近的点、找到
考虑变化
5月4日模拟赛
B
欧拉图(非孤点联通,且每个点入度=出度)欧拉环排列个数为 \(T*\prod (\deg_i-1)!\)(证明:双射)。
\(T\) 为:以任意一个点为根的外向树/内向树(两者是相等的(将边全部反向),任何一个根得到的结果也是相等的)个数。
欧拉环排列,也就是任意一个循环移位被视为和他相等。
从 \(1\) 开始回到 \(1\) 的欧拉路径额外乘上一个 \(\deg_1\)。
状态如果记录内向树的边集,状态数为 \(6\);如果利用矩阵树定理,记录 \(2\times 2\) 的矩阵行列式,状态数为 \(4\)。
C
枚举在 \(G_1\) 上 \(Y\) 的对应点以及 \(G_2\) 上 \(X\) 的对应点。
将 \(G_1\) 和 \(G_2\) 叠在 \(T\) 上,同时删掉 \(X,Y\),\(T\) 被分裂为若干连通块 \(G'\),\(G_1',G_2'\) 分别是 \(G_1,G_2\) 删掉 \(Y,X\) 的图,中间的连通块(如果 \(X,Y\) 不相邻)同时属于 \(G_1',G_2'\),\(X\) 一侧的联通块属于 \(G_2'\),\(Y\) 一侧的属于 \(G_1'\)。
那么 \(G'\) 的形态是已知的,也就是所有联通块内部的形态都已知,那么只需要将 \(G_1'\) 和 \(G_2'\) 的联通块两两匹配,需要满足一些要求。首先,同时属于 \(G_1',G_2'\) 最多一个,不能有既不属于 \(G_1'\) 又不属于 \(G_2'\) 的联通块。先将 \(G_1',G_2\),\(G_2',G_1\) 贪心匹配,如果有剩余,必须是 \(G_1',G_2'\)。
预处理子树和子树补的哈希。先假设联通块个数都对上号,那么总的联通块个数不超过 \(Y\) 在 \(G_1\) 上的度数和 \(X\) 在 \(G_2\) 上的度数之和,总复杂度 \(O(n^2)\)。
tip:无根树哈希,如果有两个重心\(c_1,c_2\),求\(c_1,c_2\)的哈希值较大者作为整个树的哈希值。
求树哈希需要一个 random oracle,也就是\(F_{2^{64}}\to F_{2^{64}}\) 的随机映射,这个可以看成是给你上一个数让你生成下一个数,但是实际上并不能保证是真正随机的,可以使用环长(周期)来估测random oracle的好坏,可以选择的方法有:
1.
ll h(ll x) {
return x * x * x * 1237123 + 19260817;
}
ll f(ll x) {
ll cur = h(x & ((1 << 31) - 1)) + h(x >> 31);
return cur;
}
- xor-shift 哈希
ull K=2010101220100326,mask=520520520520520,X=2222223333333331,K2=1;
ull xor_shift(ull x){
x^=mask;
x^=x<<13;
x^=x>>7;
x^=x<<17;
x^=mask;
return x;
}
ull xor_shift2(ull x){
return x*X;
}
热身 1
两倍近似:按照任意顺序分配任务,每次贪心分配给结束时间最小的机器。
证明:待补。
1.5倍近似:按照时长最大到小分配。
设任务数为 \(m\),时长从大到小 \(t_1,...,t_m\),\(n\) 个机器。
证明:设最优解为 \(t^*\)。对于贪心出来的结果,取结束时间最晚的机器,取最后一个任务,不妨假设就是第 \(m\) 个任务,时长为 \(t_m\),以及这个机器上的其他任务,总时长为 \(t_0\),分别证明 \(t_0\le t^*\),\(t_m\le \frac12 t^*\)。
证明 \(t_0\le t^*\):按照贪心策略最后一次选择给了这个机器,则其他机器肯定大于这个机器,因此 \(t_0\) 不超过平均值;而 \(t^{*}\) 不小于平均值。
证明 \(t_m\le \frac12 t^*\):\(n\le m\) 显然贪心出的就是最优解;否则最优解中一定存在一个机器有两个以上的任务,所花费的时间至少是 \(2t_m\)。
倍增分块,重构
stern-brocot树,二分斜率
两个整点连线下方整点个数,picks theorem
5月5日模拟赛
A
假做法?
\(n\)个点连成森林的充要条件
题解做法
类似题:circuit
这种分析度数的构造题都不太会
B
分块,维护平面最近点对;带权
sqrt(log)
C
满足树的拓扑关系的贪心:考虑合并
取出除根以外最优的点 \(x\),如果选了父亲 \(fa_x\),就一定会选 \(x\),所以可以等效地向上合并,将 \(x\) 和 \(fa_x\) 合并为一个点。
那么就只需要考虑如何比较两个点谁更优,这是一个 exchange argument。将信息扩展为一个二元组 \((a,b)\),考虑 \((a_1,b_1),(a_2,b_2)\) 谁放在前面列出一个不等式,再移项,变成比较各自的性价比。
hall定理 好题,要补
Good Graph
任意 \(|S|\le|N(S)|\) 等价于存在完美匹配。
不存在完美匹配时
考虑从一个为匹配点 \(s\) 出发 bfs,将所有 bfs 到的左部点加入集合 \(T\),则 \(|T|=|N(T)|+1\)。因为 bfs 到的生成树形成一个交错树,即任意一个 \(T\) 中的右部点,都存在对应的左部匹配点,且属于集合 \(T\);对于 \(T\) 中任意一个左部点,如果不为 \(s\),它的右部匹配点一定属于 \(T\)。
(补充:设失配点个数为 \(c\),实际上可以构造 \(|S|-|N(S)|\) 取遍 \(0...c\))
存在完美匹配时
性质:对于紧集 \(S,T\),\(S\cup T,S\cap T\) 也是紧集。
证明:
\(|N(S)|=|S|\)
\(|N(T)|=|T|\)
两式相加得 \(|N(S)|+|N(T)|=|S|+|T|\)
\(|N(S)\cup N(T)|+|N(S)\cap N(T)|=|S\cup T|+|S\cap T|\)
\(|N(S\cup T)|+|N(S\cap T)|\le |S\cup T|+|S\cap T|\)
又 \(|N(S\cup T)|\ge |S\cup T|\),\(|N(S\cap T)|\ge |S\cap T|\)
所以.....
那么对于每个左部点 \(x\),都存在包含它的唯一的极小的紧集 \(P_x\)。求法:首先令 \(P_x=\{x\}\),然后对于所有 \(v\in N(P_x)\),将 \(q_v\) 加入 \(P\)。两个二分图的紧集相同当且即当 \(P_x\) 相同。
对于所有 \((u,v)\in E\),连接 \(u\to q_v\),得到一个有向图 \(G\)。一个有向图对应一个二分图,且边数相等。那么只需要找到一个有向图 \(G'\),满足 \(G,G'\) 的连通性相同。对于每个强连通分量,如果不是单点,连出一个环,缩点变成 DAG。对于 \((x,y)\in E\),如果不存在 \(x\to y\) 且不经过 \((x,y)\) 的路径,那么需要加入 \((x,y)\);如果 \((x,y)\notin E\),则 \((x,y)\) 一定不属于 \(E'\)。

浙公网安备 33010602011771号