题面 题解 考场上蠢了--这么简单的东西都想不到-- 首先排序加去重. 先来考虑一下,形如 \[a_1x_1+a_2x_2+...a_nx_n=w,a_1<a_2<...<a_n,x_i\geq 0\] 的方程该怎么判断是否有解 首先,把两边都放到模\(a_1\)的意义下,就是 \[a_2x_2+...a_nx_n\equiv w\pmod{a_1}\] 然后是一个神仙的转化,我们设有\(a_1\)个点,分别代表\(0,1,...,a_1-1\),对于每一个点\(u\),都连出去\(n-…
题面 题解 首先,点变黑的过程是不可逆的,黑化了就再也洗不白了 其次,对于\(v\)的祖先\(rt\),\(rt\)能用来更新答案当且仅当\(sz_{rt}>sz_{x}\),其中\(sz\)表示子树中黑点的个数,\(x\)表示\(rt\)走到\(v\)的路径上的第二个节点 每一次染黑一个新的点\(u\)之后,我们要让它所有祖先的\(sz+1\),那么我们可以考虑树链剖分+线段树 再回过头来康康树链剖分的过程啊--我们跳着跳着跳到了\(u\),那么对于\([top[u],u]\)之间的点的\(s…
题面 题解 调了好几个小时啊--话说我考试的时候脑子里到底在想啥-- 首先,这个数列肯定是有循环节的,而且循环节的长度\(T\)不会超过\(D\) 那么就可以把数列分成三份,\(L+S+R\),其中\(L,R\)为左右两边剩下的,\(S\)为中间的循环数列.对于\(L\),算出\(pre_i\)表示最后一个数小于等于\(i\)的最长的子序列的长度,对于\(R\)算出\(suf_i\)表示最开始的一个数大于等于\(i\)的最长的子序列的长度.然后用中间出现过的每一个数以及\(pre\)和\(suf…
题目 分析 首先,将这些节点按dfs序建一棵线段树. 因为按dfs序,所以在同一子树上的节点会放在线段树相邻的位置. 发现,对于一个位置x,它的权值只会对以x为根的子树造成影响. 当修改x时,用w[x]更新子树x的最大值, 接着从x向上跳,用w[fa[x]]更新子树fa[x]-子树x最大值, 因为当用w[fa[x]]来更新过子树fa[x]-子树x时,再用它更新就会没有意义,所以打个标记,不再更新.这样就最多只会更新n次. #include <cmath> #include <iostre…
题目 描述 题目大意 给你两个排列AAA和BBB,每次随即选三个数进行轮换操作,问mmm次操作内使AAA变成BBB的概率. 思考历程 首先随便搞一下,就变成了AAA中每个数回归自己原位. 一眼望去,感觉nnn很小-- 最简单的想法是将每个情况都储存起来,然后搞出它们之间的转移情况. 然后发现这些状态是存不下的. 于是我就开始想有没有哪些状态是等价的. 然后我发现对于每个数字,可以简单地归为是否回归原位的两种情况.这样状态倒小了,可是又能怎么转移呢?mmm这么大,肯定打矩阵乘法.这么大的状态还是不…
题目描述 YLOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,YLOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要满足以下条件: 1.田地的形状是边平行于坐标轴的长方形: 2.左下角和右上角各有一个稻草人: 3.田地的内部(不包括边界)没有稻草人. 给出每个稻草人的坐标,请你求出有多少遵从启示的田地的个数 数据范围 1<=N<=2*10^5 0<=Xi<=10^9(1<=i<=N) 0<=…
noip模拟12 solutions 这次考试靠的还是比较好的,但是还是有不好的地方, 为啥嘞??因为我觉得我排列组合好像白学了诶,文化课都忘记了 正难则反!!!!!!!! 害没关系啦,一共拿到了\(120pts\),其实距离我的理想分数还差那么\(100pts\) 具体是这样的,第一题AC,第二题10,第三题10 下次要把知识都回忆一下,比如这次用到的欧拉定理,差一点就忘记了 noip模拟13!!!200分!! · · · T1 简单的区间 哈哈哈这个题是我这几次考试中最成功的一道了,所以我一…
从左到右, 从右到左分别dp一次, 然后就可以回答询问了. ---------------------------------------------------------- #include<bits/stdc++.h>   using namespace std;   const int V = 1000; const int maxn = 1009;   int L[maxn][maxn], R[maxn][maxn]; int w[maxn], v[maxn], c[maxn], N…
题面 100 注意到ban的只会是一个子树,所以我们把原树转化为dfs序列. 然后题目就转化为,询问一段ban的区间,之后的背包问题. 比赛的时候,我想到这里,于是就开始想区间合并,于是搞了线段树合并,遂无果,爆零. 由于ban的是一段区间,所以肯定是将前缀和后缀合并. 我们预处理出前缀背包,和后缀背包. 然后合并两个背包就可以了. 具体的合并,Two pointers. 还要卡常. Code #include<iostream> #include<cstdio> #include…
T1 interval 亏得昨天晚上改掉了T3并且理解了单调栈,今天一扫这题目就知道要用啥了. 先预处理出以a[i]为最大值的最大左右区间.然后再将a[i]取%!!!是的,要不然会影响单调栈的使用... 注意一下,这个题的前缀和与a[i]数组都要取%优化,类似<入阵曲>. 可以知道,一个合法的区间应满足. 然后就是昨天T3的类似启发式优化,找到距离较小的区间. 然后枚举那个区间里的每一个位置,都可以算出一个数(以下拿枚举左区间举例): 等价右面的柿子就是我们枚举要求的.我们相当于求出一个sum…
也算是最近几次比较水的一次吧. 考试时看T1像个打表找规律的题,扔了,去看T2,带修莫队??不会,完戏.看了T3,我决定还是去看T1. 看着T1,我突然发现T2是个大水题:主席树就行,不带修,修改时只需修改一棵主席树上的权值.不管了,先切了它.十分钟码完,40行,两个样例都是一边过...突然心里特别虚,于是我决定打个对拍,一拍就错(不要迷信样例,包括大的!). 从头到结束半个小时T2就搞定了,然后我去推T1的式子,通过打表我们可以发现:一只兔子与其爸爸的差必然为斐波那契数列中的一项,那一项就是比…
题目 题目大意 给你一棵树,在树上的某一些节点上面有人,要用最小的步数和,使得这些人靠在一起.所谓靠在一起,即是任意两个人之间的路径上没有空的节点(也就是连在一起). N≤200N \leq 200N≤200 思考历程 看了题目好久,没有什么思路. 想到DP,但不知道怎么用DP做. 然后去翻翻题解,然后一脸懵逼,再去问问几位大佬. LYL.ZHJ.GMH这三个大爷都说这题很水,是联赛难度. 不屑于给我讲. 天哪,这就是人与人之间的差距!太恐怖了. 然后我只能依靠我自己硬是刚了四天,对,是四天.…
菜 今天总体来说 菜爆了,打了 \(3\) 个暴力,没有一个是正解,并且每一个分数都低得要命... 主要还是太菜了... 第一题开题发现和昨天 \(T3\) 一样,然而因为还没学可持久化数据结构就咕掉了... 昨天要是学一学就好了. 然而彭师傅还想出了 \(STL\) 大法. 非常好用. 但是好多人用的还是主席树来维护. 似乎码量也不长... 但是我只能弱弱地说一声不会.... 菜就是了... 所以我今天要去学一学这玩意,以防明天再考. T1: \(T1\) 又是一个一眼只能 \(\mathca…
题解 \(by\;zj\varphi\) 一道 \(\rm dp\) 题. 现将所有种类从小到大排序,然后判断,若最小的已经大于了 \(\rm l\),那么直接就是一个裸的完全背包,因为选的总数量有限制. 设 \(\rm f_{i,j,k}\) 为选了前 \(\rm i\) 种物品,总数为 \(\rm j\),容量为 \(\rm k\),是否可行,转移很简单. 对于另一种情况,能构造出的最小差距就是 \(v_1\),那么只要记录一下模 \(\rm v_1\) 的值即可. 设 \(\rm f_{i…
首先发现双方可以有一个默契,不管谁刻意,都可以把串变为诸如\(...101010101...\)的形式 所以先手要赢的话就是要在上面的基础之上加一个字符使其变为要求的子串 那么就是要求的子串中相邻两个位置不等的对数不能大于\(1\) //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i) #define fd(i,a,b) for(R int…
今天过的还真是心态炸裂.. 还是莫提了吧,今日之果一定对应着今日之因. 考试前非常心虚,莫名其妙地产生了一种紧张感(????)然后果然就在T1卡题了... T1想到了减去前一项的菲波数,但是没想到交替抬高就是正解啊!(为什么不敢去刚啊!!为什么不算算复杂度然后愉快的切掉它啊!!) 于是一堆玄学数据分治,还分治错了...考后把没用的一删,一会就改出来了.... T2就更快乐啦,看见题目就怕了,想起了分块专题那道现在都没A掉的题.. 虽然题面完全不同,但是不知道为什么就是没信心想了,仍然是怂b一样地…
话说这次考试T1和T2是真的水,然而T1CE,T2TLE,T3CE 这不就是在侮辱我的智商啊!之前本机编译都是c++,以后要用c++11. 这次的T1就是一个大型找规律,我的规律都找出来了,但是竟然用规律暴力建树?woc,我当时是不是还没睡醒? 看来我真是一个2b.关键就是建树就建树吧,我还挂了一个hashmap,然后关键字冲撞,连暴力的分都没有! 其实规律但是在考试的时候就想出来了但是我当时打了一个fibonaqi的前缀和瞅了一眼,然后发现很小,然后我就觉得这题就考一个规律,然后暴力建树(纯属…
题目 现在你有N个数,分别为A1,A2,-,AN,现在有M组询问需要你回答.每个询问将会给你一个L和R(L<=R),保证Max{Ai}-Min{Ai}<=R-L,你需要找出并输出最小的K(1<=K<=N,不存在输出-1)满足以下两个条件: ①能够在原来的N个数中选出不重复(下标不重复)的K个数,使得这K个数的和在区间[L,R]内. ②能够在原来的N个数中选出不重复(下标不重复)的K个数,使得这K个数的和不在区间[L,R]内. 分析 首先将A从小到大排个序,那么前k个数的和就是最小的…
题目 小A有一个环,环上有n个正整数.他有特殊的能力,能将环切成k段,每段包含一个或者多个数字.对于一个切分方案,小A将以如下方式计算优美程度: 首先对于每一段,求出他们的数字和.然后对于每段的和,求出他们的最大公约数,即为优美程度. 他想通过合理地使用他的特殊能力,使得切分方案的优美程度最大. 分析 首先知道,每个可能的优美程度一定是\(\sum a_i(=m)\)的约数, 因为m的约数最多只有4000多个, 所以,我们枚举m的约数i, 将a所有数mod i 发现假设某个余数为j(i>j),…
前言 本人在此题有一种不是题解的方法,但无法证明也找不到反例. 如果各位大神有反例或证明请发至 邮箱:qq1350742779@163.com Description Alice和Bob有一棵树(无根.无向),在第i个点上有ai个巧克力.首先,两人个选择一个起点(不同的),获得点上的巧克力:接着两人轮流操作(Alice先),操作的定义是:在树上找一个两人都没选过的点并获得点上的巧克力,并且这个点要与自己上一次选的点相邻.当有一人无法操作 时,另一个人可以继续操作,直到不能操作为止.因为Alice…
题目 幻魔皇拉比艾尔很喜欢斐波那契树,他想找到神奇的节点对. 所谓斐波那契树,根是一个白色节点,每个白色节点都有一个黑色节点儿子,而每个黑色节点则有一个白色和一个黑色节点儿子.神奇的节点对则是指白色节点对. 请问对于深度为n的斐波那契树,其中距离为i的神奇节点对有多少个?拉比艾尔需要你对于1<=i<=2n的所有i都求出答案. 分析 我们找一找每层黑点和白点的规律 |层数|白点数|黑点数| |:-|:---|:----| |1|1|0| |2|0|1| |3|1|1| |4|1|2| |5|2|…
题目 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对.请问这样的数对共有多少呢? 分析 设\(gcd(a,b)=d,a'd=a,b'd=b\) 那么\(a'+b'|a'b'd\) 因为\(gcd(a',b')=1\) 所以\(a'+b'|d\). 又因为\((a'+b')d<=n\) 则\(a'+b'=\sqrt n\) 枚举\(a'+b'=i\) \(d就有\dfrac{n}{i^2}种情况\) 因为\(gcd…
题目 分析 对于当前枚举串 \(now\),从前往后扫.若扫到 \(i\),\(s_i\) 是 ; \(s_j\) 的子串 \((i < j < now)\),我们就可以跳过不匹配 \(i\).因为如果\(s_i\)是\(s_j\) 的子串,那么\(s_j\)如果是\(s_now\)的子串,其实就不需要比较\(s_i\)和\(s_now\).若不存在这样的 \(j\),匹配即可,若 \(s_i\)是 \(snow\) 的子串,\(i\) 之后就可以跳过了 (打个标记,或者用双向链表):否则 \…
题目 题目大意 给你一个数列,让你找到一个最长的连续子序列,满足在添加了至多KKK个数之后,能够变成一条公差为DDD的等差数列. 思考历程 一眼看上去似乎是一道神题-- 没有怎么花时间思考,毕竟时间都砸到T1和T2上了. 正解 仔细推一下就会发现这种等差数列[j,i][j,i][j,i]有三个简单的条件: 所有数模ddd的余数相同 没有重复的数(d=0d=0d=0的时候除外) max(j,i)−min(j,i)d+1≤i−j+1+k\frac{max(j,i)-min(j,i)}{d}+1\le…
题目 描述 题目大意 给你一个数列,接下来有许多个操作,使得区间[l1,r1][l_1,r_1][l1​,r1​]和[l2,r2][l_2,r_2][l2​,r2​]对应的位置染上同样的颜色(使得它们相同). 最后输出9∗10颜色数−19*10^{颜色数-1}9∗10颜色数−1 思考历程 首先看到这题就自然而然地往数据结构方面想(废话!) 接着先想平衡树.既然要将这两个区间变成一样的,那就将它们各自放到子树中,然后对于两个子树的根打上标记. 接下来问题就出现了,怎么维护?怎么下传?并且由于它可能…
题目 描述 题目大意 给你一堆aia_iai​和bib_ibi​(方便起见用的变量和上面不一样),让你搞出一个xxx(相当于题目中的ba\frac{b}{a}ab​,随便推推就能知道), 使得max⁡ai+bi+aix+bix\max a_i+b_i+a_ix+\frac{b_i}{x}maxai​+bi​+ai​x+xbi​​最小. 思考历程 第一眼看下去,最大最小放一起,显然就是一个二分啊! 然后开始想--想不出来,推了个式子,感觉似乎要三分套三分套三分-- 更气的是这题还不好打暴力. 所以…
题目 描述 题目大意 有111到2n2n2n牌,一开始分别给两个人,每人nnn张. 轮流出牌,给出对手出牌的顺序,若自己的牌更大,就记一分. 在中间的某个时刻可以改变游戏规则. 问最大的分数. 思考历程 显然,一定是把大的放分界点左边,把小的放右边. 那可以枚举分界点,两边分别计算就可以了.时间复杂度为O(n2)O(n^2)O(n2),朴素的暴力算法. 接下来我就想有没有什么数据结构可以在枚举分界点的时候维护左右两边的答案. 想不出-- 换种简单的思路. 当分界点从左向右移动的时候,左边的答案会…
题目 描述 题目大意 有一个010101序列,可以改变状态,每个状态改变都有固定的代价. 接下来有些人想要将一些位置改成特定的状态,如果按照他们要求做了就可以得到一些钱, 否则得不到,有时还要陪钱. 问最后的钱最多是多少. 思考历程 看到这题的第一眼就觉得是一道神题. 只能想到最恐怖的暴力算法-- 这题肯定不可以DP,那么就想想贪心和网络流. 觉得这题做法一定是贪心,因为有10410^4104这么大,肯定不是网络流啊! 到最后还是没有想出来. 正解 正解早就被我否定了!(真香) 这题的正解就是网…
题目 描述 题目大意 在一棵树上,每个节点都有些石子. 每次将mmm颗石子往上移,移到根节点就不能移了. 双方轮流操作,问先手声还是后手胜. 有三种操作: 1. 询问以某个节点为根的答案. 2. 改变某个点的石子数. 3. 在树中加入一个点. 思考历程 这是一道博弈题. 意味着我连暴力都不会打. 所以放弃治疗. 正解 首先,偶数层的石子是没有意义的. 如果移动了偶数层的石子,另一方就可以模仿你的操作,继续移动这颗石子. 所以我们只需要考虑奇数层的石子,每次移动111到mmm颗石子,移动到上一层之…
题目 描述 题目大意很明确了,所以不说-- 思考历程 一看见这题,咦,这就是传说中的动态图吗? 普通的动态图是维护连通性,这题是维护它是否是二分图,换言之就是维护它是否有奇环. 好像很复杂的样子. 想用LCT搞一搞,但是搞了很久终究搞不出来. 如果这道题全部都是加入就好了,但对于删除,好像要影响很多东西-- 想了很久终将放弃. 正解 现在主要的正解大体分为两种: 第一种方法是使用线段树. 对于每一条边,预处理除它们的加入和删除时间. 可以把它们存在的时间看作时间轴上的一段区间. 然后就有个很强大…