Codeforces Round #453 (Div. 1)

Codeforces Round #453 (Div. 1)

A. Hashing Trees

题目描述:给出一棵树的高度和每一层的节点数,问是否有两棵树都满足这个条件,若有,则输出这两棵树,否则输出perfect

solution
首先判断什么时候是perfect:当不存在相邻两层的节点数均大于\(0\)时,输出perfect
接下来就是构造的问题。若上一层只有一个节点,那么这一层的所有节点只能连到那个唯一的节点,否则分为两棵树不同的构造:

  1. 所有点都连到上一层的第一个节点
  2. 第一个点连到上一层的第一个节点,其它点连到上一层的第二个节点。

时间复杂度:\(O(n)\)

B. GCD of Polynomials

题目描述:将求两个数的公因数的辗转相除法拓展到求两个多项式的公因式上去。给定一个数\(n\),求两个多项式,使得该多项式的系数的绝对值小于等于\(1\),且运用了\(n\)步辗转相除。

solution
手工计算前几项可以发现:
\[p_0=1, p_1=x\]
\[p_{n+1}=xp_n \pm p_{n-1}\]
是加号还是减号需要判断一下,但总有一个符号能满足条件。最终的答案就是\(p_n, p_{n-1}\)

时间复杂度:\(O(n^2)\)

C. Bipartite Segments

题目描述:给定一个有\(n\)个点的无向图,满足图中没有长度为偶数的环。有\(q\)个询问,每次询问给定一个区间\([L, R]\), 问有多少个子区间\([x, y], (L \leq x \leq y \leq R)\), 使得只包含\([x, y]\)的点和它们之间的边的子图是二分图。

solution
由题目条件可以看出,该图是一棵顶点仙人掌,而且图中的环的长度都是奇数,又因包含奇环的图都不是二分图,所有由区间\([x, y]\)构成的图不能有环。

首先找出每个环中编号最大值和最小值,以此来求出对于每个点\(i\),最大的\(Rmax[i]\)使得\([i, Rmax[i]]\)没有环,这个从大到小扫一下就好了。对于每个询问,答案为\((\sum min(Rmax[i], R)-i+1)\),由于\(Rmax[i]\)是递增的,所以可以二分求出最大的\(j\),使得\(Rmax[j] \leq R\)\([L, j]\)可由部分和求出,后面的直接用求和公式就好。

时间复杂度:\(O(qlogn)\)

D. Weighting a Tree

题目描述:给定一个无向连通图,每个点都有一个值\(c_i\)\(c_i\)的奇偶性与\(i\)的度相同,现给每条边添加一个边权,使得每个点所连的边的边权之和等于\(c_i\),求一种方案或无解。

solution
考虑两种情况:

  1. 该图是一个二分图。如果二分图的两边的\(c_i\)之和不同,则无解,否则随便找出一棵生成树,令不在树上的边权为\(0\)。随便找一个点为根,然后从叶子节点开始给边赋值即可。
  2. 该图有奇环。随便找出一个奇环,然后整个图随便找一棵生成树,令不在树上的边权为\(0\)。随便找一个在之前找的奇环里的点为根,然后从叶子节点开始给边赋值。最终有可能根的\(c_i\)是不满足的(满足的话直接输出答案即可),记当前与根相连的边权和为\(sum\)。找出在环中的与根相连的边,将该边的权值加\(x\),然后沿着奇环将边权\(-x,+x,-x, ..., +x\)交替运算,其中\(x=\frac{c_i-sum}{2}\)(这里一定能整除)。这样除了根,在环中的点所连的边的边权总和不变,而与根相连的总和增加了\(c_i-sum\),使得根满足条件。

时间复杂度:\(O(n)\)

E. Cyclic Cipher

题目描述:现有一个方法来加密一个长度为\(n\)的序列\(a_i\),为加密这个序列,我们会选择一个密钥\(b_i(0\leq i<n)\)\(b_i\)有一个特点,那就是它每一个循环置换的数组都是线性无关的,也就是说,不存在一组非零系数,使得\(\sum_{i=0}^{n-1} x_ib_{(k-i)mod(n)}=0\)对于所有的\(k\)都成立。加密过程为:
\[c_i=\sum_{k=0}^{n-1}(b_{(k-i) mod (n)}-a_k)^2\]
现给出\(c_i,b_i\),求出所有满足的\(a_i\)

solution
观察\(c_i, c_{i-1}\):
\[c_i=\sum_{k=0}^{n-1}(b_{(k-i) mod (n)}-a_k)^2\]
\[=\sum_{k=0}^{n-1} (b_{(k-i) mod (n)}^2 - 2a_kb_{(k-i) mod (n)} + a_k^2)\]

\[c_{i-1}=\sum_{k=0}^{n-1}(b_{(k-i+1) mod (n)}-a_k)^2\]
\[=\sum_{k=0}^{n-1} (b_{(k-i+1) mod (n)}^2 - 2a_kb_{(k-i+1) mod (n)} + a_k^2)\]

第一项是\(\sum b_i^2\)(两个式子只是循环置换了而已,本质都是平方和), 第三项是\(\sum a_k^2\), 只有第二项是不一样的。因此
\[c_i-c_{i-1}=-2\sum_{k=0}^{n-1} a_k(b_{(k-i) mod (n)} - b_{(k-i+1) mod (n)})\]
\(b'_i=b_i-b_{i-1}, c'_i=\frac{c_i-c_{i-1}}{2}\),则
\[c'_i=\sum_{k=0}^{n-1} a_kb_{(k-i+1) mod (n)}\]
\(p=k-i+1\),则
\[c'_i=\sum_{p=0}^{n-1} b'_pa_{p+i-1}\]

\[B=\sum_{k=0}^{n-1} b'_kx^k, A=\sum_{k=0}^{n-1}a_kx^{n-k}, C=\sum_{k=0}^{n-1} c'_kx^k\]
\(C=AB\),符合卷积运算,用FFT就能逆推出来,但在逆推过程中会出现多解,具体可参考题解,但我觉得里面的符号有点乱。

转载于:https://www.cnblogs.com/GerynOhenz/p/8244531.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值