自定义博客皮肤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)
  • 收藏
  • 关注

原创 锁,自下到上的总结

所谓的**锁**,其实本质上就是一块**存储了标记位的内存空间**。**当这个空间被赋值为1的时候表示加锁了,赋值为0的时候表示解锁了**。多个线程抢一个锁,就是抢着要把这块内存空间赋值为1。那我们要做的就是**保证一次只有一个线程可以抢到锁**。在单核环境中,我们只需要在加锁之前,关闭中断,加锁完成后,打开中断。就可以保证加锁过程的原子性,只有一个线程可以抢到锁。在多核环境中,内存空间是共享的,每个核上各跑一个线程。此时我们要保证一次只有一个线程抢到锁,就需要硬件层面的某种支持。...

2022-07-16 16:33:57 872 1

原创 「一本通 6.7 练习 3」取石子题解【含思维过程】

分析胜负的关键分析,胜负的关键在于总共可以进行的操作次数,将其记为k。k由两部分构成,k=k1+k2,将当前的总石子数记作A,当前堆数记作D。则k1=A, k2=D-1。可以发现,一般情况下,拿走一个石子和合并两个堆都只会让k减1,因为拿走石子是让k1减少1,而合并两个堆是让k2减少1。在这种情况下胜负态是无法改变的。即k为奇数时先手就是必胜,k为偶数时先手就是必败。因为每次k都只能固定地减少1,所以胜负态已经被锁定。但是这里有一个特殊的点,就是如果取走一个仅有1个石子的堆,会让k1和k2同时减少1

2020-11-02 09:59:00 394

原创 如何使用Python实现易班自动报送

总之一个字,懒。

2020-04-05 23:27:43 5844 5

原创 NOIP2017提高组 小凯的疑惑 结论证明

