![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
好题
悭吝韶华
在学习Unity和图形学.
展开
-
[寒假刷题训练1]Codeforces Round #699 (Div. 2)E. Sorting Books
题意:有n本顺序排放的书,第i本书的颜色是aia_iai.你的目标是让所有颜色相同的书排在一起.你每次可以把一本书放到最右边,问最少需要操作多少次.原创 2021-03-06 00:05:31 · 120 阅读 · 0 评论 -
C2. Balanced Removals (Harder)(分治+思维)
传送门代码我直接模仿了tourist的…学习一下复述一遍tourist的思路吧.首先就是不考虑三维,我们只考虑一维X,显然按x坐标排序后,从左到右贪心连线即可,最多剩下一个点.现在考略二维(X,Y),那么我们要可以先把Y相同的那些点一起按一维的方式处理,显然对于每个Y,最多只会剩下一个点.现在我们得到了一堆Y不同的点,按Y排序后就又变成了一维,再按照一维的处理方式即可.三维同理,即策略是先解决低维度,再解决比它高一维的问题,依次维度上升的分治思想.#include<bits/stdc++原创 2020-08-01 21:12:58 · 171 阅读 · 0 评论 -
CF888-G. Xor-MST-(分治+01字典树,最小异或生成树)
在01字典树上建点。然后考虑怎么使得生成树最小。从高位开始,按当前为1/0将所有数划分为两个集合(两者都不为空的情况下)。这两个集合是分散的,所以我们需要一条边连接它们。暴力枚举选取。但是这样会遇到一个问题,即如何维护一段连续的区间,使得这个区间中的所有元素都在这个集合内。我们只要对a数组排序,然后依次插入字典树即可。所以我们对于树上的每个节点,记录对应的数组区间序号。L数组和R数组表明当前节点对应数组的最小序号和最大序号。分治暴搜即可。#include<bits/stdc++.h原创 2020-07-28 23:35:10 · 159 阅读 · 0 评论 -
牛客多校第五场-K-Bag(思维+实现)
传送门只要维护一个切割点数组cut[i],表明从1~i的切割是有效的,且可与后半部分拼接。维护好cut后只要从后往前再扫一遍即可。#include<bits/stdc++.h>using namespace std;#define ll long long#define MAXN 2005005int n,k;int a[MAXN];int cut[MAXN];unordered_map<int,int>mp;int main(){ int t;原创 2020-07-27 23:57:58 · 104 阅读 · 0 评论 -
杭电多校第一场Leading Robots(数形结合思想)
机器人传送门嗯…第一次完全靠自己写了一波斜率维护。。。原理不是很难,但是第一次写还是有点憨批。首先你要处理出一个点集,这些点满足这样的条件:任意两点得ppp不相同,并且取每个位置得最大aaa.只有这些点才有可能对答案产生贡献。然后还有一个注意点:就是如果对于一个位置p,如果有最大值a,那么这点显然产生不了贡献,但还是要做为运算过程中的一个点。根据等式ait2/2+pi=ajt2/2+pja_it^2/2+p_i=a_jt^2/2+p_jait2/2+pi=ajt2/2+pj任意两点之间原创 2020-07-27 10:43:18 · 124 阅读 · 0 评论 -
EOJ月赛2020.7-E. 因数串(构造)
传送门比赛时候想到按质因子个数分层,优先往层数多的状态转移,赛后发现不行。赛后问了下wwg,他是构造写的。首先因数个数为∏i=1n(1+ki)\prod_{i=1}^{n}{(1+k_i)}∏i=1n(1+ki)其实可以从最后一个因子使用的次数来考虑,先增后减,如此循环(这样可以使得每次转移符合条件)然后再考虑倒数第二位,第三位。。。然后因为要让最大值出现在最后面,要按照每种质因子的个数分奇偶排序,使得最后一次一定是递增的。AC代码#include <bits/stdc++.h&g原创 2020-07-18 22:01:19 · 162 阅读 · 0 评论 -
Codeforces Global Round 9E. Inversion SwapSort(构造+分解问题)⭐⭐⭐⭐
传送门首先你可以把所有a[i]离散化,得到相应的值(如果a中有x-1个不同的元素比这个ai小,离散值就为x)这题的构造方法即为:从最后一个位置开始,依次往前解决所有的逆序对。我们先考虑所有ai都不相同的简单清苦:显然最后一个位置的值在经过调整后必须为最大的离散值n,如果它当前值为x,那么显然这个位置有n−xn-xn−x个逆序对。我们只需要把最后一个位置和它所有逆序对对应的另一个位置上的所有元素重新排列,使得最后一个位置上的值为n(逆序对对应的其他位置上一定有n),其他位置上的值依然符合原来的大小关系原创 2020-07-06 12:07:55 · 139 阅读 · 0 评论 -
Codeforces Global Round 9 D. Replace by MEX(构造)⭐⭐⭐
传送门又是构造瞎搞题,太难啦。是这样的,首先考虑一个点:就是每次的mex是可以算出来的,然后这时候你可以任选你可以任选一个点把值设置为mex,如果你之后不再动这个点,那么再也不会出现这个mex的值了。那是不是就比较清晰了。我们不妨构造一个a[i]=i−1a[i]=i-1a[i]=i−1的序列。每次如果mex的值为n,就任选一个值不符合的待更新的位置,设成n,那么下次的mex肯定不为n,因为mex不会出现a中目前已有的值。这样最多经过不超过2*n次替换就可以构造出序列了~#include<原创 2020-07-05 19:41:15 · 122 阅读 · 0 评论 -
Codeforces Global Round 9C. Element Extermination(思维)⭐⭐⭐
%%%%%%%%%传送门考虑第一个点a1a_1a1,显然要找到一个aj>a1aj>a1aj>a1,否则不成立。依次找到后面的每个满足条件的j,用这些aja_jaj去消除掉他前面的小于a1a_1a1的元素,这样剩下的都是大于a1的元素了。就可全部去掉了。显然最后一个元素ana_nan要大于a1,满足这个条件即可。#include<bits/stdc++.h>using namespace std;int n,m;#define MAXN 4000000#de原创 2020-07-05 14:59:33 · 114 阅读 · 0 评论 -
[典藏题记001]D. Frog Jumping(数论+图论+思维+暴力)
题目传送门写这题脑细胞快死完了,看了大佬的题解又研究了半天。简单讲一下我的做法:这题可以小范围暴力,大范围找出规律。设h(i)为要到达点i的最小x设h(i)为要到达点i的最小x设h(i)为要到达点i的最小x。那么ans=ans=ans=∑i=0n(n−h(i)+1)(如果点i可以到达)\sum\limits_{i=0}^{n}{(n-h(i)+1)}(如果点i可以到达)i=0∑n(n−h(i)+1)(如果点i可以到达)然后有一个性质就是:如果点i可达,那么一定满足:i∣gcd(a,b)i|g原创 2020-07-03 21:04:52 · 255 阅读 · 0 评论 -
Codeforces Round #654 (Div. 2)E. Asterism(思维)⭐⭐⭐⭐
这道题让你求方案数f(x)f(x)f(x)不能被p整除的x.又是一道思维盲点题:这道题的答案是一个连续的区间。首先最小满足条件的x=l很好求,最大的满足条件的也求出的话,答案就出来了。证明:首先将a从小到大排序,可以发现对于回合i,有(x+i−1)(x+i-1)(x+i−1)个candy,该回合可以使得f(x)乘上(cnt−i+1),cnt为a中小于等于candyi的元素个数(cnt-i+1),cnt为a中小于等于candy_i的元素个数(cnt−i+1),cnt为a中小于等于candyi的元素个数原创 2020-07-02 11:02:08 · 157 阅读 · 0 评论 -
Codeforces Round #649 (Div. 2)C. Ehab and Prefix MEXs(好题+思维)⭐⭐
就是从题目给定的条件,易得肯定是存在答案的。首先你都设置所有的元素都为不可到达的n+1.每次访问时添加当前元素到可用区(一个堆栈内)出现一个数比前一个数大的时候,从堆栈中取数,从大到小放入[a[i-1],a[i]-1]即可#include<bits/stdc++.h>using namespace std;#define ll long long#define MAXN 500005#define rep(n) for(int i=1;i<=n;i++)#define r原创 2020-06-23 21:47:28 · 109 阅读 · 0 评论 -
Educational Codeforces Round 89 (Rated for Div. 2)E. Two Arrays详细题解(思维Hard)
这题实在是强,实现没有用到任何算法,但凭借强大的思维要求提高了难度。题意很简单,就是在数组a中找出m个划分,每个划分的最小值对应b数组。首先其实我们可以把这个任务分成m个阶段。第i个阶段的任务就是从当前可选区间内截取后缀部分,使其最小值为b[i].(当然第一个阶段不能截取,只能全保留)那么第i个阶段去掉第i+1个阶段后剩下的区间,就是第i个划分。最后一个阶段选取的区间就是它自己的划分,它不会再被截取了。然后,其实你可以注意到,其实每次划分前选用的区间并不影响这次划分的方案数。因为划分前选用的原创 2020-06-14 11:10:09 · 179 阅读 · 0 评论