自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 CF1335F Robots on a Grid 思维+拓扑处理环。

5点多开始看题,10点半AC,除去1h吃饭。。其余都在调。。不过这次是自己硬刚出来的,没看题解,爽的不谈。这题思路还是比较好想的,主要是细节特别多。显然,所有环的大小和,即可以放的机器人最大数量。现在问题就在黑块上。我们观察这个图。是类似细胞的形状,专业点就是基环树。分支上的点进入环上会与一个点重叠(即,进入环时与这个点相遇)。我们对环上一个点进行逆向图BFS,对深...

2020-04-30 22:58:00 239

原创 ICPC North Central NA Contest 2018 G. Tima goes to Xentopia 最短路变形

一道很好的最短路d[i][j][k]到i点,经过j条红边,k条蓝边,花费的最少时间是多少。我们发现边权都是正数,即:不存在负环。且花费时间满足dijkstra的条件。即:当前最小值是最终最小值。所以放心的用dij跑就行。复杂度O(n*k1*k2*logm)一个小优化:题目保证k1*k2<=800 我们可以让较大的在前面开800,较小的在后面开100.这样节约8倍的空间。...

2020-04-29 21:39:17 267

原创 Codeforces Round #637 (Div. 2) - Thanks, Ivan Belonogov! E—Nastya and Unexpected Guest 01bfs dp

dp[i][j],到达i时绿灯已经亮了j秒,经过的最少轮数(一轮表示绿灯和红灯各亮一遍)显然每一步可以向左或向右走,写一个01bfs+dp转移即可。复杂度O(gm)#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o...

2020-04-29 13:20:13 209

原创 算法竞赛——进阶指南——acwing165. 小猫爬山 搜索

一道300多行搜索数独调不出来,做一道简单的搜索缓一下。。#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o<<1|1)#define pb push_backconst double PI= acos(-...

2020-04-28 22:50:20 198

原创 1343E - Weights Distributing 最短路+贪心

我们通过观察发现:a->b->c。为了让路径最短只会有2种情况a->b->ca->x->b->x->c即b到c时会与a有重复。显然,有重复边时一定是更优的,因为这样就能让边权小的多算一遍,从而少算一遍边权大的。所以我们直接从b 开始dfs,使得访问的点始终保持到a与到c距离之差与最初一样。否则就会出现a,或c要多...

2020-04-28 21:02:44 139

原创 算法竞赛——进阶指南——acwing166. 数独 搜索

经典搜索题。搜索加剪枝。每次从能填数最少的空处开始填。如果填了某个数,导致有空位不能填,则剪去用二进制优化一下常数#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o<<1|1)#define ...

2020-04-28 13:08:11 228

原创 ICPC Greater New York Region 2019 I. RationalBase 进制转化

把10进制转化为(p/q)进制。每一位均为整数。每一步让n对(p/q)取模,保证余数为正数即可。即找到小于n的数中,能整除(p/q)且最大的数。直接n/p*q 的结果就是。 余数是n%p倒着放位数即可。#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (...

2020-04-27 21:35:31 301

原创 Educational Codeforces Round 86 (Rated for Div. 2) E. Placing Rooks 第二类卡特林数&容斥

比赛时先溜了。。感觉剩1h应该能搞一搞 ,至少不至于挂机。首先只有n个棋子。要满足所有空行可被攻击。必须每行一个棋子,或者每列一个棋子。除了k==0的情况。其他情况每行一个棋子与每列一个棋子不重复。即只需要算每行一个棋子的情况最后乘2即可。我们观察发现:每行一个棋子时,k没多一,列数就会减一。即:一定是n-k列。(因为每一个列消失,会且仅会多一条边)所以问题就转...

2020-04-27 19:38:24 306

原创 第二类斯特林数 (递推式+通式)

2020-04-27 18:42:14 3322

原创 ICPC Greater New York Region 2019 J. Unicycles 递推分析计数

很好的一道递推计数题。比赛时我以为是MST计数。。想多了首先分析只有一个环的情况有哪些?1:中间点不在换上,其余所有点构成一个环,有n个方案,中间点连n个外圈点。2:中间点在换上,大小固定时,环的方案也固定(最多n个环)。发现方案数一定是n*S(n),(把其中一种环旋转得到n种)。考虑2种环固定时的情况。我们发现每个点只有3种连法,连中间,和顺时针连边,逆时针连边。...

