杂题
LowestJN
强省弱OIer
展开
-
[AtCoder AGC014 .E][杂题]Blue and Red Tree
题意给一棵树,初始每条边都是蓝色的,你可以选择一条全是蓝色的路径,删去其中的一条边,然后给这条路径的两个端点连上一条红色的边。给出两棵都是N个点的树,问是否存在一种方案使第一棵树变成第二棵树。挺好的题操作可以看成:选择一条蓝色的边删去,原来的树会变成两棵没有交集的树T1,T2,然后分别在T1,T2中选择一个点,连上红色的边,递归处理T1,T2考虑递归到最后,会剩下两个点,那么这两个点在原来的树中存在原创 2017-05-07 16:02:02 · 927 阅读 · 0 评论 -
[AtCoder][杂题]AGC015 . C .Nuske vs Phantom Thnook
同APIO2017 rainbow 只不过这题n,m只用2000,直接数组维护一下然后O(1)询问就可以了#include <cstdio>#include <iostream>#include <algorithm>#define N 2010using namespace std;int n,m,q;int a[N][N];int b[N][N],c[N][N];inline int原创 2017-05-30 16:05:50 · 552 阅读 · 0 评论 -
[线段树 哈希] BalkanOI 2016. Haker
题目是给定一个字符串,有三种操作.一种是询问两个子串是否相同一种是区间内的 aa 变成 bb,bb变成 cc … zz 变成 aa一种是区间 [L,R][L,R] 变成原串的区间 [k,k+R−L][k,k+R-L] 的子串因为要判断是否相同,肯定就要HASH,因为第二种操作,要记一下每个字母出现的位置的hash值第三种操作的话,用前缀和记一下原串的hash,打一个标记就好了复杂度 O(nlogn×原创 2017-10-31 11:40:38 · 418 阅读 · 0 评论 -
[数学] Codechef September Challenge 2017 Weasel does Xor on Tree
令 fi,jf_{i,j} 表示时间为 ii 的时候,jj 点的权值那么 fi,u=XOR{fi−1,v|v∈sonu}f_{i,u}=\text{XOR}\{f_{i-1,v}|v\in son_u\}fi−1,vf_{i-1,v} 用 fi−1,v′f_{i-1,v'} 带入不断展开就可以得到 fx,1=XOR{ai∗f0,i}f_{x,1}=\text{XOR}\{a_i*f_{0,i}\}原创 2017-10-24 13:38:02 · 605 阅读 · 0 评论 -
[二分 ST表 杂题] Codeforces875D. High Cry
早知道先看D题就不会掉这么惨了枚举左端点,那么区间或值最多变化log次二分变化的区间,再二分区间或值大于区间最大值的区间用ST表记一下区间最大值、或值#include <cstdio> #include <algorithm>#include <iostream>using namespace std;typedef long long ll;const int N=200010;int n,a原创 2017-10-17 13:11:33 · 646 阅读 · 0 评论 -
[并查集] UOJ#61. UR#5 怎样更有力气
这题调的我心态爆炸大概就是可以把这条链分成若干联通块,联通块之间能连边就直接连因为每条边只会被缩一次,所以复杂度是有保证的#include <cstdio>#include <iostream>#include <algorithm>#include <map>#include <set>using namespace std;typedef long long ll;const int N原创 2017-10-26 11:40:10 · 605 阅读 · 0 评论 -
[构造] BZOJ5100 [POI2018]. Plan metra
一道构造杂题画画图可以发现,把1到n的路径提出来,其他的点都是跟这上面的其中一个点相连的。这个路径就是把点权设为 ai−bia_i-b_i 后排序(除了1和n),然后相同点权中 aia_i 最小(或者 bib_i 最小) 的点一次相连。然后把1和n插到这个序列中。显然序列中1的左边和n的右边最多只有1个点。那么枚举1的左边有几个点,n的右边有几个点,dfs判一判就好了O(n)O(n)#include原创 2017-12-01 19:53:07 · 349 阅读 · 0 评论 -
[构造] Atcoder AGC001 D. Arrays and Palindrome
很神奇的构造题…首先有一个结论,就是当给定数列的奇数的个数大于2的时候,就无解然后把奇数放在两端,输出 A1−1,A2…Am−1,Am+1A_1-1,A_2\dots A_{m-1},A_{m}+1 就好了#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int N=110;int原创 2017-12-06 20:47:17 · 587 阅读 · 0 评论 -
[三元环] BZOJ5206: [Jsoi2017]原力
活那么久竟然都不会找三元环…https://www.cnblogs.com/jiachinzhao/p/7474761.html这题的话,颜色相同且两端点相同的边权值可以加在一起,然后找三元环就好了#include <cstdio>#include <iostream>#include <algorithm>using namespace s...原创 2018-03-09 09:03:50 · 772 阅读 · 0 评论 -
[回文串 线段树] Codeforces Gym100032 ICL Cup 2012 K. Subpalindromes
题意是求一个区间里回文串的个数(出现位置不同的回文串算不同)用马拉车算出以每个点为中心的最长回文串长度考虑点 iii,iii点到以它为中点的最长的回文串的端点长度为 xxx那么它对一个询问的贡献是 min{i−L,R−i,x}min{i−L,R−i,x}\min\{i-L,R-i,x\}把询问的区间分成两部分 [L,mid][L,mid][L,mid],[mid,R][mid,R]...原创 2018-03-11 19:14:16 · 500 阅读 · 1 评论 -
[最短路 杂题] LOJ#6075. 「2017 山东一轮集训 Day6」重建
刚开始以为可以二分…实际上是没有单峰性的。考虑每条边都加一个整数,那么肯定是使 ss 到 tt 的路劲经过的点变少。用DP算出经过 ii 个点到达 jj 的最短路,用 gi,jg_{i,j} 表示,以及只经过 ii 个关键点到达 jj 的最短路,用 fi,jf_{i,j}表示。如果经过 ii 个点不能到 jj ,那么 fi,j=inff_{i,j}=\inf 或 gi,j=infg_{i,j}=\i原创 2017-10-12 14:45:41 · 810 阅读 · 0 评论 -
[杂题 SET维护DP] Codeforces 875E. Delivery Club
考虑二分答案只要能检验答案能不能小于 xx 就行了令 fi,jf_{i,j} 表示一个人在 ii 另一个人在 jj 是否可行那么 fi,j=or{fi−1,k | |ak−ai|≤x}f_{i,j}=\text{or}\{f_{i-1,k} ~|~ |a_k-a_i|\le x\} 这东西要set维护下就好了…#include <cstdio>#include <iostream>#includ原创 2017-10-18 07:35:04 · 488 阅读 · 0 评论 -
[LOJ#6159][美团 CodeM 初赛 Round A][暴力即正解]最长树链
枚举每一个质数,权值是这个质数的倍数的节点设为1,否则为0,那么最长长链的长度就是点权为1的点构成的最长的链。当然不用枚举所以质数,因为每个数最多有log个不同的质因数,所以只要把所有点权质因数分解,枚举出现的质数就可以了。枚举质数后dfs,复杂度是nlogn的,因为每个点有log个不同的质因数,也就是说最多枚举到log个质数要dfs这个节点,所以复杂度是对的#include <cstdio>#i原创 2017-07-06 00:47:18 · 882 阅读 · 0 评论 -
[AtCoder AGC005 D][容斥][DP] ~K Perm Counting
既然APIO讲到了,就补一发计数题题意是求有多少个n的排列,满足对于任意ii,|a[i]−i|≠k|a[i]-i|\neq k,kk是给定整数陈老师说的简单DP不会啊…只好求助Manchery另fif_i表示恰好有ii个xx满足|a[x]−x|=k|a[x]-x|=k,答案就是∑ni=0fi(n−i)!(−1)i\sum_{i=0}^n f_i(n-i)!(-1)^i——摘自官方题解 官方也没给出原创 2017-05-14 08:37:39 · 1198 阅读 · 0 评论 -
[AtCoder AGC002 F][DP]Leftmost Ball
观察发现每个白球后面至少有一种颜色出现k-1次(就是只出现在这个白球后面),知道这个性质后可以从后往前DP把每次放一种颜色的球分成两次,一次放k-1个这种颜色的球,一次放1个白球,这样需要放2*n次fi,j,kf_{i,j,k}表示放了ii次,放了jj种颜色,当前可以放kk个白球,这样转移要n^3 可以省去i这一维。 放一个白球 fj,k→fj,k−1f_{j,k}\rightarrow f_{原创 2017-05-14 11:10:17 · 1805 阅读 · 0 评论 -
[Codeforces773E] [线段树] [找规律] Blog Post Rating
题意大概是 有一个博客,初始赞数为0,每个人会浏览这篇博客,如果这个人期望的赞数大于这边博客的赞数,他就会赞这篇博客,如果小于这篇博客,就踩一下(博客赞数-1),相同就不操作。询问对于每个i,1~i的人按照一个顺序浏览,求一种顺序使得博客最后的赞数最大,输出这个最大的赞数。先瞎猜一下,这1~i个人肯定是按照期望的赞数升序访问最优。 然后写个暴力交一下,发现T了,说明这个结论是对的那么只要维护一原创 2017-05-19 06:45:50 · 1190 阅读 · 0 评论 -
[构造][杂题]Helvetic Coding Contest 2017. H Fake News && CODE FESTIVAL 2016 Grand Final . G FESTIVAL
%%%Manchery#include <cstdio>#include <iostream>#include <algorithm>#include <string>#include <cstring>using namespace std;typedef long long ll;ll c[710],f[710];inline ll C(int x,int y){ long do原创 2017-05-30 20:01:22 · 641 阅读 · 0 评论 -
[Codeforces][后缀自动机]Helvetic Coding Contest 2017 . I Fake News (hard)
一看是字符串题,就想一想怎么在后缀自动机上搞有一个跟BZOJ3238 差异差不多的思路,建出原串反串的后缀自动机,那么每个子串的lcp就是对应节点的lca,那么lcp出现次数就是这个节点的right集合,拷了拷之前的代码,改一改就过了……#include <cstdio>#include <iostream>#include <cstring>#include <string>#define原创 2017-05-30 21:21:56 · 684 阅读 · 0 评论 -
[Codeforces799F] [哈希] Beautiful fountains rows
%%%Manchery给每个区间随机一个权值,这样每个位置被哪些区间覆盖奇数次就可以用区间权值的xor值表示,假设为x,一个区间被哪些区间覆盖也可以用xor值表示,假设为y 那么满足x=y的区间就是符合条件的区间前缀和搞一搞,map记一记就好啦#include <cstdio>#include <iostream>#include <algorithm>#include <vector>#原创 2017-05-19 19:47:08 · 1369 阅读 · 0 评论 -
[二分][杂题] Codeforces Round #424 .A Office Keys
第一次打vp… 第一题就做了挺久的,听gjghfd大佬说要打匈牙利,有点慌可以二分时间t,然后每个人找最左边的在t时间内能捡到且到达终点的钥匙,看是否有方案#include <cstdio>#include <iostream>#include <algorithm>#include <vector>#include <map>#include <set>#include <cmath原创 2017-07-16 17:06:56 · 341 阅读 · 0 评论 -
[分块][数学][瞎搞]Codeforces Round #424 .C Bamboo Partition
刚开始的做法是对的…然而越做头越昏,竟然用错误的例子把自己叉掉… 还好最后半个小时清醒了先列出式子要求最大的d满足 ∑i=1nd−((ai−1)%d+1)≤k\sum_{i=1}^n d-((a_i-1)\%d +1)\leq k 其中ai要先减一再取模是为了防止ai是d的倍数的情况,再推一推n×d−∑i=1nai−⌊ai−1d⌋×d≤kn\times d-\sum_{i=1}^n a_i-\原创 2017-07-16 17:22:33 · 825 阅读 · 0 评论 -
[杂题 简单复杂度分析]HDU5762. Teacher Bo
m很小啊……暴力就好了#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <cmath>using namespace std;const int N=200010;int t,n,m,x[N],y[N],vis[N];int main(){ scanf("%d",&t);原创 2017-09-25 21:23:33 · 259 阅读 · 0 评论 -
[杂题] hihocode1715. 树联通问题
考虑计算每条树边出现在哪些区间了,但是这样不太好统计,补集转换一下计算每条树边没有出现的区间的个数那么用set维护一下每棵子树中的点的标号,如果一个区间里的元素都不在这个set里或者都在这个set里,那么这个点到父亲的边都不在这个区间里启发式合并一下就可以了#include <cstdio>#include <iostream>#include <al...原创 2018-03-28 22:08:02 · 427 阅读 · 0 评论