- 博客(161)
- 收藏
- 关注
原创 数学-称重问题
背景同事吃饭闲聊的一道面试题问题有10个桶,每个桶有无数个球,单个桶中每个球一模一样。其中有9个桶中每个球质量都是10g,另外一个桶每个球质量都是9g。现在有一个秤,可以显示质量。问最少需要多少次才能超出小球质量不相同的桶?Solution 1 二分: 4 次5 → 3 → 2 → 1Solution 2 1次第 i 个桶区 10i10^i10i 个小球,那么秤一次,看质量哪一位不为1问题变形一特殊的桶中的质量不再为 9, 而是 1-9 中任意一个数Solution 2 同样适用问题变
2021-04-21 01:17:05 794
原创 Unit Test of Singleton Pattern
Background上周在写单例的UT的时候发现UT非常难写,问了同事以后解决了这个问题。现在想复现一下当时的场景。Gains找到Root CauseUT难写,思考需不需要重构代码经验教训:如果啥时候觉得UT非常难写,想想是不是需要重构一下代码Singletone ExampleBase CodeInterfacepackage com.hqwhqwhq;import com.hqwhqwhq.model.Notification;public interface Publ
2020-10-24 17:44:42 254
原创 2020届校招总结(更新完)
实习历程实习投了5家:百度,阿里,腾讯,字节跳动,微软**百度挂我简历服了。。。阿里。阿里投的蚂蚁C++,一直没人捞。后来师兄说认识一个阿里云的大佬,问我愿不愿意试一下,然后就被阿里云高可用团队捞了,TL的简历面+2轮技术面+1轮交叉面+1轮HR面,过了大概一个月收到的意向书。面试的时候才知道面的JAVA岗,不过我表示不会JAVA,然后就问基础+算法(感觉算法题有点难度,后面面经会具体写)...
2019-10-06 19:31:53 843 1
原创 Codeforces Round #585 (Div. 2) F. Radio Stations
题意2−SAT2-SAT2−SAT多了一个边的范围,其实只需要把点的范围加上去就行了即:第iii个点(l[i],r[i])(l[i], r[i])(l[i],r[i]),那么构造点jjj,kkk对应l[i]l[i]l[i],r[i]+1r[i]+1r[i]+1。j<<1j<<1j<<1,j<<1∣1j<<1|1j<<1∣...
2019-10-05 22:20:28 198
原创 kick start Round C Wiggle Walk
分析:需要知道每一个小方块连着的4个方向最远的点在四个方向上做并查集就OK了代码:#include <bits/stdc++.h>using namespace std;typedef pair<int, int> pii;pii next(map<pii, pii> mp[], pii nd, int id){ if (id ...
2019-06-17 00:00:10 320
原创 CodeForces #553 E&F
E. Number of Components解法:dp[i]dp[i]dp[i] 维护从节点111到iii为止的∑∑f(l,r)\sum\sum f(l,r)∑∑f(l,r)值。那么有dpdpdp转移方程:dp[i]={dp[i−1]+(val[i]−val[i−1])∗(n−val[i]+1)if val[i]>val[i−1]dp[i−1]+(val[i−...
2019-04-23 23:46:13 171
原创 LeetCode 32 Longest Valid Parentheses
随便最近要找实习啥的,开始刷一些leetcodeleetcodeleetcode,不定期更新博客。。。题意找出‘(’和‘)’最长的匹配子串?分析stackstackstack维护最大‘()’包围的总长度,复杂度O(n)O(n)O(n),nnn为字符串长度。dp[i]dp[i]dp[i]维护以iii结尾的最长符合子串长度。复杂度O(n)O(n)O(n)。总复杂度:O(n)O(n)O(...
2019-01-16 17:21:37 133
转载 git笔记(廖雪峰GIT学习总结常用命令)
创建版本库全局配置:git config --global user.name "Your Name"git config --global user.email "email@example.com"工作区提交文件到暂存区,暂存区提交文件到本地分支git add &lt;filename&gt;git commit -m "注释信息"时光穿梭
2018-05-21 19:45:27 277
转载 git实用笔记
git clone url从远端拉取仓库git add file添加某个文件git commit -m ‘name’进行一次提交git push将本地的提交上传到远端git pull拉取远端的提交到本地,本地当前的分支会更新git fetch将所有远端分支的提交拉取到本地(远端分支是指origin/分支名这种,可以通过git branch -a查看到)...
2018-05-20 21:16:57 180
原创 AC自动机
AC自动机简介Aho−Corasick automatonAho-Corasick\ automaton,该算法在19751975年产生于贝尔实验室,是著名的多模匹配算法。下面我们会举一个具体问题来讲解AC自动机。前提知识KMP算法+Trie
2017-11-27 21:13:12 375
原创 Django模板中嵌入markdown+mathjax
前言最近打算把网站嵌入一个markdown编辑器,当然还没有完成,等完成以后再接着更新一波,或者感觉不需要了就不更新了。整合markdowndjango中整合markdown python中有一个markdown模块,直接可用 pip install markdown 然后在views.py中from markdown import markdowndef add_page(request)
2017-11-16 20:13:45 1485
原创 2017百度校招笔试第一题
题意:大概是一个小朋友去游乐园,游乐园一个有nn个项目,第ii项目需要花费a[i]a[i]时间去玩,小朋友的门票一共可以在游乐园里面待tt时间,只要在这个时间内开始一个项目,那么他可以等到项目结束后才离开游乐园。问他能玩的项目时间总和最大是多少?其中:n<=100,t<=10000000,a[i]<=100n <= 100,t <= 10000000,a[i]<=100分析:定义:dp[n][t]d
2017-09-21 10:01:47 577
原创 Linux下切换成root如何把自己的vim配置也迁移过去?
最简单的方法就是把/home/myname/.vimrc复制到/root/.vimrc可以利用ln的软连接把/root/.vimrc指向/home/myname/.vimrcln -s /home/myname/.vim /root/.vimln -s /home/myname/.vimrc /root/.vimrc如果是用的别人的配置,比如spf13−vimspf13-vim,那么我们需
2016-12-10 22:12:42 3655 2
原创 CodeForces 732F Tourist Reform
题意:给一个无向无重边无自环的连通图,问:如果把每条边确定一个方向(变成有向图),那么在这个图中,所有点能到达的点的个数中的最小值最大是多少。分析:最终的图缩点以后就是一个拓扑结构,那么一定有一个点是只能到达他本身,如果这个点是一个强连通块的话,答案就是这个强连通块内节点的个数。那么找一个强连通块内部节点个数最大的强连通块,然后dfsdfs建图。ps:ps:其实就是一个找无向图双联通块的过程。代码:
2016-10-19 21:42:26 737
原创 CodeForces 724E(Goods transportation 最小割)
前言:基本没写过网络流的题,这题居然不知道怎么建图,蠢哭。。。分析:其实建一个SS,指向所有的点,边权为p[i]p[i],建一个TT,所有节点指向TT,边权是s[i]s[i],各个点之间的边权是cc,那么题目就是一道SS到TT的最大流。由于边存不下来,所有用最小割写。 dp[i][j]=min(dp[i−1][j−1]+s[i],dp[i−1][j]+j∗c+p[i])dp[i][j] = min
2016-10-13 23:18:17 666
原创 HDU 5919 Sequence II(主席树)
题意:有长度为nn的序列,强制在线询问[l,r][l,r]这段区间中所有不同数出现的第一个位置,按照位置从小到大排完序以后的中间(向上取整)的那个位置是多少?分析:如果可以离线做,那么按照ll排个序以后,从右想左逐个添加新的位置,删除前一个位置。但是这个强制在线怎么搞, 那就把以[l,n][l,n]序列形成的线段树都存下来,然后在对应的线段树上面搞一下,就行了。这个时候用主席树来存就好了。代码
2016-10-05 01:00:09 591
原创 Escape from the Hell(暴力瞎搞)
题意:一个人从高LL的洞中爬出来,最多可以爬nn天,每一天都有一种选择白天上升a[i]a[i],晚上下降b[i]b[i],如果白天爬出的高度≥L\ge{L},那么不需要下降了。但是在这nn天中,有一群追兵也在爬,这些人第ii个晚上爬c[i]c[i],白天不会下降,问这个人最少多少天能出去。分析:二分答案,最后一天不需要下落,所以可以枚举最后一天的方案。现在要判断这个答案是否会被追兵
2016-10-04 00:31:41 1094 1
原创 CodeForces 715C Digit Tree (树的分治)
分析:求所有满足情况的链的个数,这个时候很容易想到树的分治,每次求经过rt的所有满足条件的链的个数。由于从rt开始的链可以进行合并。所有直接暴力所有子树就可以了。复杂度就是o(nlogn)o(nlogn)。代码:#include <bits/stdc++.h>#define LL long long#define FOR(i,x,y) for(int i = x;i < y;i ++)#def
2016-09-22 23:48:40 966
原创 HDU 5895 Mathematician QSC(欧拉定理推广)
分析:附上链接:icpccamp 当 x>φ(m)x>φ(m) 时,ax≡aφ(m)+xmodφ(m)(modφ(m))a^{x}≡a^{φ(m)+x mod φ(m)}(mod φ(m)) 总是对的。不需要互质的条件。 然后高一个矩阵快速幂就搞定了(是不是矩阵快速幂可以搞定所有序列的通项?)代码:#include <bits/stdc++.h>using namespace std;typed
2016-09-19 00:52:34 446
原创 CSU 1806 Toll (自适应Simpson积分 )
题意:就是一个积分+最短路分析:学到的新知识:自适应SimpsonSimpson积分 ∫baf(x)dx≈F(a,b)=(b−a)6[f(a)+4f(a+b2)+f(b)]{\int_a^bf(x)dx}\approx{F(a,b)={(b-a)\over{6}}[f(a)+4f({a+b\over{2}})+f(b)]} 如果F(a,a+b2)+F(a+b2,b)F(a,{a+b\over
2016-09-07 14:09:50 430
原创 CSU 1810 Reverse
题意:把[i,j][i,j]这个区间的数翻转一下和剩下的n−j+i−1n-j+i-1个数形成一个新的大数,求所有翻转以后的数的和。分析:翻转以后的数由原来的数和翻转部分的数组成。暴力枚举ii开始的所有新的数的和。 l[i]l[i]表示前ii个数形成的数的值。 r[i]r[i]表示后面[j,n][j,n]形成的数的值。 那么 ans[i]=∑j=in(r[1]−r[i−1])+r[j+1]+l
2016-09-07 13:03:20 561
原创 CSU 1811 Tree Intersection
题意:一棵树,每个节点有一种颜色,现在删去一条边,求这个树分成两部分,这两部分的共有颜色个数。分析:枚举每一棵子树所有存在的颜色的节点个数,看看有没有超过这种颜色再整个树中的个数,就是答案。 就是一个子树的合并操作,合并并不需要每一个子树都建立一个节点,只需要找出不同颜色最多的那个子树,在这个子树上进行合并就可以了。这个样子每一次最多暴力了u.size()/2u.size()/2,那么总的复杂度就
2016-09-07 12:42:34 736
原创 CSU 1808 地铁
题意:给nn个点,mm条边,每条边都有一个idid。不同边之间进行切换时,需要加上这个idid差值。求最终11到nn之间的最短路。分析:拆点最短路,由于到达每个点的状态不光与点uu有关,也和到达uu的边的idid有关。因此想要对应求最短路,只能把一个点拆成多个点,每个点对应一种它连接的边的idid。重新建图,然后跑一边最短路。一个点拆成多个点内部连线的时候,只需要把所有idid排序,然后连线就可以了
2016-09-06 09:24:07 578
原创 TopCoder SRM691 Div2
前言最近打算打一段时间TC和CF。题目及代码300题目很简单,把数字排一下序,然后数字之间挨个贪心插入”+”就行了。
2016-05-31 22:19:15 682
原创 HDU 5696 区间的价值 (百度之星2B)
前言:因为是完全随机数据,所以大概找一个平均复杂度是o(nlogn)o(nlogn)的就可以了。原来和秦总一样用的RMQRMQ+线段树+剪枝做的,但是一直TT,可以参考一下秦总的代码。 然后网上看的其他的方法,因为数据完全随机,导致做法太多了。分析:暴力区间内最大值,然后向左向右扩展,直到比这个值大的那个数位置,更新这段内所有长度的最大值优先向大的数的那边扩展。基本就是xjb做一下就可以了。代码:
2016-05-24 23:16:30 706
原创 HDU 5700区间交(百度之星2B)
分析:按左端点排序,暴力枚举左端点,寻找这个左端点右边最右端被覆盖>=k>=k次的位置,那么这个长度就是以当前节点为左端点的最大的和。 那么就是一个区间覆盖+更新查询操作,用一颗线段树就可以维护。 复杂度:o(nlogn)o(nlogn)代码:#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#in
2016-05-24 23:02:49 961
原创 HDU5694 BD String(百度之星2A)
分析:这道题比赛的时候居然wawa了,实在是有点傻逼。这道题仔细想想就是一个递归,比赛的时候主要反转的操作没想清楚,其实只要再反转一次就好了,如果这一段多了xx个数,那么这1...x1...x中的BB的个数对应原序列中x+1...nx+1...n的DD的数量,那么用sumB1...n−sumBx+1...nsum_{B}{1...n}-sum_{B}{x+1...n} 复杂度:o(64∗logn)
2016-05-24 22:53:30 635
原创 HDU5693 D Game(百度之星2A)
分析:连续消去kk个数,可以表示为消去了若干次22个数和消去了若干次33个数。即k=2∗i+3∗jk=2*i+3*j,那么可以消数字就变成了,每次可以消22个,或者33个。 f[i][j]f[i][j]代表i...ji...j这段数字可以全部消掉,那么这个状态可以由f[i][k] and f[k+1][j]f[i][k]\ and\ f[k+1][j],f[i+1][j−1] and mark[a
2016-05-24 22:44:22 990
原创 HDU 5692 Snacks (百度之星2A)
分析:题意就是根节点到ii子树上所有点的最大值,并且这棵树上的点权可修改。 那么维护所有点到根的和,如果修改一个uu节点,只会改变根到uu子树上点的和。把树用dfsdfs序遍历一下,把树变成一个序列,修改节点就变成了序列的区间修改,找最大值也变成了区间找最值。一棵线段树搞定了。 复杂度:o(mlogn)o(mlogn)代码:#pragma comment(linker, "/STACK:1024
2016-05-24 22:30:50 629
原创 HDU5691 Sitting in Line(百度之星2A)
分析:看到题目第一感觉状压DP,由于状压DP要能转移,所以需要知道当前用到的点的集合中最后一个用的点的编号。 所以转移方程就出来了: dp[i][j]=max(dp[i xor (1<<j)][k]+a[k]∗a[j],dp[i][j])dp[i][j] = max(dp[i\ xor\ (1<<j)][k]+a[k]*a[j],dp[i][j]) 题目中还有一个条件,有一个固定位置,所以在
2016-05-24 22:21:13 627
原创 hihocoder 1291 : Building in Sandbox (离线并查集)
分析:主要是第二个条件,题目的意思是,如果我再外面再包一圈(x=0,y=0,x=101,y=101,z=101x=0,y=0,x=101,y=101,z=101)这55个面上的点能够不经过正方体到达指定位置xx,我们设这55个面的所在的连通图是pp。换种问法就是,指定位置xx是不是在连通图pp中。判断一个点在不在连通块中:并查集就行了。每一次加一个正方体,相当于图的删边,这个比较困难,如果倒着删除正
2016-04-23 10:57:25 737
原创 南理工校赛I题
分析:对2_SAT问题还是不熟,比赛的时候感觉像是2_SAT问题,也向这个方向想了,但是没想出来(好菜)。2_SAT问题核心还是建图:比如这题,怎么建图?对于第ii层,x[i],y[i]x[i],y[i]需要连接的边是2∗n−1−x[i]→y[i],2∗n−1−y[i]→x[i]2*n-1-x[i]\to{y[i]},2*n-1-y[i]\to{x[i]},然后跑一下图看看是否x[i]x[i]和2∗
2016-04-18 23:53:10 380
原创 HDU 5663 (莫比乌斯反演)
分析:这道题就是一道公式推导题,我再来推一遍公式:设f(x)f(x)函数: f(x)={1,0,x是完全平方数否则f(x) =\begin{cases}1, & \text{x是完全平方数} \\0, & \text{否则}\end{cases}则ANS=n×m−∑ni=1∑mj=1f(gcd(i,j))ANS={n}\times{m}-\sum_{i=1}^{n}\sum_{j=1
2016-04-11 23:31:53 3832
原创 HDU4417(主席树)
前言:今天刚学的主席树,附上博客:主席树 个人觉得这篇文章写的非常好。认识:主席树就是对于序列1...n1...n的每一个前缀都构造一颗线段树来维护所要求的值。也就是说主席树实际上就是nn棵线段树。那么为什么不会MLEMLE?这个下面再说。先说一个经典的问题:静态区间第kk大?(求区间[l,r][l,r]之间第kk大的元素。无修改)那么对于序列的前缀,需要知道[1,l−1][1,l-1]和[1,
2016-03-28 23:24:38 3014
原创 BestCoder #76
第一题:sortsort一遍,然后扫一遍数列,维护一个ll(第一个比a[i]a[i]小的数的位置),求出所有满足条件的情况。 复杂度:o(nlogn)o(nlogn)第二题:kk个连续的数相乘的乘积最大,1...k1...k的序列作为初始序列,然后nn减去(1+k)∗k2{(1+k)*k}\over{2},剩下的均匀分给每一个数,多出来的从后往前分。 复杂度:o(n)o(n)第三题:考虑每一个节
2016-03-22 23:23:58 437
原创 约瑟夫问题
约瑟夫问题:百度百科问题:1,2,3,...,n1,2,3,...,n这nn个数围成一个圈,然后从11开始隔mm个删除一个数,(即第一个删除的数是mm%n+1)。求问最后一个被删除的数是多少?分析:1,2,3,...,n1,2,3,...,n第一次删除以后变成了m+1,m+2,...,n,1,2,...m−1m+1,m+2,...,n,1,2,...m-1,对于循环的问题,一般序列1,2,3,...
2016-03-15 00:11:54 386
原创 [Offer收割机]编程练习赛1
前言这次应该算是去年放假以后第一次写代码吧,感觉脑子还是有点秀逗的,这次的题目感觉确实都是水题,居然有一题还没写出来,好像第四题做的时候没看到剩下来的70%的数据,以为是对语言70%的数据,再次表示读题很重要!!!(想起去年的EC真是心痛)。分析第一题,暴力模拟,只需要把所有满足情况的99宫格表示出来就好了,然后暴力判断给出的图案和几个满足条件的99宫格一样。第二题,暴力,使用一个数据结构(我用
2016-03-09 23:39:24 467
原创 HDU-5628-Clarke-and-math-狄利克雷卷积
分析:这个题目要学会数论上面的一个知识点:狄利克雷卷积。主要要知道:(f∗g)=∑d|nf(d)g()nd(f*g)=\sum_{d|n}f(d)g(){n\over{d}}f∗(g∗h)=(f∗g)∗hf*(g*h)=(f*g)*hf∗(g+h)=f∗g+f∗hf*(g+h)=f*g+f*hf∗g=g∗ff*g=g*f 这道题就变成了这个f∗1kf*1^{k}时候用一次快速幂,可以nlo
2016-02-20 20:56:55 1996
原创 Wunder Fund Round 2016 D. Hamiltonian Spanning Tree
分析:树形DP 主要看xdp[u][1]=min{dp[v0][1]−dp[v0][0]}+∑{dp[v][0]}dp[u][1] = min\{dp[v_0][1]-dp[v_0][0]\}+\sum\{dp[v][0]\}\\dp[u][0]dp[u][0]:如果uu的子节点中有dp[v1][1]+dp[v2][1]<=dp[v1][0]+dp[v1][0]dp[v_1][1]+dp[v_2
2016-02-02 21:15:40 774
原创 Hihocoder 挑战赛17 String Problem I (字符串HASH)
分析:第一次写字符串hash,学习的AC代码的写法。其实就是把字符串变成一个p1进制的数(Mod1),由于有冲突:所以用两种方法表示:p2进制的数。此题需要注意的点:原串中扫一遍去掉一个点时,如果相邻的两个点一样,那么去掉以后效果是一样的,这种情况只要算一遍。代码:#include <bits/stdc++.h>using namespace std;#define FOR(i,x,y) for(
2016-01-01 22:35:36 495
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人