Codeforces Round #453 (Div. 1)
Codeforces Round #453 (Div. 1)
A. Hashing Trees
题目描述:给出一棵树的高度和每一层的节点数,问是否有两棵树都满足这个条件,若有,则输出这两棵树,否则输出perfect
solution
首先判断什么时候是perfect:当不存在相邻两层的节点数均大于\(0\)时,输出perfect。
接下来就是构造的问题。若上一层只有一个节点,那么这一层的所有节点只能连到那个唯一的节点,否则分为两棵树不同的构造:
- 所有点都连到上一层的第一个节点
- 第一个点连到上一层的第一个节点,其它点连到上一层的第二个节点。
时间复杂度:\(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
考虑两种情况:
- 该图是一个二分图。如果二分图的两边的\(c_i\)之和不同,则无解,否则随便找出一棵生成树,令不在树上的边权为\(0\)。随便找一个点为根,然后从叶子节点开始给边赋值即可。
- 该图有奇环。随便找出一个奇环,然后整个图随便找一棵生成树,令不在树上的边权为\(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就能逆推出来,但在逆推过程中会出现多解,具体可参考题解,但我觉得里面的符号有点乱。
Codeforces Round #453 (Div. 1)的更多相关文章
- Codeforces Round #453 (Div. 1) 901C C. Bipartite Segments
题 http://codeforces.com/contest/901/problem/C codeforces 901C 解 首先因为图中没有偶数长度的环,所以: 1.图中的环长度全是奇数,也就是说 ...
- Codeforces Round #453 (Div. 1) D. Weighting a Tree(构造)
题意 一个 \(n\) 个点 \(m\) 条边的无向连通图中每个点都有一个权值,现在要求给每条边定一个权值,满足每个点的权值等于所有相连的边权之和,权值可负. 题解 如果图是一棵树,那么方案就是唯一的 ...
- 【做题】Codeforces Round #453 (Div. 1) D. Weighting a Tree——拆环
前言:结论题似乎是我的硬伤…… 题意是给你一个无向图,已知连接到每一个点的边的权值和(为整数,且属于区间[-n,n]),需要求出每条边权值的一个合法解(都要是在区间[-2*n^2,2*n^2]内的整数 ...
- Codeforces Round #453 ( Div. 2) Editorial ABCD
A. Visiting a Friend time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces Round #453 Div. 2 A B C D (暂时)
// 从大作业和实验报告中爬出来水一发 // 补题...还是得排在写完实验报告之后... A. Visiting a Friend 题意 给定若干段行车区间,问能否从起点到终点 思路 扫描一遍,维护最 ...
- 【Codeforces Round #453 (Div. 2) A】 Visiting a Friend
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 维护最右端的端点就好. [代码] #include <bits/stdc++.h> using namespace st ...
- 【Codeforces Round #453 (Div. 2) B】Coloring a Tree
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 从根节点开始. 显然它是什么颜色.就要改成对应的颜色.(如果上面已经有某个点传了值就不用改 然后往下传值. [代码] #includ ...
- 【Codeforces Round #453 (Div. 2) C】 Hashing Trees
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然只有当a[i]和a[i-1]都大于1的时候才会有不同的情况. a[i] >= a[i-1] 且a[i-1]>=2 则 ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
随机推荐
- 【明哥报错簿】之【解决eclipse项目小红叉】
解决方案: 0.如果是jdk版本不一致,直接右击项目名称,选择maven里面的update project.原因一般是maven的pom.xml里面设置的编译插件org.apache.maven.pl ...
- Contest 2
A:辣鸡题.搜索怎么这么难啊.不会啊. B:裸的高斯消元,看起来可以优化到n2. #include<iostream> #include<cstdio> #include< ...
- 【交换机在江湖】第十三章 VLAN划分篇
江湖各位大侠重温了VLAN的基础知识,是否想过4094个VLAN可以怎样划分,哪种方式又是好用简单的?细心的小编特地整理了一番,给各位大侠把玩把玩. VLAN划分的方式: Ø 基于接口划分VLAN: ...
- "strcmp()" Anyone? UVA - 11732(trie出现的次数)
给你n个单词,让他们两两比较,要求他们运用strcmp时,进行比较的次数. 边建树边统计 #include <iostream> #include <cstdio> #incl ...
- [HDU5677]ztr loves substring
ztr loves substring Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- [CTSC2012]熟悉的文章 后缀自动机
题面:洛谷 题解: 观察到L是可二分的,因此我们二分L,然后就只需要想办法判断这个L是否可行即可. 因为要尽量使L可行,因此我们需要求出对于给定L,这个串最多能匹配上多少字符. 如果我们可以对每个位置 ...
- Redis学习笔记一:Redis安装
Redis安装 1.下载进入redis官网下载redis-xxx.tar.gz包 2.将redis-xxx.tar.gz拷贝到Linux某一目录下并对其进行解压 tar -zxvf Redis-xxx ...
- VC 生成后事件 Post-Build Event
原文链接地址:https://blog.csdn.net/jfkidear/article/details/27313643.https://blog.csdn.net/kevindr/article ...
- day5-python基础
- bzoj1511 [POI2006]OKR-Periods of Words kmp+乱搞
1511: [POI2006]OKR-Periods of Words Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 351 Solved: 220[S ...