2020-04-26 20:47:05 437 2

原创 算法竞赛——进阶指南——acwing 363. B城 无向图割点+组合计数

(x,y)(y,x)都要计算。去掉某个点后:如果y不是割点:、 则ans[y]+=2*(n-1)//此时只有2个联通块如果y是割点: 则假设有t个儿子会被分离(即low[x]>=dfn[y]),会形成t+2个联通块。因为还会有y的儿子xx low[xx]<dfn[y],即删去y,不会使得xx的子树分离。所以对y来说结果是:再tarjan...

2020-04-26 11:25:15 172

原创 P3388 【模板】割点(割顶) tarjan求无向图割点

#include <bits/stdc++.h>using namespace std;typedef long long ll;const int M = 1e5+7;int head[M],cnt;void init(){cnt=0,memset(head,0,sizeof(head));}struct EDGE{int to,nxt,val;}ee[M*2];v...

2020-04-23 21:37:31 138

原创 tarjan 求无向图桥边

#include <bits/stdc++.h>using namespace std;typedef long long ll;const int M = 1e5+7;int head[M],cnt;void init(){cnt=0,memset(head,0,sizeof(head));}struct EDGE{int to,nxt,val;}ee[M*2];v...

2020-04-23 21:19:50 220

原创 ICPC North America Qualifier Contest 2015 E. Cutting Brownies 不公平组合游戏,分析DP。(不能SG)

由于是不公平组合游戏,所以不能用SG函数。但我们可以分析然后DP。考虑怎么切是最优解。对于H先手,切一刀后,会让(x,y)变成 (k,y)(x-k,y),即让y可以切的地方乘2.所以每次尽量选择y小的切,且每次尽量选x/2且,(这样y切的时候能让H可切的地方尽量变多)对于H先手,切一刀后,变成了(x/2,y),(x/2+(x&1),y).如果这两个局面都是V...

2020-04-23 12:48:44 350 5

原创 P1073 最优贸易 分层图+spfa

哈哈就是上一题。不过这次我们用分层图的做法。分层图是个好东西。可惜存在负权,不能用dij(这次是求最长路,负权相当于正权)由于一定是先买 再卖。所以第一层与第二层连边表示买第一层的水晶球。二三层连边,表示卖第二层的水晶球。然后跑spfa即可。#include <bits/stdc++.h>using namespace std;typedef long...

2020-04-22 20:13:43 136

原创 算法竞赛——进阶指南——acwing341. 最优贸易 有后效性,只能用spfa

明显是dmxi-dmni由于存在环,取路径最小值不能保证当前最小就是最终最小,所以不能用dij,有后效性也不能用dp只能用spfa,无特殊数据是个线性算法。显然这题没卡。。#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define r...

2020-04-22 19:33:56 234

原创 ICPC North America Qualifier Contest 2015 K. UnDetected 经典并查集维护连通性

由于起点是y轴,所以只要矩形左边和矩形右边联通,那么就无法到达终点。暴力连边即可,判连通性即可#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o<<1|1)#define pb push_backcon...

2020-04-21 11:53:44 255

原创 ICPC North America Qualifier Contest 2015 D. Circuit Counting 比较水的DP

dp[l][i][j],执行到l个点,执行到i,j 的方案数。滚动数组一下即可#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o<<1|1)#define pb push_backconst doub...

2020-04-20 20:59:14 158

原创 acwing 340. 通信线路 分层图解法

先学先用。不过这题能过估计是没满数据。不然空间要爆。k层图空间为 :O k*m#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int> pii;const int M = 1e6+7;int head[M],cnt;struct...

2020-04-20 19:46:38 243

原创 P4568 [JLOI2011]飞行路线 分层图 +dij单源最短路

分层图是个十分有用的东西。用于处理图上k个边权特殊化的情况。比如可以让k条边边权为0或除以二。而且一般k很小。我们可以把图分成k+1层。先把原图复制k份。然后连接两两图之间用特殊边权连接。比如这一题,,我们让所有存在的边,两两层之间边权为0,代表执行一次边权为0的操作。因为最多k层,所以最多执行k次操作,注意:这里连边要连单向边,即执行操作后不能回去。建完图后dij...

2020-04-20 19:32:19 137

原创 算法竞赛——进阶指南——acwing 340. 通信线路 二分+最短路