这题的结论是a∗b−a−ba*b-a-ba∗b−a−b,但是我之前一直不理解为什么,于是现在来证明(玩)一下。条件:gcd(a,b)=1gcd(a,b)=1gcd(a,b)=1先用比较通俗的语言讲解一下我的思路。不妨假设a<ba<ba<b我们固定着先不用a,然后只用b。那就可以跳到b,2b,3b⋅⋅⋅b,2b,3b···b,2b,3b⋅⋅⋅这些位置上。(也就是可以支付这...

2019-11-12 11:59:00 364

原创 CF Round #598(Div.3) F【含详细的思维过程】

我的思维···

2019-11-11 13:34:09 324

原创 退役了。

回到家,匆匆吃过了晚饭,不自觉地坐到了电脑前。翻开笔记本,映入眼帘的是熟悉的Dev-C++的界面,还打开着一份代码——“割顶”。退役了,退役了。啊,我真的退役了吗。时间真是飞逝啊,三年OI一晃眼就过去了,我有点舍不得。原本以为,考完之后令人伤心愁苦的只会是怎样的花式爆零还是脑残失误,但是我却发现对OI的不舍才令我泪目。退役了。退役意味着以后我将不再有大把的时间可以花在OI上,不再能够沉浸在OI...

2018-11-11 20:44:47 551 1

原创 STL-超市抽奖

本来是两个一个大根堆一个小根堆来解决的,然而STL选手(雾,星夜的蓝天)使用了multiset进行解决,没想到TLE了两个点,进行一番研究以后,他发现set+unordered_map=更快的multiset。为什么呢?在要插入时,使用unorderd_map来判断当前set中是否已经有该元素,如果有则不再进行插入,只在unorderd_map将其个数加一,反之则插入并加一。在删除元素时,从uno...

2018-10-28 15:53:53 294

原创 欧拉函数求法总结及相关例题

注意:本博客并非写给欧拉函数的初学者,而是为已经学会欧拉函数的OIer们提供一点总结。方法一:根据公式求解单个数的欧拉函数值根据欧拉函数的通项公式φ(x)=xΠi=1n(1−1pi)\varphi(x)=x\Pi_{i=1}^{n}(1-\frac{1}{p_{i}})φ(x)=xΠi=1n​(1−pi​1​)通过对数x进行类似质因数分解的操作完成单个欧拉函数值的计算。复杂度Θ(x)\The...

2018-10-26 15:42:43 3110

原创 数论-质数-樱花BZOJ2721

错误点:1.质因数分解时,当当前素数的平方已经大于被分解数a,则停止循环,否则复杂度就不是/sqrta/sqrt{a}/sqrta。改进点1:在做筛的时候记录下每一个数最小的质因数是谁,分解的时候从这个数开始,可以很大地加快分解速度。改进点2:对n!做分解质因数有另外更加快速的算法,待学习。改进前:1100ms±#include&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;bits/stdc++.h&amp;a

2018-10-23 13:53:34 408

原创 数据结构(乱搞)-Easy Problem from Rujia Liu UVA11991【自创解法】【链式向前星上倍增】

233#include&amp;lt;bits/stdc++.h&amp;gt;#define rep(i,l,r) for(int i=(l);i&amp;lt;=(r);i++)#define per(i,r,l) for(int i=(r);i&amp;gt;=(l);i--)using namespace std;int n,m,nxt[200100][21],head[2005000],a[200100];...

2018-10-21 19:13:28 179

原创 图论-生成树-北极通讯网络(二分答案或最小生成树)【浅显易懂的思维过程】

自己想到的一种解法:二分答案在实数域上二分d的值,检验的办法就是将距离小于等于的所有点对用并查集合并在一起(也就是在一个联通块里了),最后扫一遍算出一共有多少个联通块,如果联通块的块数少于等于k,那么当前d值合法,否则不合法。还要注意一个小细节,当最后只有一个联通块的时候实际上全图就已经联通了不需要卫星设备,直接返回合法。此外,当只有一台卫星设备的时候和没有卫星设备是一样的。#includ...

2018-10-10 19:59:18 689

原创 OI各类算法中的常见题型

以下给出OI学习过程中各种算法常见的一些题型,供复习时参考。按难度和常见程度排序(我眼中的)。一、生成树相关问题:最小生成树次小生成树求最小瓶颈路增量最小生成树各种生成树计数含给定边的生成树边分为不同的几类,第i种边一定要选a[i]条的生成树...

2018-10-03 20:26:15 1138 2

原创 总结:OI中问题求解策略

在做OI的题目的时候有时候会遇见一些无从下手的题目,让人非常的头疼,在此凭借自己一点的经验总结应对方法如下。在遇到想不出解法的题目时的做法(重要性从大到小排序):看懂题目所给的样例观察和计算来得出问题具有哪些小性质通过思考部分分进而得到正解规定一个计算的顺序观察它是否具有无后效性、最优子结构将题目所求的东西以及一些关系用数学式子表达出来按照题目描述的操作的反操作的顺序进行计算(例...

2018-10-02 16:32:33 499

原创 国庆集训D1T2 小W的房间

因为没有边权,所以广搜+哈希判重(以减少不必要的搜索)。用状态压缩的方式存储钥匙的状态。因为哈希哈希得不够好T了,95分。哈希的时候要注意分析到底哪一些信息是有用的,哪一些信息是没有用的,从而将更多冗余的点压缩在一起,从而降低运行时间。具体地说1.其实对于每个node来说,step是无关紧要的,因为只要是在同一个位置并且当前的钥匙相同,那么就是同一个状态,并且step小的一定会先搜到,之...

2018-10-01 16:46:44 245

原创 瞎搞-贪心-NOIP前44天-入门-家庭作业【并查集优化】

使用并查集优化了一下贪心的查找,速度只需要那些用链表的时间的将近一半,Perfect。#include&amp;amp;lt;bits/stdc++.h&amp;amp;gt;#define rep(i,l,r) for(register int i=(l);i&amp;amp;lt;=(r);i++)#define per(i,r,l) for(register int i=(r);i&amp;amp;gt;=(l);i--)using namesp...

2018-09-17 21:00:17 443

原创 NOIP易错整理

手写哈希表:当哈希表要处理0时,必须将哈希表的值初始化为-1,否则会引起结果出错。(变成默认0已经在哈希表里了)

2018-07-28 21:07:25 317

原创 NOIP常用模板(随便整理的,很杂)

二元组及向量运算struct P{ double x,y; P(){} P(double _x,double _y) {x=_x; y=_y;}}A[Maxn],B[Maxn];P operator + (P A,P B) {return P(A.x+B.x,A.y+B.y);}P operator - (P A,P B) {return P(A.x-B.x,A.y-...

2018-07-18 21:01:51 984

原创 NOIP同类算法对比

素数筛:埃氏筛与欧拉筛:1。数据规模1亿及以上,欧拉筛的速度基本为埃氏筛的两倍。2。数据规模5千万,欧拉筛550ms左右,埃氏筛900ms左右。3。数据规模3千万,欧拉筛400ms左右,埃氏筛500ms左右。4。数据规模2千万,两筛均为300ms左右。5。数据规模2千万以下,埃氏筛快于欧拉筛。...

2018-07-18 20:56:28 592

原创 【解题报告】公司聚会

题目来源:vijos1418. 参考自:raoyu的题解 其实这是一个在树上的01背包问题。这道题与经典的公司聚会不同,因为上司的定义由父结点改为了所有祖先。这样问题也由树形dp变为了01背包。由于题目中有一个非常重要的条件,“员工的编号会大于他的直接上司的编号”,我们可以直接循环而不用建立树结构。 设f[v,m]是以v为根的子树花费m元最大可以获得的兴奋指数。则在循环到v以前,f[v,m]表

2017-07-11 16:50:32 592

原创 【解题报告】舞会

题目来源:vijos1706.这题比较简单。对于任意一棵以v为根的子树,要么上司v上去,要么v的下属们上去,显然搞笑值是负的的家伙们只要坐着看就好了(笑)。设f[v,1]为以v为根节点的子树有下属上台的最大搞笑值,f[i,2]为以v为根节点的子树只有上司上台的最大搞笑值。则状态转移方程如下: f[v,1]=∑i=1smax(f[ch[v,i],1],f[ch[v,i],2])f[v,1]=\sum

2017-07-11 16:46:01 366

原创 【解题报告】选课

题目来源:vijos1180. 树形DP,设f[v,num]为以v为根的子树选取num门课所能得到的最大学分。为了方便分配这num门课程,我们将题目所给的多叉树转换为二叉树。 参考资料:原理、代码 .转为二叉树后,实际上任意节点i的左孩子(包括左孩子的孩子)是i真正的子节点,而i的右孩子(包括右孩子的右孩子)是i节点的兄弟节点。故i未选时,i的所有左孩子不可选,但右孩子可以。于是得状态转移方程如

2017-07-11 16:25:26 400

原创 【解题报告】小胖守皇宫

【树形DP】小胖守皇宫题目来源:Vijos1144。根据题意,此题要求求最优值,并且按照从叶向根这个决策顺序来看,后面的决策不会影响到前面的决策(对此句有疑问可接着往下看),满足无后效性。因此姑且套用动态规划来一做。动态规划的核心是状态转移方程。正所谓状态转移方程,我们就需要先知道有哪一些状态。由题意得知,所有的宫殿均要被看守到,于是对于任意一个宫殿i来说,必处于以下三种状态中的任意一种: 1. 被

2017-07-08 21:30:33 976

原创 HDU 5317 RGCDQ

题意:记F[i]为i的质因子种数,求max⁡l<=i<j<=rgcd(F[i],F[j])\max_{l<=i<j<=r} {gcd(F[i],F[j])}l<=i<j<=rmax​gcd(F[i],F[j])首先可以想到F[i]的值一定很小,由题知区间范围最大是100W,Win+R敲入calc打开计算器算一下知道F[i]的值最大为8。(2...

2019-11-18 11:50:23 214

原创 STM32中断自我总结

中断可以简单地分为外部中断和定时器中断按键外部中断是外部中断中的一种,它的步骤是配置按键的GPIO配置中断线配置通道第一步配置按键的GPIO就是非常基础的操作。先定义一个初始化用结构体,然后使能你要使用的IO口的组号(即ABCD…)对应的时钟,然后给结构体赋值以后塞入GPIO_Init函数就可以了。static void Key_GPIO_Config(){ GPIO_Init...

2019-11-03 14:33:41 312

原创 赛前板子-割点【洛谷P3388】

注意如果题目要求割点的个数的话,一定不能在tarjan算法中去统计,会导致单个点被重复统计多次,导致答案比实际多。应该在对所有点求完tarjan以后(因为图可能不是联通的),在记录每个点是否是割点的数组中扫描一遍去统计。#include&amp;lt;bits/stdc++.h&amp;gt;#define rep(i,l,r) for(int i=(l);i&amp;lt;=(r);i++)using names...

2018-11-09 22:19:35 211

原创 最短路模型-[国家集训队]墨墨的等式 洛谷P2371

跳楼机的加强版。#include&lt;bits/stdc++.h&gt;#define rep(i,l,r) for(int i=(l);i&lt;=(r);i++)#define per(i,r,l) for(int i=(r);i&gt;=(l);i--)using namespace std;typedef long long ll;const int N=5e5+100;i...

2018-11-04 20:42:05 204

原创 最短路模型-跳楼机-洛谷P3403

第一次遇到这种数学题转化为图论的题目,与我一开始的想法相同,将其中一个变量与另外两个变量分离开来,便于处理。由于以前一直认为SPFA会被卡,所以使用了堆优化的Dijkstra,结果超时了,为什么呢?因为我们构造出来的图是一张很稀疏的图,在这种图上Dijkstra与SPFA比较是比较劣的。由于图是我们自己构造的,并不是什么专门用来卡SPFA的网格图等等,所以可以使用SPFA,一定不会超时。(打破了我...

2018-11-04 19:39:00 388

原创 数论-欧拉函数-仪仗队SDOI2008

要注意边界啊我。。。QAQ,这玩意儿n可以等于1的,血的教训。。#include&amp;lt;bits/stdc++.h&amp;gt;#define rep(i,l,r) for(int i=(l);i&amp;lt;=(r);i++)using namespace std;const int N=40100;typedef long long ll;int n,phi[N],v[N],prime[N],...

2018-10-26 16:20:24 225

原创 数论-质数-质因数分解

水题。#include&amp;lt;bits/stdc++.h&amp;gt;#define rep(i,l,r) for(int i=(l);i&amp;lt;=(r);i++)using namespace std;int n;int main(){ cin&amp;gt;&amp;gt;n; rep(i,2,n) if(n%i==0){ cout&amp;lt;&amp;lt;n/i; break; } return

2018-10-22 21:53:01 302

原创 数论-质数-Goldbach's Conjecture

水题。#include&amp;lt;bits/stdc++.h&amp;gt;#define rep(i,l,r) for(int i=(l);i&amp;lt;=(r);i++)#define per(i,r,l) for(int i=(r);i&amp;gt;=(l);i--)#define random(l,r) ((l)+rand()%((r)-(l)+1))using namespace std;type...

2018-10-22 21:51:52 228

原创 数论-质数-轻拍牛头(BZOJ1607)

一眼看过去很简单,十几行写完了。时间复杂度O(nloga),a为最大的值。#include&amp;amp;lt;bits/stdc++.h&amp;amp;gt;#define rep(i,l,r) for(register int i=(l);i&amp;amp;lt;=(r);i++)using namespace std;const int inf=1e9+10,N=1e6+100;int n,a[N],cnt[N],lim;...

2018-10-22 21:46:46 574

原创 图论-生成树-最小生成树计数

我的天,改一个晚上才改出来,一个及其细微难以发现的逻辑错误:在做最小生成树顺便保留并查集状态的时候,不论每次是否处理的是新的种类的边(离散化后的),都应当先将fa拷贝到nowfa当中去,否则将会出现一种边没有被使用过(因为加入后会形成环),从而其相对应的nowfa均为0,导致在dfs判断所选则的边会不会形成环时得出有环的结论(因为fa[a]、fa[b]都是0),进而引起方案数出现0的情况。#in...

2018-10-21 21:52:37 813 1

原创 图论-环-洛谷P3385【模板】负环

这道题有毒啊。。输出的不是“NO”是“N0”,不是“YES”而是“YE5”。被坑了一晚上。另外,spfa-dfs竟然被卡死了,只能过9个点。换成三行就写完的Bellmam-Ford就AC了SPFA-DFS代码:#include&amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;gt;#define rep(i,l,r) for(int i=(l);i&amp;amp;amp;lt;=(r);i++)#define per(i,...

2018-10-18 13:41:45 322

原创 图论-生成树-次小生成树

dfs预处理的时候光顾着处理最大值与次大值了,竟然忘记处理祖先值。。。#include&amp;amp;lt;bits/stdc++.h&amp;amp;gt;#define rep(i,l,r) for(int i=(l);i&amp;amp;lt;=(r);i++)#define per(i,r,l) for(int i=(r);i&amp;amp;gt;=(l);i--)#define random(l,r) ((l)+rand()%((r)-(...

2018-10-14 16:33:59 315

原创 图论-生成树-黑暗城堡

没什么好说的,没有想清楚结果把计算ans数组时候用到的链式向前星的head写错了。。WA得还剩20分。应该要写head[v[i].v]的,不能写head[i],因为现在的第i个位置上放的已经不是原来的第i个点了。#include&amp;lt;bits/stdc++.h&amp;gt;#define rep(i,l,r) for(int i=(l);i&amp;lt;=(r);i++)#define per(i,...

2018-10-11 20:20:36 357

原创 图论-生成树-构造完全图

记得要将初始边的边权加入答案中。在这里插入代码片#include&amp;lt;bits/stdc++.h&amp;gt;#define rep(i,l,r) for(int i=(l);i&amp;lt;=(r);i++)#define per(i,r,l) for(int i=(r);i&amp;gt;=(l);i--)#define random(l,r) ((l)+rand()%((r)-(l)+1))usin...

2018-10-10 18:57:04 1418

原创 图论-生成树 新的开始

第一次遇到这种加点的题目。本题的不同之处就在于在每个点上建发电站需要费用,不能直接用最小生成树的模型来做,其他办法也不知道该如何处理。于是考虑对题目的模型进行转化,将它化归成最小生成树模型。因此有加点的技巧:原图有0n-1共n个点,加入一个虚点n,map[n][i]即为建立发电站费用的v[i],对0n这(n+1)个点做最小生成树得到的结果就是答案。另外,听闻图论中还有一些题目要用到拆点什么...

2018-10-08 19:16:51 280

原创 国庆集训D1T3 小X的佛光

存双向边要开两倍空间!!!!!#include&amp;amp;lt;bits/stdc++.h&amp;amp;gt;#define rep(i,l,r) for(int i=(l);i&amp;amp;lt;=(r);i++)#define per(i,r,l) for(int i=(r);i&amp;amp;gt;=(l);i--)using namespace std;const int N=4e5+1000;int n,q,num;in.

2018-10-01 16:32:05 240

原创 瞎搞-贪心-NOIP前42天-入门-喷水装置

作死三部曲:Step 1#include&amp;amp;lt;bits/stdc++.h&amp;amp;gt;#define rep(i,l,r) for(int i=(l);i&amp;amp;lt;=(r);i++)#define per(i,r,l) for(int i=(r);i&amp;amp;gt;=(l);i--)#define random(l,r) ((l)+rand()%((r)-(l)+1))using namespace..

2018-09-19 20:23:04 345

原创 瞎搞-贪心-NOIP前第45天-入门-钓鱼

一开始看了就觉得应该是DP,的确如此,但是有贪心的做法。 贪心做法就是假设只在前i个湖钓鱼,然后把中间这i-1段路程所花的时间先给扣除,剩下的就按最优的分配就可以了。i从1到n都操作一遍从得到的n个临时答案里面取最大值就是答案了。 一开始思维惯性,导致想法一直是假设当前已经处于某于第i个湖,考虑怎样去决策是要继续在当前的湖钓鱼或者是走到下一个湖,于是只能想成记忆化搜索了(也就是DP)。 没想...

2018-09-16 21:36:24 339

空空如也

空空如也

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

TA关注的人

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