CF #541div2 F】的更多相关文章

题目本质:并查集的链式合并 解决方法1: 类似哈夫曼树,叶节点们为真点,其余造一些虚的父节点,使得dfs这棵树的时候,先进行并查合并的点一定是兄弟节点因而紧挨着被输出,巧妙达到了效果. #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath>…
题目链接 CF 633 F. The Chocolate Spree 题解 维护子数答案 子数直径 子数最远点 单子数最长直径 (最长的 最远点+一条链) 讨论转移 代码 #include<vector> #include<cstdio> #include<algorithm> #define gc getchar() #define pc putchar #define int long long inline int read() { int x = 0,f = 1…
题目链接:http://codeforces.com/contest/474/problem/F 一个数组,每一次询问一个区间中有多少个数字可以整除其他所有区间内的数字. 能够整除其他所有数字的数一定是这些数字的gcd,所以可以用一个线段树来查询区间gcd. 接着需要统计区间内这个数字的出现个数,在读取数组时,顺便保存一个pair<int,int>键为数字,val为位置的数组,再sort一下,统计区间内某个数字出现次数,直接upper_bound-lower_bound即可. #include…
题目链接:[http://codeforces.com/contest/1003/problem/F] 题意:给出一个n字符串,这些字符串按顺序组成一个文本,字符串之间用空格隔开,文本的大小是字母+空格的个数.在这个文本中找k(k>=2)个区间,使得这k个区间完全相同,字符串不能分开,然后把每段的字符串变成单个的字符,并去掉中间的空格.可能有多种方案,求文本的最小长度.[表达能力有限,望理解,具体可以看题目] You are given a text consisting of nn space…
F. Cooperative Game 链接 题意: 有10个玩家,开始所有玩家在home处,每次可以让一些玩家沿着边前进一步,要求在3(t+c)步以内,到达终点. 分析: 很有意思的一道题.我们构造一种走的方式,设玩家有A,B和剩下的. 1.首先A走一步,然后A,B同时走一步,直到AB相遇.(A,B一定会相遇,A先进入环上,然后B进入环上后,没此操作AB之间的距离减少1) 2.然后A,B,和剩下的所有玩家同时走,直到相遇.相遇的点就是要找到的点. 为什么这样是对的? 设B进入环上后又走了x步,…
F. Ray in the tube 链接 题意: 有两条平行于x轴的直线A,B,每条直线上的某些位置有传感器.你需要确定A,B轴上任意两个整点位置$x_a$,$x_b$,使得一条光线沿$x_a→x_b$射出(碰到A,B后反射),能够碰到的传感器数量最多是多少. 每条直线上的传感器数量≤105,0≤xi≤109  分析: 很有意思的一道题. 发现和y没什么关系,只要确定$x_a$,$x_b$之间的水平距离差dx就行了. 然后寻找性质: 1.如果dx为奇数,那么dx一定可以用1来代替,并且不会更差…
本题把$log$化简之后求得就是每个质数$f$前的系数,求系数并不难,难点在于求出所有的质数. 由于空间限制相当苛刻,$3e8$的$bitset$的内存超限,我们考虑所有的除了$2$和$3$以外的质数,他们可以被表示成$p \equiv \pm 1 (mod \; 6) $.(具体来讲就是把数表示成$6k, 6k+1, 6k+2, 6k+3, 6k+4, 6k+5$,显然只有余数为$1$或$5$才有成为质数的可能性).然后我们需要筛的个数就变成原来的三分之一了. 另一个做法:分块,一部分一部分筛…
F. Yet Another Minimization Problem http://codeforces.com/contest/868/problem/F 题意: 给定一个长度为n的序列.你需要将它分为m段,每一段的代价为这一段内相同的数的对数,最小化代价总和. n<=100000,m<=20. 分析: f[k][j]=min{f[k-1][j]+cost(k,j,i)}; cost发现不能快速的算出.于是不能用类似单调队列+二分的方法来做了. 考虑分治,solve(Head,Tail,L…
F. The Shortest Statement http://codeforces.com/contest/1051/problem/F 题意: n个点,m条边的无向图,每次询问两点之间的最短路.(m-n<=20) 分析: dijkstra. 如果是一棵树,那么可以直接通过,dis[u]+dis[v]-dis[lca]*2来求.现在如果建出一棵树,那么非树边只有小于等于21条. 只经过树边的路径用上面的方式求出,考虑经过非树边的路径. 经过非树边(至少一条),那么一定经过了这条边的顶点,所以…
F. Leaf Sets http://codeforces.com/contest/1042/problem/F 题意: 将所有的叶子节点分配到尽量少的集合,一个可行的集合中两两叶子节点的距离<=k. 分析: 可以证明,对于一个子树内的两个叶子节点,把它们分到同一个集合中一定比分到两个集合中好. 所以一个子树内的叶子集合,能合并,尽量合并. 从叶子节点dfs,往上推,当到达一个点时,求出这棵子树内所有的叶子集合到这个节点的距离.如果两个距离小于等于k,那么显然是可以合并的.合并后,只返回这棵子…