01 bfs最短路+二分最小花费,我们可以二分花费,转化成当前花费是否可行(显然满足单调性,即可以二分)把大于当前花费的边视为边权1,即需要免费,其他视为0,看从1到n的最短路是否小于等于k即可。#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<...

2020-04-20 17:23:13 163

原创 算法竞赛——进阶指南——acwing175. 电路维修 bfs 最短路 经典

经典01bfs,用deque维护。注意几个细节:每个格子会产生4条边 ,最多250000*4数组要开够。虽然每个点会进很多次,但我们让0的边权放前面,1的边权放后面,每次从双端队列前面取点。则访问带每个点时,一定是最短路径,即每个点至多执行一次。复杂度是On级别的。#include <bits/stdc++.h>using namespace std;typede...

2020-04-20 17:00:14 216

原创 算法竞赛——进阶指南——acwing 219. 剪纸游戏 SG函数 稍微变形

这题1*1是胜利。SG有向图游戏要求不可取时必败。我们观察可知:2,2 2,3 3,2 必败。每次切一刀变成2个子游戏,异或起来即可。然后就是求SG函数经典套路,mex一下。#include <cstdio>#include<iostream>#include<algorithm>#include<cstring>...

2020-04-19 21:53:25 242

原创 ICPC North America Qualifier Contest 2015 按通过率从 J开始

J. Torn To Pieces思路很简单,主要是怎么实现:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o<<1|1)#define pb push_backconst double PI= ac...

2020-04-19 20:28:05 194

原创 POJ - 1740 A New Stone Game 博弈,构造必胜条件

必胜条件是,石子数量对称,即出现的数量都是偶数次。否则一定可以通过一次移动变成对称态。证明略。#include <cstdio>#include<cstring>using namespace std;typedef long long ll;const int M = 1e5+7;int a[110];int main(){ int n; ...

2020-04-19 20:26:19 123

原创 HDU1848 Fibonacci again and again 有向图游戏SG函数+NIM博弈 入门题

把游戏中每个局面当成有向图的一个节点。每个节点给他个SG函数值。(vj是i指向的点,即i局面可达的局面)对于最终状态SG(e)==0即最后行动的人输,(比如取石子,没有石子的状态就是SG(e))如果SG(i)不等于0,说明i可达的状态中有SG(vj)等于0的情况,则我们这一手直接取到这个状态,那么必胜。否则,说明走向的状态全是必胜态,则当前局面必败。多个游戏用异或和为...

2020-04-18 19:32:00 172

原创 Dropping tests POJ - 2976 0/1分数规划

0/1分数规划:给定n个a,n个b。求一组解xi(1<=i<=n,xi==0或1)使下式最大化:我们不妨假设存在一个解使得上式等于L。那么:考虑这个式子如果这个式子大于0,那么就有:L比实际值要小(可能L就是解)如果这个式子小于0,有:L比实际值要大(此时L不可能是解)综上 二分即可。这一题不过是加了个只选n-k个的条件而已#inc...

2020-04-18 18:43:23 158

原创 算法竞赛——进阶指南——acwing 215. 破译密码 容斥+莫比乌斯函数+分块 // 莫比乌斯反演

