- 博客(302)
- 资源 (2)
- 收藏
- 关注
原创 LibreOJ 2955. 「NOIP2018」保卫王国【动态DP】
LibreOJ 2955. 「NOIP2018」保卫王国果然是一道裸题,动态DP,必须选就设权值为0,不选设权值为∞\infty∞就可以了。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int MA...
2019-10-24 14:22:54
348
原创 【Codeforces】1221D. Make The Fence Great Again【DP】
我们会发现一个规律,每个栅栏的高度最多增加2,所以直接上DP。#include<cstdio>#include<cstring>#include<algorithm>const int MAXN=3e5+5;int T,n,a[MAXN],b[MAXN];long long F[MAXN][3];#include<cctype>int ...
2019-09-26 19:51:55
348
原创 BZOJ2753: [SCOI2012]滑雪与时间胶囊【最小生成树】
2753: [SCOI2012]滑雪与时间胶囊转化模型,就是最小树形图,有向图最小生成树。看数据范围,好像不能用朱刘算法。我们发现这是一个DAG,那么我们可以先按照高度排序,然后按照权值排序,这样就能保证是一棵树了。#include<queue>#include<cstdio>#include<algorithm>using namespace s...
2019-09-14 16:00:40
286
原创 BZOJ2395: [Balkan 2011]Timeismoney【最小乘积生成树】
2395: [Balkan 2011]Timeismoney这篇博客写的不错https://www.cnblogs.com/autsky-jadek/p/3959446.html每次求出距离最远的点然后分治就可以了。#include<cstdio>#include<algorithm>const int MAXN=205,MAXE=10005;int n,m,f...
2019-09-13 19:43:46
220
原创 BZOJ4398: 福慧双修【二进制分组+最短路】
4398: 福慧双修考虑笨蛋,我们可以枚举出边,然后Dij就可以了。显然在菊花图的情况下要T我们考虑分组,对于连1的边,一半强制为出边,一半强制为入边,跑DIJ,然后交换,再做一遍。然后继续分治下去,这样会发现我们所以状态都能做到,复杂度为O(nlog2n)O(n log^2n)O(nlog2n)#include<cstdio>#include<cstring>...
2019-09-09 21:32:01
290
原创 BZOJ2961: 共点圆【二进制分组|CDQ+凸包+三分】
2961: 共点圆根据圆方程(x−x0)2+(y−y0)2≤(x02+y02)2(x-x_0)^2+(y-y_0)^2 \le (x_0^2+y_0^2)^2(x−x0)2+(y−y0)2≤(x02+y02)2解得x02+y02≤2xx0+2yy0x_0^2+y_0^2\le 2xx_0+2yy_0x02+y02≤2xx0+2yy0右边项可以看成(2x,x0)⋅(2y,y0)...
2019-09-09 19:55:32
211
原创 BZOJ4140: 共点圆加强版【二进制分组+凸包+三分】
4140: 共点圆加强版根据圆方程(x−x0)2+(y−y0)2≤(x02+y02)2(x-x_0)^2+(y-y_0)^2 \le (x_0^2+y_0^2)^2(x−x0)2+(y−y0)2≤(x02+y02)2解得x02+y02≤2xx0+2yy0x_0^2+y_0^2\le 2xx_0+2yy_0x02+y02≤2xx0+2yy0右边项可以看成(2x,x0)⋅(2y,...
2019-08-31 22:03:44
211
原创 BZOJ2428: [HAOI2006]均分数据【模拟退火】
2428: [HAOI2006]均分数据模拟退火就可以了。选择aia_iai应该放在的位置,然后退火判断一下。#include<ctime>#include<cmath>#include<cstdio>#include<cstdlib>#include<algorithm>const double _T=0.1,EXP_...
2019-08-29 20:38:30
174
原创 BZOJ2527: [Poi2011]Meteors【整体二分+树状数组】
2527: [Poi2011]Meteors好坑的一题,二分答案,check成功的国家放左边,否则放右边,然后继续分治下去,树状数组维护就可以了。然后就炸longlong了,中间记得check成功就退出。#include<cstdio>#include<vector>using namespace std;const int MAXN=3e5+5;int n,...
2019-08-29 12:18:37
202
原创 BZOJ1249: SGU277 HERO 动态凸包【凸包+set】
1249: SGU277 HERO 动态凸包我们只需要用一个set维护顺序。#include<set>#include<ctime>#include<cmath>#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;ty...
2019-08-28 16:16:15
285
原创 BZOJ2739: 最远点【凸包+决策单调性】
2739: 最远点拆环成链,因为题目给出的是凸包,所以有决策单调性,然后分治就可以了。#include<cmath>#include<cstdio>const int MAXN=500005;typedef long long LL;int T,n,Ans[MAXN];struct point{long long x,y;}p[MAXN];#include&...
2019-08-27 18:38:52
300
原创 BZOJ2829: 信用卡凸包【凸包】
2829: 信用卡凸包我们不需要考虑圆弧,最后加上一个圆的周长就可以了。然后维护凸包就可以了。以下是维护了上下凸壳求解的。#include<cmath>#include<cstdio>#include<algorithm>const int MAXN=10005;const double pi=acos(-1.0);int n,m,Topsa,...
2019-08-27 12:11:46
179
原创 BZOJ4372: 烁烁的游戏【动态点分治+线段树】
4372: 烁烁的游戏动态点分治,其实就是将点分树建出来,然后在树上做一些动态操作(不改变树的形态)。对于每一个点,我们用线段树存下这个点的子树中所有原树上距离的权值。然后对于修改直接暴力跳父亲,容斥去重就可以了。询问也同样道理。复杂度O(nlog2n)O(nlog^2n)O(nlog2n)#include<cmath>#include<cstdio>#incl...
2019-08-26 19:27:45
202
原创 BZOJ3611: [Heoi2014]大工程【虚树+树形DP】
3611: [Heoi2014]大工程首先我们肯定会想到DP求这个答案,但是发现点数实在太多,然后建虚树就可以了。#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN=1e6+5;typ...
2019-08-25 16:59:06
222
原创 BZOJ3809: Gty的二逼妹子序列【分块】
3809: Gty的二逼妹子序列很容易想到,莫队,然后用树状数组维护,发现复杂度是O(nnlogn)O(n \sqrt{n} logn)O(nnlogn)的。我们考虑如何平衡复杂度用分块代替树状数组,这样询问复杂度O(n)O(\sqrt{n})O(n),修改复杂度O(1)O(1)O(1),总复杂度O(qn)O(q\sqrt{n})O(qn)#include<cmath>...
2019-08-24 21:05:04
165
原创 【Codeforces】848C. Goodbye Souvenir【CDQ】
【Codeforces】848C. Goodbye Souvenir将头尾之差看成各位差。设pre[x]pre[x]pre[x]为与xxx同色的上一个位置。那么答案就是∑i=lr[l≤pre[i]]∗(i−pre[i])\sum_{i=l}^{r} [l \le pre[i]]*(i-pre[i])∑i=lr[l≤pre[i]]∗(i−pre[i])也就是∑i=1r[l≤pre[i]]∗...
2019-08-24 18:44:56
600
原创 BZOJ2125: 最短路【圆方树+仙人掌】
2125: 最短路仙人掌上求最短路。将仙人掌转化为圆方树,圆点与方点连的边长为圆点到方点父节点的最短路,Tarjan可以求出。考虑前缀和+LCA,如果LCA为圆点,直接算就可以了。如果为方点,分类讨论是否经过返祖边,就可以了。#include<cmath>#include<cstdio>#include<vector>using namespac...
2019-08-16 20:26:13
229
原创 BZOJ1023: [SHOI2008]cactus仙人掌图【仙人掌+Tarjan+DP】
1023: [SHOI2008]cactus仙人掌图先考虑树上,那么就是一个DP就可以了考虑环上,我们如果两个点之间距离大于环长一半,那么我们就不可以走这条路径,所以可以先剖环成链,然后单调队列就可以了。#include<vector>#include<cstdio>#include<algorithm>using namespace std;co...
2019-08-16 08:19:00
182
原创 LibreOJ2305. 「NOI2017」游戏【2-SAT】
2305. 「NOI2017」游戏先不考虑x的地图。这样一看,好像需要3-SAT,其实不需要,我们将每幅图拆成两个点就可以了。但是x就有点恶心了,还好个数不多,所以直接DFS就可以了。数组开小了导致T飞QAQ#include<queue>#include<cstdio>#include<cstring>#include<algorithm&...
2019-08-15 21:32:46
209
原创 BZOJ4316: 小C的独立集【Tarjan+DP+仙人掌】
4316: 小C的独立集如果这是一棵树,那么很好做,设F[i][0/1]F[i][0/1]F[i][0/1]就可以了。我们考虑每一个环,环的最末端会对最前端有影响。最末端是0,无所谓,最末端为1,那么最顶端只能是0。那我们先处理环外的点,然后考虑一个环,强制最末端为0/1。为1就强制为−∞- \infty−∞ ,分别DP就可以了。#include<cstdio>#incl...
2019-08-15 18:09:32
280
原创 BZOJ4553: [Tjoi2016&Heoi2016]序列【CDQ+DP】
4553: [Tjoi2016&Heoi2016]序列我们可以得出递推式dp[i]=dp[j]+1,j<i,a[j]<=L[i],R[j]<=a[i]dp[i]=dp[j]+1,j<i,a[j]<=L[i],R[j]<=a[i]dp[i]=dp[j]+1,j<i,a[j]<=L[i],R[j]...
2019-07-27 11:27:16
145
原创 BZOJ2154: Crash的数字表格【莫比乌斯反演】
2154: Crash的数字表格∑i=1n∑j=1mlcm(i,j)\sum_{i=1}^{n}\sum_{j=1}^{m} lcm(i,j)∑i=1n∑j=1mlcm(i,j)∑i=1n∑j=1mi∗j(i,j)\sum_{i=1}^{n}\sum_{j=1}^{m} \frac{i*j}{(i,j)}∑i=1n∑j=1m(i,j)i∗j设d=(i,j)F(x,y)=∑i∈[1...
2019-07-26 11:17:39
159
原创 Project Euler 512 Sums of totients of powers【欧拉函数】
Sums of totients of powersf(n)=(∑i=1nϕ(ni))mod(n+1)f(n)=(\sum_{i=1}^{n} \phi(n^i)) mod(n+1)f(n)=(∑i=1nϕ(ni))mod(n+1)g(n)=∑i=1nf(i)g(n)=\sum_{i=1}^{n} f(i)g(n)=∑i=1nf(i)因为ϕ(ni)=ϕ(n)∗ni−1\phi(n^i)=...
2019-07-22 10:19:01
170
原创 BZOJ1101: [POI2007]Zap【数论分块+莫比乌斯函数】
1101: [POI2007]Zap原式为∑i=1A∑j=1B[(i,j)==D]\sum_{i=1}^{A} \sum_{j=1}^{B} [(i,j)==D]∑i=1A∑j=1B[(i,j)==D]基本操作,除掉D∑i=1AD∑j=1BD[(i,j)==1]\sum_{i=1}^{\frac{A}{D}} \sum_{j=1}^{\frac{B}{D}} [(i,j)==1]∑i=1...
2019-07-21 13:01:46
190
原创 【Codeforces】1041F. Ray in the tube
F. Ray in the tube【题目大意】一束光从A开始沿B方向射出,经过镜面反射,能经过的点的数量。【题解】首先间距没有用。我们只要知道反射长度就可以了。我们发现一束光经过奇数次反射会反射到另一面镜子,也可以经过一次反射,所以我们之间除掉所有奇数因子,所以最后反射长度为2x2^x2x就可以包含所有答案。只需要枚举xxx ,然后计算就可以了。ps:有一个天大的坑,只有两个对称...
2019-07-15 19:17:30
190
原创 BZOJ1652: [Usaco2006 Feb]Treats for the Cows
1652: [Usaco2006 Feb]Treats for the Cows水题不说#include<cstdio>#include<algorithm>using namespace std;int n,Ans,a[2005],F[2005][2005];int main(){ scanf("%d",&n); for(int i=1;i<...
2019-05-22 21:02:18
148
原创 BZOJ5397: circular【倍增】
5397: circular去掉覆盖的点,求出最优的下一个线段(a[j].L>=a[i].R,min(a[j].R)),直接二分,check用倍增。#include<cmath>#include<cstdio>#include<algorithm>using namespace std;const int MAXN=100005;int m,...
2019-04-22 20:15:53
304
4
原创 BZOJ4444: [Scoi2015]国旗计划【倍增】
4444: [Scoi2015]国旗计划我们知道最后答案肯定是∈\in∈[任意答案Ans-1,Ans,Ans+1]。我们先可以求出Fa[i]表示一次最远能跳到的编号。然后直接倍增就可以了。#include<cstdio>#include<algorithm>using namespace std;const int MAXN=200005;int n,L,T...
2019-04-22 08:32:54
223
原创 BZOJ1190: [HNOI2007]梦幻岛宝珠【01背包】
1190: [HNOI2007]梦幻岛宝珠我们对b分层,对于每一层用a背包,然后考虑如何在层之间转移。F[i]表示还剩余i空间的最优解,略有不同,然后就直接从上一层j转移到j*2+(W这一位是否为1)。#include<cstdio>#include<cstring> #include<algorithm>using namespace std;i...
2019-04-21 21:02:31
285
原创 BZOJ3155: Preprefix sum【线段树】
3155: Preprefix sumemmm,没什么好说的,线段树区间加。#include<cstdio>using namespace std;const int MAXN=100005;int n,m,a[MAXN];long long Tre[MAXN<<2],Add[MAXN<<2];#include<cctype>int r...
2019-04-21 19:00:16
181
原创 BZOJ3229: [Sdoi2008]石子合并【GarsiaWachs】
3229: [Sdoi2008]石子合并GarsiaWachs算法。a[i-1]<=a[i+1]时,合并a[i-1]和a[i]将合并后的数插入大于他的数的后面。#include<cstdio>#include<algorithm>using namespace std;const int MAXN=40005;int n,m,Ans,a[MAXN];...
2019-04-21 16:17:07
250
原创 BZOJ4498: 魔法的碰撞【DP】
4498: 魔法的碰撞我们先考虑全部紧凑的情况,也就是没有多余的空格的情况(将DiD_iDi–,先不考虑魔法师占的空间)。这里用了一个很巧妙的方法,多加一维,表示预留的空位。加入A会有三种情况(E表示空位):A,AE或EA,EAE。对于第一种,表示A两边都有魔法师。对于第二种,表示A的一边有,一边没有。对于第三种,表示A的两边都是空的。如果我们按照从大到小的顺序来,就会发现只需要考...
2019-04-19 21:01:24
206
原创 BZOJ2987: Earthquake【类欧几里得】
2987: Earthquake将式子移项得到y≤−Ax+CBy\le \frac{-Ax+C}{B}y≤B−Ax+C答案就是∑x=0n[−Ax+CB+1]\sum_{x=0}^{n} [\frac{-Ax+C}{B}+1]∑x=0n[B−Ax+C+1]设f(n,A,B,C)=∑x=0n[−Ax+CB+1]f(n,A,B,C)=\sum_{x=0}^{n} [\frac{-Ax+C}{...
2019-04-19 18:16:25
194
原创 BZOJ4817: [Sdoi2017]树点涂色【LCT+线段树+LCA】
4817: [Sdoi2017]树点涂色我们发现1操作就是LCT的Access操作,对于每个1操作,在Access的同时构造Val数组,我们会发现当前实儿子所在的子树Val++,Access后的实儿子Val–。所以可以用DFS序+线段树进行维护。2操作就是Val[x]+Val[y]-2*Val[fa]+13操作直接维护区间最大值就可以了。#include<cmath>#inc...
2019-04-17 20:24:00
242
原创 BZOJ5391: [Lydsy1806月赛]最长公共子序列
5391: [Lydsy1806月赛]最长公共子序列直接找字符出现最少的组成T就可以了。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,Ans,hsh[30];bool t;char ch[1000005];int main(){ scan...
2019-04-08 19:19:26
197
原创 BZOJ5385: [Lydsy1806月赛]字符串大师II【找规律】
5385: [Lydsy1806月赛]字符串大师II首先找一下规律就可以得出结论。#include<cstdio>using namespace std;int T;int main(){ scanf("%d",&T); for(int i=1;i<=T;i++){ int k;long long n;scanf("%d%lld",&k,&...
2019-04-02 11:13:18
212
原创 BZOJ5387: [Lydsy1806月赛]质数拆分【乱搞】
5387: [Lydsy1806月赛]质数拆分一开始想写个笨蛋,先枚举a+b,然后方案数相乘,结果就过了。。。#include<cstdio>using namespace std;const int MAXN=150000;int n,f[MAXN+5],p[MAXN+5];long long Ans;bool vis[MAXN+5];bool make_p(){ vi...
2019-04-01 21:09:42
161
原创 BZOJ5390: [Lydsy1806月赛]糖果商店【背包】
5390: [Lydsy1806月赛]糖果商店F[i][j]F[i][j]F[i][j]表示体积为iii,最顶上的糖果的种类为jjj。F[i][0]F[i][0]F[i][0]表示体积为iii,最顶上的糖果盒盖上了。所有可以得到转移F[i][j]=max(F[i−wj][j]+vj)F[i][j]=max(F[i-w_j][j]+v_j)F[i][j]=max(F[i−wj][j]+vj...
2019-04-01 20:45:10
153
原创 ZJOI2019游记——一场颓废之旅
ZJOI2019游记Day0又是颁奖大会,但是,显然身为蒟蒻的我只能在台下看看,浪费了半个小时QAQ。镇海中学给人的感觉不是很大,可能是建筑多吧。但是,说实话,饭菜是这几次比赛中次好吃的(还是衢州二中食堂好吃)。Day1上午镇海的双省队dalaoLYX将课,emmm《具体数学》,一点不想说话。下午kcz的杂题选讲,还是头昏眼花。不过感觉比上午好。然后就是试机,虽然镇海电脑显示器很**...
2019-03-27 19:19:27
733
原创 BZOJ1296: [SCOI2009]粉刷匠【DP】
1296: [SCOI2009]粉刷匠这道SB题因为我题目看错,变成了一道毒瘤题,然后到现在才做。对于每一行DP,然后对于所有列DP就可以了。#include<cstdio>#include<algorithm>using namespace std;int n,m,T,g[55][2505],f[55][55][2505],Sum[2][55][55];ch...
2019-03-23 11:30:54
185
COCI 2017/2018 Round #1, October 14th, 2017 翻译试卷 标程及题解
2018-01-14
COCI 2017/2018 Round #1, October 14th, 2017 翻译试卷
2017-12-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人