CodeForces Golbal Round 1

CodeForces Golbal Round 1

CF新的比赛呢(虽然没啥区别)!这种报名的人多的比赛涨分是真的快。。。。
所以就写下题解吧。

A. Parity

太简单了,随便模拟一下就完了。

B. Tape

显然就是先找一个长的把所有的全部覆盖,然后可以在上面丢掉\(k-1\)段间隙。
那么把两两之间的间隙长度拿出来排序就可以了。

C. Meaningless Operations

如果\(a\)不等于\(2^k-1\)的形式,那么令\(S=2^k-1\),其中\(2^{k-1}<a<2^k\)。
那么令\(b=S\oplus a\),那么\(a\oplus b=S,a\&b=0\),那么此时的\(gcd=S\),为最大值。

否则\(a=S\),那么\(gcd=gcd(a-b,b)\),这是一个辗转相减的形式,等于\(gcd(a,b)\),所以\(b\)取\(a\)的最大的不等于\(a\)的约数。

D. Jongmah

显然对于\(i\)而言只可能和\(i-2,i-1,i+1,i+2\)凑顺子。
而如果某个顺子超过了\(3\)个是没有意义的,所以一个顺子最多出现\(2\)次,所以\(i\)这个牌最多用\(6\)次,超过\(6\)的部分每\(3\)个直接凑起来。
那么设\(f[i][0..6][0..6]\)表示当前考虑的是\(i\),后面两维记录\(i-1\)的数量和\(i-2\)的数量。
转移的时候枚举这个顺子的出现次数,随便转移一下就好了。

E. Magic Stones

和\(\mbox{agc006_c}\)很类似啊。
观察这个数列的操作,把它差分,发现差分后的操作等价于在差分数组上交换相邻两个数。
所以只需要判断两个数列的差分数组排序后是否相等即可。
注意要特判第一个数是否相等。

F. Nearest Leaf

考虑两个点之间的距离是\(dep[u]+dep[v]-2*dep[LCA]\)。
那么我们把所有叶子节点的\(dep[u]\)放在自己身上。对于一个询问\(u\),显然就是找最小的\(dep[v]-2*dep[LCA]\),\(dfs\)整棵树,假如当前点作为\(LCA\)影响其子树内的询问,那么就是把它子树内的所有点权全部减去\(2*dep[u]\),这样子询问的时候,直接查区间最小值即可。线段树维护。

G. Tree-Tac-Toe

有神仙已经写得很好了,所以我就懒得写了
注意一下别每次\(memset\),每次手动\(for\)清空数组。

H. Modest Substrings

如果满足条件的串很少的话,显然全部丢到\(AC\)自动机里面去\(dp\)。
问题就在于这样子符合条件的串很多。
考虑压缩状态,不难发现很多自动机上的状态都是满的,即可以随意选择子串都能匹配上。
什么样的点的子树是满的呢?对于\(\ge l\)而言,符合了前缀之后,下一位大于\(l\)的这一位的所有节点。对于\(\le r\)是类似的。
那么一共有\(\Sigma(|l|+|r|)\)个满状态的节点,注意\(\Sigma\)是字符集大小。
对于每个满状态的节点,设\(g[u][x]\)表示从\(u\)节点开始,往下任意走\(x\)步,能够到达的合法的串的个数,这个东西在构建\(AC\)自动机的时候可以很容易的得到。
那么直接\(dp\)就好了。。。。
说不清所以看代码吧。。。。
代码

原文地址:https://www.cnblogs.com/cjyyb/p/10364983.html

时间: 2024-10-12 22:15:42

CodeForces Golbal Round 1的相关文章

Codeforces Beta Round #91 (Div. 1 Only) E. Lucky Array

E. Lucky Array Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decimal representation contains only the lucky digits 4 and 7. For example, numbers 47, 744, 4 are lucky and 5, 17, 467are not. Petya has an arra

Codeforces Beta Round #85 (Div. 1 Only) C (状态压缩或是数学?)

C. Petya and Spiders Little Petya loves training spiders. Petya has a board n × m in size. Each cell of the board initially has a spider sitting on it. After one second Petya chooses a certain action for each spider, and all of them humbly perform it

CodeForces Beta Round #1

Codeforces Beta Round #1 A. Theatre Square [题意]一个n*m的矩形广场,用a*a的方形石板铺设,问最少需要多少块石板能铺满广场. [思路]水题,从n方向来看能能够铺设ceil(n/a)块,从m方向来看能能够铺设ceil(m/a)块,总共有ceil(n/a)*ceil(m/a)块. 1 /* 2 ** CodeForces 1A Theatre Square 3 ** Created by Rayn @@ 2014/05/18 4 */ 5 #inclu

[2016-03-31][codeforces][659A][Round House]

时间:2016-03-31 23:17:13 星期四 题目编号:[2016-03-31][codeforces][659A][Round House] 题目大意:n个数字绕成一个圈,沿着起点a,走b步,问最后能走到哪里 分析:直接 (a+b)%n,不过需要注意取模为0的时候,结果应该是n #include <cstdio> using namespace std; int main(){ int n,a,b,ans; scanf("%d%d%d",&n,&a

暴力/DP Codeforces Beta Round #22 (Div. 2 Only) B. Bargaining Table

题目传送门 1 /* 2 题意:求最大矩形(全0)的面积 3 暴力/dp:每对一个0查看它左下的最大矩形面积,更新ans 4 注意:是字符串,没用空格,好事多磨,WA了多少次才发现:( 5 详细解释:http://www.cnblogs.com/cszlg/p/3217478.html 6 */ 7 #include <cstdio> 8 #include <algorithm> 9 #include <cstring> 10 #include <cmath>

Codeforces Beta Round #6 (Div. 2 Only) B. President&#39;s Office

题目大意 给出一个n*m的矩阵 ,描述桌子的布局.总统的桌子和他的副手的桌子相邻,每一个人的桌子有它独有的颜色.问总统有多少个副手. 解题思路 搜出总统的桌子在矩阵中的边界后判断边界外的其它颜色桌子的数量. 题目代码 #include <set> #include <map> #include <queue> #include <math.h> #include <vector> #include <string> #include

图论/暴力 Codeforces Beta Round #94 (Div. 2 Only) B. Students and Shoelaces

题目传送门 1 /* 2 图论/暴力:这是个连通的问题,每一次把所有度数为1的砍掉,把连接的点再砍掉,总之很神奇,不懂:) 3 */ 4 #include <cstdio> 5 #include <cstring> 6 #include <algorithm> 7 #include <cmath> 8 using namespace std; 9 10 const int MAXN = 1e2 + 10; 11 const int INF = 0x3f3f3

Codeforces Beta Round #1 B. Spreadsheets

Codeblocks坏掉了,我不知道该怎么修,只能过两天重装系统了. 没办法.这个题是用Java写的,代码风格不好不要骂我~~ 题目大意: Excel表格那种坐标系统,和正常的坐标系统.用代码实现转换. 就是模拟题啊,代码量比较小. 下面是代码: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); i

Codeforces Beta Round #1 C. Ancient Berland Circus

果然Java还是不靠谱啊,一个NaN把我整了半天~~ 题目大意: 有一个正多边形,给出任意三个顶点的坐标,求这个正多边形的最小面积. 解题思路: 首先要知道这三个顶点组成的三角形的外接圆一定是这个正多边形的外接圆. 用过计算出三角形的三边长,可以计算出三角型面积,进而推出外接圆半径. 可以得到三个圆心角,找出最大公约数,那就是最大角度. 就可以计算出多边形面积了~~ 下面是代码: import java.text.DecimalFormat; import java.util.Scanner;