还不会莫比乌斯反演,只会容斥+分块搞(好像是一个思路)求x<=a,y<=b, 且gcd(x,y)==k的个数。直接求gcd等于某个值我们一般转化为互质。即:x<=a/k, y<=b/k ,且gcd(x,y)==1的个数。我们定义D(a,b,k)表示 x<=a,y<=b,且k|gcd(x,y),的x,y的个数。即x,y都是k的倍数。则D(...

2020-04-17 20:27:11 293

原创 Codeforces Round #633 (Div. 2) E - Perfect Triples 打表找规律+数学归纳

这种题如果没有好的性质,或者必然满足什么条件可以推。就先打表看看前几项。发现所有的a都是在 这个范围内(而且是连续上升的)于是我们猜想 b,c在这个范围内。(刚好填满)那么我们不妨假设1 -(-1)这个范围内的数都被abc填满了,下面开始从开始填先看满足条件:a<b<c a^b=c由于与四进制有关系,我们对a,b,c每2位进行处理。只有00,01,10,11...

2020-04-17 18:31:23 166

原创 利用埃筛 求1-n中的莫比乌斯函数值

#include <bits/stdc++.h>using namespace std;typedef long long ll;const int M = 1e5+7;int miu[M],vs[M];void pre(){ int n=1e5; for(int i=1;i<=n;i++)miu[i]=1,vs[i]=0; for(int i=2;i<...

2020-04-17 12:13:57 241

原创 【vijos】1629 八 容斥原理 + 集合运算法则

8为a-b中整除8的数的个数,Ai表示a-b中整除ai数的个数。=整除lcm(a1,a2)的数的个数。但求2个数的并集不好求。所以我们用容斥,把结果转化成只有交集表示的形式。=把右边的Ai并集形式用容斥处理成交集。再利用集合的结合律,把8给交到充斥表达式里。就变成了:然后就只剩下简单的二进制处理了...

2020-04-17 11:41:00 164

原创 算法竞赛——进阶指南——acwing214. Devu和鲜花 容斥原理

多重集组合数一般形式。用二进制处理更加方便#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o<<1|1)#define pb push_backconst double PI= acos(-1.0);...

2020-04-17 11:02:10 195

原创 #10238. 「一本通 6.6 练习 9」网格

利用卡特兰数变形。同样的方法:沿y=x-1这条直线对称过去求得结果为:C(n+m,n)-C(n+m,n+1);C++大数大概2-3s 慢了个常数,知道方法就行#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o << 1)#define rs ...

2020-04-16 18:45:15 589

原创 P1641 [SCOI2010]生成字符串 卡特兰数应用

这类题的比较容易理解的解法:一个点从(0,0)开始,每次横坐标加一。纵坐标加一或减一。这一题就是加一n次,减一m次。且不会经过y=-1这条直线。到(n-m)我们求出经过y=-1这条直线的方案数,再用总方案做差就是答案。假设这条折线经过y=-1这条直线,让这条折线从左往右第一个经过y=-1之前的部分。沿y=-1这条直线轴对称过去。那么这条折线表示的路径就是从(0,-2)到...

2020-04-16 17:05:57 174

原创 Codeforces Round #635 (Div. 2) E - Kaavi and Magic Spell 区间DP 巧妙转化

考虑dp[i][j]:T串 i-j 区间匹配,的方案数。由于序列是不断增长,最终序列只要前缀包含T即可,所以我们把T串变成T***(后面加*知道与S串相同长度)那结果就是.我们枚举S串,一位一位更新区间DP。由于每一位S会让目标串长度加一,所以枚举的Si,中的i就是区间DP的长度。所以二维区间DP就可以维护更新了。考虑更新:我们知道S串1 - i-1,构成T串的...

2020-04-16 16:43:20 237

原创 Catalan数列

以下问题都与卡特兰数有关1:n个左括号和n个右括号组成的合法括号序列的数列为Cat n2: 1,2,3,……,n .经过一个栈,形成的合法出栈序列的数量为Cat n.3:n个节点构成的不同二叉树的数量为Cat n。4:在平面直角坐标系上,每一步只能向上或向右走,从(0,0)走到(n,n)并且两个端点外不接触直线y=x的路线数量为2Cat n-1....

2020-04-14 21:44:43 238

原创 算法竞赛——进阶指南——acwing213. 古代猪文 lucas定理+欧拉定理+中国剩余定理,巧妙的性质!

一道很考验数论基本功的题目,知识杂糅。首先指数取模一般用欧拉定理降维(利用指数循环节)而这必须满足q与mod互质,由于mod是质数,当q==mod时,结果为0,否则q与mod互质则可用欧拉定理的推论得到:然后只需处理质数部分即可。大数的组合数用lucas定理求。但由于求多次,且模数太大,阶乘的复杂度过高,不可直接求。我们分解999911659发现:其有4个质因子...

2020-04-14 19:37:59 260 1

原创 算法竞赛——进阶指南——acwing212. 计数交换

#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o<<1|1)#define pb push_backconst double PI= acos(-1.0);const int M = 1e5+7;/...

2020-04-14 17:09:44 189

原创 Codeforces Round #633 (Div. 2)A-D

VP:Penalty 158 1.07过DA:确定是否竖着放菱形,是,则后面都是固定,横着多放一个。推一下可知 n输出n。B:中位数 后前后前跳着放即可#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o&lt...

2020-04-13 18:23:54 315

原创 算法竞赛——进阶指南——acwing211. 计算系数

组合数高中知识搞搞就行#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o<<1|1)#define pb push_backconst double PI= acos(-1.0);const int M ...

2020-04-13 12:00:35 161

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除