自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 初试逆向题[BJDCTF 2nd]8086

先放进ida里面,只发现2个函数,sub_10030和start:sub_10030是一个段内近调用(near)的无限死循环:而start是一个调用sub_10030的函数(近似的认为start也为无限死循环):既然flag不在这里,再去看汇编代码段:lea指令使bx赋值为aU…Wz的偏移地址。loc_10039是一个循环,循环了cx(22h)次。每一次,di=cx-1ptr[bx+di]=ptr[bx+di]^(1Fh) (Ps:这里ptr是基址变址寻址方式)最后写个脚本,答案就

2021-01-07 19:59:38 220 1

原创 初试逆向题刮开有奖

放进ida里,先搜索字符串flag,查看有没有可疑的代码。发现没有可疑的flag段代码:直接进入主函数Winmain查看:

2021-01-05 21:42:07 168

原创 初试逆向题SimpleRev

老样子,先找到含有flag的可疑函数main(字符串搜索ALT+T即可),并进行解析:发现flag就藏在Decry函数中,打开此函数:由函数得知,text最终会和str2比较。text是由key3和v9合成而来。str2是由输入的flag+key加密得到。key是由key1和src合成而来。src和v9均可以用脚本得到:得出src为“SLCDN”,v9为“wodah”。key3以及key1,均可以寻地址找到值,其分别为key3为“kills”,key1为“ADSFK”

2020-12-30 22:03:23 317

原创 初试逆向题reverse2

这次看样子,不像是一个可执行文件:不过一样可以试着放进ida里剖析就好。这次也省了我们查找“flag”字符串的操作了,直接翻翻就找到了:看着右边这一串的代码:以及通过图形解释,大至可以看出,是flag字符串内的字符‘i’和和‘r’换成数字‘1’。然后再顺着源头看看flag一开始里面装的是啥:"hacking_for_fun”—>“hack1ng-fo1-fun”。即,hack1ng-fo1-fun就是我们的答案。...

2020-12-29 19:36:24 188

原创 初试逆向题reverse1

同样的尝试使用命令行打开:晕(((φ(◎ロ◎;)φ))),好像出了点问题,不过没关系,我们只是看看是干嘛的,真正还是要靠ida。ㄟ( ▔, ▔ )ㄏ老样子,用ida搜索字符串“flag”:然后找到几个可疑的地方:跳转到这里的函数,查看汇编代码萌新看这个实在是太难了,这里可以选择挑战自我看图形化界面(space)或者看c伪代码(F5):很明显,就是让我们比较str2和输入的str,相等就是flag,那么str2一开始是“hello world”,然后如果是’o’,就改成‘0’,这是将str

2020-12-29 11:11:51 224

原创 初试逆向题easyre

