- 博客(56)
- 收藏
- 关注
原创 Project Euler 302 [Strong Achilles Numbers]
题目链接Solution: 欧拉函数公式(pi表示n的每一个不同的质因子)。 首先普通的Achilles Number有的性质是: (1)所有质因子次幂数>=2。(2)所有质因子次幂数的gcd=1。 在此基础上考虑Strong Achilles Number的性质: 最大质因子的次幂>=3.因为如果最大质因子次幂=2,那么根据欧拉函数公式,φ(p^2)=p*(p-1),而此时没有其它数可以贡献p的因子,...
2020-06-01 21:49:16
335
原创 计蒜客2019年12 月 CSP-S2 模拟赛题解
A.课后练习题Solution: 注意到有,. 所以对于偶数k,满足 对于奇数k,满足 所以答案即为n-1/n+1的因子个数(除1外)Code:#include<bits/stdc++.h>#define rep(i,j,k) for(int i=j;i<=k;i++)usin...
2020-01-31 12:39:25
678
原创 动态树
题目链接Solution: 首先考虑对每个询问做一些合法的修改,对于一个询问(u,l,r),设now为当前询问时的总节点个数,若l>now,则询问答案为0;若r>now,则我们将r改成now也没有关系。接下来把每一个改好的询问拆成(u,1,r)和(u,1,l-1)两个,真实答案可由两个询问的答案相减得到。 接下来我们对每个询问(u,1,x)按x排...
2019-10-12 21:31:18
310
原创 「TJOI2015」线性代数
题目链接Solution: 抽象一下就是:同时选和可以获得的价值,而选了就要失去的价值,求最大获益。 考虑网络流,源点向每一个连一条流量为的边,接着向每一个和分别连一条流量为无限的边。最后每一个再向汇点连一条流量为的边。 我们考虑这样一张流量图的割意味着什么,对...
2019-09-15 11:08:27
264
原创 [SDOI2008]沙拉公主的困惑
题目链接Solution: 题意即求1~N!中与M!互质的数的个数。 由于,所以有,又因为有。 可推得 后面的纯阶乘预处理较简单,考虑前面括号中的预处理,可推出: 当i是质数时,有 当i是合数时,有 所以只需再预处理出逆元,就可以在O(n)的时间里预处理出需要的值,每个询问O(1)回...
2019-08-23 14:09:10
178
原创 [BJWC2010]严格次小生成树
题目链接Solution: 首先建出最小生成树,接着枚举每一条非树边,若加入它,则会在原图中生成一个环。为保证树的边权之和尽可能小且合法,我们考虑删去环中这样一条边:不与枚举的非树边边权一样的最大边权。然后用新的生成树的边权和去更新答案。(若没有则不更新)。 基于上述的算法,我们需要求出树上一条路径的最大值和严格次大值,设w[i][j]和w1[i][j]分别表示...
2019-08-23 13:45:46
215
原创 「HNOI2015」菜肴制作
题目链接Solution: 首先要注意的是,本题并不是找出字典序最小的拓扑序,但我们可以反过来考虑。 建出原图的反图,即对于每一对限制x,y,连接y->x。然后跑出反图上字典序最大的拓扑序,再将得到的拓扑序反过来即是所求。 这样做为什么是对的呢?抽象一下题目的条件,要求是对于每一个点,拓扑序中能在它后面的一定要在它之后,那么照这个贪...
2019-08-23 13:26:09
294
原创 【模板】可持久化数组
题目链接 模板题,无题解。Code:#include<bits/stdc++.h>#define rep(i,j,k) for(int i=j;i<=k;i++)using namespace std;template<typename T> void read(T &num){ char c=getchar();nu...
2019-05-14 19:29:42
175
原创 玩具
题目链接 翻译题意:一开始只有一个点,做n-1次操作:在已生成的点中等概率的挑一个。求最后生成的树的高的期望。 我们可以设F[i][j]表示由i个点组成高不超过j的树的概率,G[i][j]表示由i个点组成高不超过j的森林的概率,此时我们考虑:在任意一种组成森林的方案中,我们用一个点连向森林中每一棵树的根节点,就正好对应了一种由i+1个点组成高不超过j+1的树的方...
2019-05-14 19:27:07
254
原创 「十二省联考 2019」异或粽子
题目链接算法: 首先把前缀异或和统计出来,再将得到的每一个前缀异或和(包括pre[0]=0),塞进字典树中,接下来有一个贪心的思路:每当我拿着其中一个异或和的值时,我在字典树中尽可能找二进制高位与其对应的位不相同的异或和,这样两者异或运算后,所得值最大。 所以我们有了这样一个思路,对于每一个pre[i](1<=i<=n,忘说了pre[i]=co[...
2019-05-02 22:25:35
310
原创 [USACO06JAN] 冗余路径Redundant Paths
题目链接算法: 首先用Tarjan处理出low数组,然后考虑将每一个边双连通分量缩成一个点,根据其定义,这将形成一棵树,那我么只要在树上加最少的边使这棵树也变成一个边双联通分量,那么,这个最优策略就是:连接若干对叶子节点,如果还剩余一个节点,那我们将它和另外任意一个叶子节点相连即可。 也就是说,设nop为叶子节点数,那么所求答案即为(ans+1)/2。...
2019-05-02 22:03:34
246
原创 【POJ3904】Sky Code
题目链接Code:#include<iostream>#define rep(i,j,k) for(int i=j;i<=k;i++)using namespace std;template<typename T> void read(T &num){ char c=getchar();num=0;T f=1; while(c<'0'...
2019-03-24 15:20:31
270
原创 一道简单题
题目链接算法: 先暴力算出前几个n对应的答案(从n=0开始): 0 0 1 4 11 23 42 69 106 154 215 290 差分后得: 0 0 1 4 11 23 42 69 106 154 215 290 0 1 3 ...
2019-03-24 15:15:29
248
原创 [HNOI2012]矿场搭建
题目链接算法: 对于任何一个联通块,如果坍塌的是一个联通块中的割点的话,那么分割成的两个小联通块中必须保证各有一个出口。 我们考虑所有的割点将原图分割成若干个小联通块接下来分类讨论: (1)小块不与任何一个割点相连,那我们需要在这里设立两个出口,以保证任何一个出口坍塌后,还有一个出口可用。 (2)小块只与一个割点相连,那么我...
2019-03-24 15:06:47
391
原创 【APIO2015】Bali Sculptures
题目链接算法: 首先有这样一个贪心策略:将答案转成二进制考虑,从高位到低位枚举,对于当前这一位,除非它在最优策略下只可能是1,否则我把这位设成0,沿着这个思路我们分两类考虑: (1)对于1<=A<=B<=N的数据,我们将答案从高位向低位枚举,设f[i][j]表示将前i个数分成j组的方案中,是否存在可以使当前这一位为0的方案(0为没有,1...
2019-03-11 19:22:08
241
原创 [JLOI2011]飞行路线
题目链接算法: 我们设dis[i][j]表示从t到i的路,搭乘了j次飞机的最小费用,接着我们利用SPFA进行状态的转移即可, 答案即为max{dis[t][i](0<=i<=k)}。(考虑到k可能大于路径的条数。)Code:#include<bits/stdc++.h>#define rep(i,j,k) for(i...
2019-03-09 11:29:08
537
原创 【模板】Polya定理
题目链接模板题,无题解。Code:#include<bits/stdc++.h>#define rep(i,j,k) for(int i=j;i<=k;i++)#define mo 1000000007using namespace std;int len=0;int prime[100010];bool f[100010];inline void...
2019-03-09 09:22:04
556
原创 Roadblocks
题目链接算法: 题意求严格次短路,我们先跑SPFA,计算出从1和从N到其他各个点的最短路长度,接着枚举每一条边,可以O(1)算出N到1经过该边的最短路长度,我们统计出这2*R(双向道路)个长度中第二短的即可。Code:#include<iostream>#include<queue>#define rep(i,j,k) for(i...
2019-03-07 20:35:25
345
原创 暗的连锁
题目链接算法: 我们可以用树上差分的方法,求出一个非根节点有多少条路径到达他父亲(除了从那条直接连接的主要边),如果没有这样的路径,那么割掉这条主要边,然后去掉任意一个附加边即可,对答案贡献为m;如果有一条这样的路径,那么我们可以先去掉直接连接的边,然后断掉这一条通路即可,对答案贡献为1;如果这样的路径个数大于1,那么我们对于割这条主要边,是不存在任何一个方案满足答案的。直...
2019-03-05 19:39:44
401
原创 【JSOI冬令营2019 A组, Day1T2】小 F 的星术
题目链接Code:#include<bits/stdc++.h>#define rep(i,j,k) for(int i=j;i<=k;i++)#define mo 998244353using namespace std;template<typename T> void read(T &num){ char c=getchar();nu...
2019-02-14 14:57:51
472
原创 [SCOI2014]方伯伯的玉米田
题目链接算法: 为了保证DP的正确与方便,这里先提供一个结论:每次操作都一定要拔高第n棵玉米。 以下引用NS·YJD大佬的一篇博客的证明: 首先无论操作区间在哪里,如果区间两边存在玉米,那么这些玉米与区间内玉米拔高后的相对高度关系只有3种情况:1.原本区间内比它们高的玉米还是比它们高。2.原本区间内比它们矮的玉米不再比它们矮。3.原本...
2019-02-13 15:42:45
406
原创 【JSOI冬令营2019 A组, Day1T1】小 L 的占卜
题目链接Code:#include<bits/stdc++.h>#define rep(i,j,k) for(int i=j;i<=k;i++)#define rep2(i,j,k) for(int i=j;i>=k;i--)using namespace std;template<typename T> void read(T &nu...
2019-02-11 12:53:35
917
原创 「SHOI2015」超能粒子炮・改
题目链接算法: 我们设每一组n与k的数据的所求答案为,(聪明的人已经发现了秘密所在) 则,设模数p=2333. 根据卢卡斯定理,原式=, 且可以把它拆成 进一步化为 = 根据对CNLZP(n,k)的定义,原式= ...
2019-02-10 15:16:50
515
原创 【AHOI2009】中国象棋
题目链接算法: 由题意,每一行和每一列我们可以放至多两个炮,则我们设f[i][j][k]表示目前已放完前i行,在m列中有j列放了0个炮,有k列放了1个炮。然后我们分:不放炮、放一个炮{ 在j列中选一个,在k列中选一个 }和放两个炮{ 在j列中选两个,在k列中选两个,在j和k列中各选一个 },这几种情况转移状态即可。 (具体细节参考程序)Code:...
2019-02-09 14:07:22
236
原创 「网络流 24 题」最长递增子序列
题目链接算法: 对于第一问,设f[i]为以i这个位置为结尾的最长递增子序列的长度,一个O(n^2)的DP即可; 对于第二问,因为每个位置仅能选一次,我们可以把一个位置i拆成两个节点i1与i2,每一个i1各向对应的i2连一条无限流量的边,源点S向每一个f[i]=1的i的i1连一条流量为1的边,再由每一个f[i]=第一问答案的节点i的i2向汇点T连一条流...
2019-02-09 13:54:51
357
原创 【模板】普通平衡树
题目链接 Treap平衡树,模板题,无题解。Code:#include<bits/stdc++.h>#define rep(i,j,k) for(int i=j;i<=k;i++)using namespace std;template<typename T> void read(T &num){ char c=getcha...
2019-02-08 20:38:15
207
原创 【模板】网络最大流
题目链接 Dinic算法,模板题,无题解。Code:#include<bits/stdc++.h>#define rep(i,j,k) for(int i=j;i<=k;i++)#define inf INT_MAXusing namespace std;template<typename T> void read(T &n...
2019-02-08 20:32:38
195
原创 【BZOJ1040】[ZJOI2008]骑士
题目链接算法: 对于每一个骑士,我们由他痛恨的骑士向他自己连一条边,由此整个图组成了若干个联通块,而每个联通块正式一个基环树,则答案就是两条边只选一个点的权值之和的最大值,那么我们设f[i][0\1]表示i这个节点选\不选的最优战斗力,那么对于每一个联通块,我们可以找出环上的某一条边,暂时把它隔开,分两种情况,一种选左边那个骑士,另一种选右边那个骑士,分别在树上DP,然后...
2019-02-08 20:29:37
367
原创 Codeforces Round #535 (Div. 3) A-E1题解
比赛链接A. Two distinct points两条线段的四个端点中一定有两个来自不同线段的端点坐标不同,找出任意两个满足条件的即可。#include<bits/stdc++.h>#define rep(i,j,k) for(int i=j;i<=k;i++)using namespace std;template<typename T> vo...
2019-02-08 20:14:59
255
原创 【BZOJ 3306】树
良心的笔者直接给出了题面:Description给定一棵大小为 n 的有根点权树,支持以下操作: • 换根 • 修改点权 • 查询子树最小值 Input 第一行两个整数 n, Q ,分别表示树的大小和操作数。 接下来n行,每行两个整数f,v,第i+1行的两个数表示点i的父亲和点i的权。保证f < i。如 果f = 0,那么i为根。输入数据保证...
2019-01-23 13:29:05
353
原创 【LOJ10235】【BZOJ4403】序列统计
题目链接 解法: 首先,我们设表示满足条件的序列中,长度为i,最后一个数字为L+j-1的序列个数。 那我们就可以得到一下递推式: (其中对于每一个f[1][n]或者f[n][1]其值都为1), 近一步推到 . 且我们所要求的答案是 ....
2019-01-19 13:29:16
219
原创 【NOIP2018】提高组题解
Day 1:T1:铺设道路 贪心题,原数列可分解成若干个非递减序列(或要加上一个递减序列),处理出每个序列的最高值与最低之差的总和即可。#include<bits/stdc++.h>#define rep(i,j,k) for(int i=j;i<=k;i++)using namespace std;template<typename T>...
2019-01-17 20:59:06
1025
原创 【NOIP2016】愤怒的小鸟
题目链接补档博客,无题解Code:#include<bits/stdc++.h>#define rep(i,j,k) for(register int i=j;i<=k;i++)#define double long doubleusing namespace std;template<typename T> void chkmin(T &...
2018-11-05 20:25:32
749
原创 【NOIP2014】寻找道路
题目链接算法: 先反向建图,从终点开始BFS,找出所有与其连通的点 其次,考虑到图不一定联通,我们特殊处理那些压根就不会与终点在一个联通块里的点 最后,愉快单源最短路即可Code:#include<bits/stdc++.h>#define rep(i,j,k) for(int i=j;i<=k;i++)...
2018-10-30 19:30:34
309
原创 [SDOI2009]HH的项链
题目链接补档博客 木有题解(这次正经点了。。。)Code:#include<bits/stdc++.h>#define rep(i,j,k) for(register int i=j;i<=k;i++)using namespace std;template<typename T> void chkmin(T &x,T y){x=x<...
2018-10-29 19:37:26
175
原创 【模板】最长公共子序列
题目链接算法又被鸽鸽鸽了。。。Code:#include<bits/stdc++.h>#define rep(i,j,k) for(int i=j;i<=k;i++)#define rep2(i,j,k) for(int i=j;i>=k;i--)using namespace std;template<typename T> void c...
2018-10-29 19:35:25
162
原创 【NOIP2015】子串
题目链接算法: 鸽鸽鸽了。。。。。 Code:#include<bits/stdc++.h>#define rep(i,j,k) for(int i=j;i<=k;i++)#define mo 1000000007using namespace std;template<typename T> void chkmo(T ...
2018-10-26 22:40:51
366
1
原创 【NOIP2016】蚯蚓
题面链接算法: 我们将蚯蚓长度分成三个数组存储,原先就有、切掉后长度为⌊px⌋、 切掉后长度为x −⌊px⌋。 在记录下每一个蚯蚓出现时间(原先就有的都是0时出现),和每一个数组的第一个和最后一只蚯蚓所在坐标。 在完成m次骚操作后,我们用一个vector将所有还活着的蚯蚓整合起来,排个序,愉快输出即可。Code:#i...
2018-10-25 19:20:05
469
原创 [HAOI2006]均分数据
题目链接 经过了14次的提交,终于正大光明的把本题A掉了。。。。算法: 主要思想是模拟退火,具体操作就是,我们对于每一个生成的排列,用连续分组DP处理此情况下的最小均方差。 dp[i][j]表示前i个数中分j组的最小均方差,dp[i][j]=min(dp[i][j],dp[k-1][j-1]+prefix[i]-prefix[j...
2018-10-24 21:37:09
279
原创 【模板】缩点
题目链接算法:模板题,仅作为补档博客。Code:#include<bits/stdc++.h>#define rep(i,j,k) for(int i=j;i<=k;i++)using namespace std;template<typename T> void read(T &x){scanf("%d",&x);}templa...
2018-10-23 19:21:12
166
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人