easyer*打算退役后,就将精力投入进逆向。这是第一次接触easyer逆向题,今后也将持续更新。我们将得到的文件用命令行打开,发现是输入2个数字后,就会输出一段字符串:将文件用ida打开,并开始搜索(ALT+T)flag字符串flag:找到几个比较可疑的地址,寻过去:这是该地址下的汇编代码,如果看不懂,可以查看F5下的C伪代码:从这里可以看出答案就是输入2个相同的数字,其中flag为“flag{this_Is_a_EasyRe}”。(ps:不建议看C伪代码,因为ida如果翻译不

2020-12-28 11:46:11 519

原创 2020牛客寒假算法基础集训营5------G街机争霸

原题链接这题的主要是判断什么时间,什么地点,会有僵尸出现。以题目种,k很小,而且僵尸是以一个1k的长方形来回走动(其实形状也无所谓),并且长方形不会撞到边界。因为k很小,所以设一个mp[time][x][y]数组,表示,在time时刻,格子[x][y]会出现僵尸,至于time,因为僵尸是来回走,所以以2k-2为一个轮回。然后就是bfs过题。再设一个pos[time][x][y]数组,表示,曾...

2020-02-14 15:58:39 100

原创 [SCOI2016]萌萌哒------并查集&倍增

传送门一开始是想赌一把,把节点一个一个的unite,然后怀着wa的心情wa了。然后又准备用离散去优化,然后又怀着wa的心情wa了。万般无奈去查题解,发现竟然要使用倍增?(倍增是啥,我多少年没有用过了)复习了一波倍增,原来倍增也可以用在并查集上,我对并查集又有了新的理解,这个数据结构,好强啊!#include<bits/stdc++.h>#define ll long lon...

2020-01-25 18:45:03 141

原创 [SCOI2010]游戏------并查集

传送门可以将装备的2个属性之间连一条无向边。如果这些无向边形成的是一颗树的话,那么n个节点中,我们只可以使用其中的n-1个。如果这些无向边形成的是一颗含有环的树,那么n个节点中,我们可以使用其中的n个。因为要从1开始使用,所以,尽量把使用不了的节点往后面。若加入一条边成环,那么这2个节点的fin()一定是一样的,可以用它们的fin()是否相等来判断是否成环。我们让一个连通块的老大是一个...

2020-01-25 18:44:43 164

原创 [SDOI2013]森林

传送门

2020-01-16 22:15:01 84 1

原创 小Y的字符串------扩展kmp

传送门扩展kmp算法代码:#include<bits/stdc++.h>#define ll long longusing namespace std;const int MX=2e5+9;char s[MX],p[MX];int exnext[MX],exten[MX],n,m;void getexnext(){ m=strlen(p); exne...

2020-01-12 10:48:43 180

原创 无效位置------逆向思维+并查集+线性基

原题传送门序列异或最大,或者最小,都可以用线性基来算,至于线性基是什么,可以看看线性基详解。因为要避免选中我们所删除的数字,但是这样很难做到。所以可以逆向思维考虑一下,如果我们从后往前推,每删除一个数字,就是加入一个新的数字,并且,如果它左右两边已经有数字了,就可以把它们并为一个集合,否则它就是单独一个集合。理解起来挺容易的。#include<bits/stdc++.h>#...

2020-01-09 19:58:08 115

原创 珂朵莉的二分图

传送门

2020-01-06 14:22:53 270 1

原创 P3690 【模板】Link Cut Tree (动态树)------LCT树

原题传送门大佬讲的非常好:大佬讲LCT看了一天的LCT,终于稍微弄懂了一些,这里有几个个人总结的tip,将来深入应该会继续加一些tip。LCT就是一颗树,但它上面有很多很多的Splay树,LCT算是一片Splay的集合。每一颗Splay树的键值都是它在原来树/图里面的深度(这个对理解LCT是非常重要的,是深度!是深度!是深度!)。每一颗Splay树中的节点都必须保证:最多只有一个属于该S...

2019-12-16 21:52:54 117

原创 牛客OJ树的距离------树上主席树

传送门这里由于最高的量ma过大(这里可以用离散化削减空间)1:切忌不可以使用空树,否则必超时2:再者这里的数组空间不再像以前的32倍,而是40倍,3:update更新函数使用时,不可以返回int,会超时,使用引用就不超时了(好坑呀)#include<bits/stdc++.h>#define ll long longusing namespace std;const i...

2019-12-13 20:18:26 120

原创 P3168 [CQOI2015]任务查询系统------主席树

传送门#include<bits/stdc++.h>using namespace std;const int MX=2e5+9;struct node{ int x; int y; bool operator<(const node &a)const{ return x<a.x; }}edge[MX<...

2019-12-12 19:56:08 68

原创 P2633 Count on a tree------树上主席树

传送门这并不是像树剖一样以重链连接的树,而是从上到下,从左到右连接的树,u+v-lca-fa[lca]就是我们所需要的树,lca可以用树剖top来询问,具体可以看看这位博主关于主席树的讲解,对我在这一块启发的很大。#include<bits/stdc++.h>using namespace std;const int MX=1e5+7;int dis[MX],fa[MX]...

2019-12-11 20:48:55 75

原创 P3369 【模板】普通平衡树------Splay树/FHQ_treap

这个除了可以#include<bits/stdc++.h>using namespace std;const int MX=1e5+9;int tot=0,Root;int val[MX],siz[MX],son[MX][2],ran[MX];void pushup(int k){ siz[k]=siz[son[k][1]]+siz[son[k][0]]+1;}...

2019-12-09 20:24:45 222 1

原创 最小球/圆覆盖问题-------模板

其实球或者是圆,都是一个思路,但是,问题不是这个,要注意的是temp和base一定要temp和base的取值大小问题。temp取大了或者base取小了,都会引起超时(亲身经历)最小圆覆盖#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const doubl...

2019-12-03 21:46:28 396

原创 矩阵------矩阵hash

原题这里关键就是要用矩阵hash来ac。因为要最大的正方形,所以,如果长度为a的正方形ok,那么长度为a-1的正方形也是可以的,这里可以用二分来优化。然后这里关于如何取质数base1,base2,我感觉这才是难点(可能是我太菜了,传送门)最后用重写map来优化时间。#include<bits/stdc++.h>#define ull unsigned long longu...

2019-12-02 21:58:01 589

原创 [AHOI2005]SHUFFLE 洗牌------逆元

假如当前的牌的位置是x,那么经历了一次变换之后,牌的位置就变为了 2x%(n+1)这个是很容易证明的。那么经历了m次变换之后,让我们寻找第L张牌是谁,就是:xpow(2,m)+y*(n+1)=L之后使用快速幂可以求出pow(2,m),再用exgcd可以求出x和d(d是pow(2,m)和(n+1)的最大公约数)那么答案就是(x*L/d%mod+mod)%mod,这里可能是负数,千万...

2019-12-02 10:22:07 136

原创 [JSOI2008]最小生成树计数------最小生成树

传送门这里主要是要注意到:1.如果所有线段可以组成一颗最小生成树,那么边数一定是n-1。2.那么如果可以组成2课不同种类的最小生成树,那么这2棵树的权值相等的边一定相等所以只要判断每一个权值相等的边的集合有多少种组成方法,最后再相乘即可。#include<bits/stdc++.h>#define ll long longusing namespace std;cons...

2019-11-28 23:21:56 165

原创 发电------逆元

要么先逆元打表,要么就问哪个逆元就算哪个,都可以过,时间都是700ms上下。#include<bits/stdc++.h>#define lson k<<1,l,mid#define rson k<<1|1,mid+1,r#define ll long longusing namespace std;const ll MX=1e6+9;const ...

2019-11-26 20:17:06 105 1

原创 小球碰撞------牛客oj

传送门将R置为最右端,那么,我们可以得到R/1,R/3,R/5,R/7,R/9,R/11…,R/1~R/3 之间步数为1,R/3~R/5 之间步数为2,R/5~R/7 之间步数为3,R/7~R/9 之间步数为4,R/9~R/11 之间步数为5…之后,再计算L是在哪2个数字之间(在哪2个R/(2k-1),R/(2k+1)之间),并且这2个数字之间的步数为k=(r/l+1)/2,然后...

2019-11-25 22:05:49 167

原创 序列求和------牛客oj

传送阵S[n] = n*(n+1)(2n+1)/6 = 1(2)+2(2)+3(2)+4(2)+5(5)+6(2)+…+n(2)#include<bits/stdc++.h>#define ll long longusing namespace std;const ll mod=1e9+7;const int MX=1e5+9;ll n,a[MX];ll exgcd(...

2019-11-25 19:35:15 139

原创 不要666------数位dp

原题当时都没有来得及去想这题,后面补提一直报错,看了下大牛们的操作才恍然大悟。一道典型的数位dp,记忆化处理加快效率。Dp【pos】【num1】【num2】,其中,pos存剩下的位数,num1存在已剩下位数中(使用的前提没有上值的限制),满足num1和num2状态的答案(根本不需要去考虑前几个位数是否一致,只要考虑它们在此时的num1和num2的状态一致即可),ans.sum=(ans.s...

2019-11-23 16:24:11 238

原创 P3391 【模板】文艺平衡树(Splay)------文艺平衡树(FHQ)

原题#include<bits/stdc++.h>using namespace std;const int MX=1e5+9;int son[MX][2],laze[MX],siz[MX],val[MX],ran[MX];int Root=0,tot=0;void pushdown(int k){ if( laze[k] ){ swap(son[...

2019-11-15 00:04:43 88

原创 P3644 [APIO2015]八邻旁之桥------FHQ-treap

如果在同一侧就直接ans+=abs(t-s),否则就ans++。#include<bits/stdc++.h>#define ll long longusing namespace std;const int MX=2e5+9;struct node{ ll s,e,k; bool operator<(const node &a)const {...

2019-11-14 11:00:28 92

原创 P3285 [SCOI2014]方伯伯的OJ------平衡树区间储存

#include<bits/stdc++.h>using namespace std;const int N=100500000;int n,m,opt,x,y;int ans,L,R,root;int sum[10000000],cnt;int son[10000000][2];struct node{ int tot; int head[100000...

2019-11-05 20:56:55 95

原创 P1110 [ZJOI2007]报表统计------multiset

首先可以用multiset写,但是会卡常,因为MIN_SORT_GAP问的答案最低为0,所以可以到0之后就不需要管它了,这样可以加快速度300ms左右。

2019-11-03 15:26:16 136

原创 Aeroplane chess------概率dp

原题一道概率dp题,这里尤为要注意的是,必须从后往前dp。1因为:i到节点i+1i+6每个概率都是1/6,但是节点i-6i-1到i点每个概率却不是1/6。2因为:并且比如从a到b有近道,如果从前往后,那么到b的概率和a就一样了,明显这是不可能的。但是,从b到a的话,那一定是dp[a]=dp[b],因为有近道超近道。因为是从后往前,所以有近道超近道。#include<bits/stdc...

2019-11-02 11:05:19 95

原创 String painter------区间dp

原题说实话,dp类型的并不是很常做,这个题解讲的挺不错的------传送门我们可以先求出一段无变成s2所需要的最小次数dp[i][j](将无变成s2的第i到第j个所需要的最小次数),这里的方法是从前向后进行枚举,假如遇到了一样的字符,比如ABCDAE,其中1和5相同,那么dp[1][6]=min(dp[1][6],dp[2][4]+dp[5][6])这样递归。递归完无的dp,就可以进一步递...

2019-11-01 23:50:01 104

原创 Cow Exhibition------变种01背包

原题题目大意:一共有n头牛,每头牛都有个值s[i],f[i]。请从中取一部分牛出来,使得这部分牛的s之和S不为负数,f之和F不为负数,且此时的S+F最大,请输出S+F的值。解题思路:是后来看博客补的,这里使用的是dp的解法,不过,这里dp[i],i储存的是s[i]当前的总和。所以,这样dp表达式很容易就可以出来dp[i]=max(dp[i],dp[i-s[j]]+f[j])但是重点的不是这...

2019-11-01 21:26:45 109

原创 P3369 【模板】普通平衡树------平衡树Treap || FHQ_treap

原题链接#include<bits/stdc++.h>#define il inline#define ll long long#define RE register#define For(i,a,b) for(RE int (i)=(a);(i)<=(b);(i)++)#define Bor(i,a,b) for(RE int (i)=(b);(i)>=(a...

2019-10-31 17:28:25 122

原创 Anniversary party------树形dp

第一次写这种树形dp,尴尬,然后这里用链式向前星会比一般的快很多,然后就没什么要说的了。#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int MX=1e5+9;int n,dp[2][MX],st,u,v,pos[MX];struct no...

2019-10-28 20:12:20 61

原创 经商------并查集+简单dp

平面上有若干个点,从每个点出发,你可以往东南西北任意方向走,直到碰到另一个点,然后才可以改变方向。请问至少需要加多少个点,使得点对之间互相可以到达。第一行一个整数n表示点数( 1 <= n <= 100)。第二行n行,每行两个整数xi, yi表示坐标( 1 <= xi, yi <= 1000)。y轴正方向为北,x轴正方形为东。小d是一个搞房地产的土豪。每个人经商都...

2019-10-28 19:31:06 99

原创 任意点------并查集

传送门方法就是在同一行的是一个集合,在同一列的也是一个集合,先存再一个一个枚举即可。这里主要就是要注意,当所有的点都已经全部连接完毕之后,编号为i的点的祖先并不是fa[i],而是fin(i),因为最后还要进行一次预处理,将所有的点都重新整合一遍(防止出现类似于,1,2,3,4,5是一个集合,那么可能fa[1]=1,fa[2]=1,fa[3]=2,fa[4]=3,fa[5]=3这种情况)#in...

2019-10-28 13:02:57 107

原创 P2444 [POI2000]病毒------ac自动机+dfs

二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码。如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的。现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码。示例:例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101…。如果{01, 11, 000000}为病毒代码段,那么就不存在一...

2019-10-28 11:14:56 124

原创 P3178 [HAOI2015]树上操作------树剖

原题这里要注意的就是,子树要把自己的节点也算进去,还有养成用ll的好习惯,int容易被卡。#include<bits/stdc++.h>#define ll long long#define lson k<<1,l,mid#define rson k<<1|1,mid+1,rusing namespace std;const int MX=1e5+...

2019-10-27 19:35:41 73

原创 P3808 【模板】AC自动机(简单版)------ac自动机

原题,主要就是,因为有很多一样的单词,所以用完一个类型的单词,一定要删掉(也就是初始化为0),然后这是ac自动机不是字典树,注意区别。#include<bits/stdc++.h>using namespace std;const int MX=1e6+9;char s[MX];int n,t[MX<<2][26],pos[MX],fail[MX<<2...

2019-10-26 20:01:42 98

空空如也

空空如也

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

TA关注的人

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