• 2024-09-15条件编译 - 代码裁剪的工具 --进阶C语言
    目录条件编译-代码裁剪的工具为何要有条件编译条件编译都在那些地方用?见一见条件编译的代码宏是否被定义vs宏是否为真or假编译器也能够自动帮你加上宏GCCVS2023-VS2019#ifdef/#ifndef#if注意事项让#if和#ifdef/#ifndef完全一样条件编译也支持嵌套一个使用#ifdefined能起到很
  • 2024-09-11ABC246Ex 01? Queries(动态 DP)
    题意给定长度为\(n\)的字符串\(s\),只包含0,1,?,其中?可以任意替换为0和1。再给定\(q\)次单点修改,修改后查询字符串本质不同的子序列个数,对\(998244353\)取模。\(n,q\le10^5\)分析考虑没有修改怎么做。首先跟SA没有任何关系。设\(f_{i,0/1}\)表示考虑前\(
  • 2024-09-11P3730 曼哈顿交易(经典题,莫队+值域分块)
    记录这一类很典的题目。题意给定\(n\)个数,\(q\)次询问区间\([l,r]\)内出现次数第\(k\)小的数的出现次数。若区间内不同数的个数小于\(k\)输出-1。\(n,q\le10^5\)。分析发现正常的数据结构以及分块都很难维护这种信息,考虑莫队。莫队加入数时,我们需要更新一个数的
  • 2024-09-10P10408 「SMOI-R1」Apple
    据说是个典,记录一下吧。题意给你\(\{a_{2^n}\}\)和\(q\)次操作,下标从0开始。操作如下:1x,表示查询\(\sum_{y\operatorname{or}x=x}a_y\)的值。2xv,表示\(a_x\leftarrowv\)\(n\le20,q\le3\times10^5\)。分析令\(y\)为\(x\)的子集当且仅当\(y\operatorna
  • 2024-09-09栈迁移(详解)
    栈迁移原理栈迁移主要利用了leave_ret这个指令leave返回上级函数时,恢复原本的栈空间leavemovesp,ebppopebpret返回上级函数后,执行上级函数的命令ret等同于popeip(不存在这样的指令esp'''ebpret在函数的先执行到leave指令时,会将ebp处填充的地址pop到ebp中去
  • 2024-09-09羊城杯比赛pwn复现
    title:羊城杯比赛pwn复现date:2024-09-0520:12:19categories:ctf-比赛复现首先推荐这个博客本篇学习的思路来自这个大佬实力有限,只复现出了pstack这一题pstack知识点这个题目是个很经典的栈迁移的题目,因为栈溢出的空间不够,但是常规的栈迁移一般有方法获得一
  • 2024-09-09Linux网盘,编程者的选择,让技术为数据服务,创造无限价值!“#Linux系统编程《网盘项目》
    "Linux网盘,编程者的选择,让技术为数据服务,创造无限价值!"#Linux系统编程《网盘项目》前言预备知识一、项目功能二、程序基本框架2.1服务器程序流图2.2客户端程序流图三、程序代码解析3.1服务器代码解析3.1.1主函数代码解析3.1.2信息处理函数代码解析3.1.3获取命
  • 2024-09-06Round 970
    A.Sakurako'sExam算法:模拟具体思路:a个1,b个2,使他们的和为0;规律:1.当两个数中,一个数不存在时,另一个数的个数必须要有偶数个2.当1有偶数个时,2可以有奇数个或者是偶数个3.当1有奇数个时,如何都不满足;反思:不要着急,慢慢想ACCode#include<bits/stdc++.h>usingnamespace
  • 2024-08-28Hitachi Vantara Programming Contest 2024(AtCoder Beginner Contest 368)F - Dividing Game
    https://atcoder.jp/contests/abc368/tasks/abc368_f#include<bits/stdc++.h>#definexfirst#defineysecondusingnamespacestd;typedeflonglongll;typedefpair<ll,char>pii;constintN=2e5+10,inf=1e9;lln,m,k;intb[N],sg[N],a[N];vector
  • 2024-08-11GOT & PLT 易于理解的个人笔记
    为什么我们用动态链接和GOT表我们知道静态链接就没那么多事,直接把全部要用的函数都绑定在一起,各个变量和函数之间的偏移量当然能算出来。但是这也恰恰是静态链接的缺点,相同的代码段反复调用真是太臃肿了!于是我们决定把常用的库单独拿出来给大家用,我们还知道,.text是不可修改的,
  • 2024-07-31死亡之组
    建立【正向目标】——1号队伍所在的组至多一支队伍的实力不小于L,实力极差超过D点击查看代码#include<bits/stdc++.h>usingnamespacestd;structt1{ inta,id;}t[100005];boolcmp(t1a,t1b){ returna.a<b.a;}intread1(){ charcc=getchar(); while(!(cc>=
  • 2024-07-30BUU_ciscn_2019_c_1
    ciscn_2019_c_1先查看保护机制,64位开了NX保护发现应该是用不了ret2syscall的v4是格式化输入的,不存在溢出55[v4!=2退出里面的小循环,=1进入encrypt()函数]{.kbd.red}看到s和gets(),填充为0x50+8发现puts()->re2libc然后程序有一个死循环:::warningif(v0>=strlen(s)
  • 2024-07-30CTF_PWN_栈ROP
    栈溢出原理先把基本栈溢出原理说清楚,上图可能不太清晰。自己的话讲就是函数A原本rbp和rsp,call调用函数B后,rbp上去变成rsp,原本的rsp随着函数B各种参数,寄存器balabala继续往栈顶生长.调用B完再逆操作,回到函数A,rbp回到函数A的返回地址,rsp回到函数B底部,leave之后ret进入A
  • 2024-07-27哈希表
    拉链法#include<iostream>usingnamespacestd;constintN=100003;//N设为1个质数inth[N];inte[N],ne[N],idx;//y总的找质数voidf(){ for(inti=100000;;i++) { boolflag=true; for(intj=2;j*j<=i;j++) if(i%j==0) {
  • 2024-07-27并查集
    一共两个操作:合并和查询。开始是没有并集的,得先合并再查询。#include<iostream>usingnamespacestd;constintN=100010;intp[N];intn,m;//p[x]=find(p[x]),直到找到它的祖宗节点,之后返回祖宗节点的值,//每个节点的父节点的值都会变成祖宗节点的值,至此实现了路径压
  • 2024-07-23(XGCTF)西瓜杯pwn部分wp
    (XGCTF)西瓜杯pwn部分wp1.嘘嘘嘘程序保护情况没有开canary,64位ida逆向看这,陌生吧,c++写的程序,所以看起来比较奇怪分析一下,一上来向,buf和v5各写入4字节数据,如果两者之和大于32就会退出,否则答应buf+v7处,v5字节的数据,说白了就是不让溢出。继续exec函数中会判断this+8处的
  • 2024-07-22题解:CF1349B Orac and Medians
    洛谷|CF刷一些CF2000,进行一个录的记。思路记录首先观察到数列里的数不能凭空产生,所以初始序列必须含\(k\)。由于两个数的中位数是较小的那个,所以只要有一个与数列里的\(k\)相邻且比\(k\)大的数,就可以扩展到整个序列。发现可以把第二条推广一下,不必要和\(k\)相邻,因
  • 2024-07-19c语言学习
    double中用%lf进行输入scanf("%lf",&x); .在整型数组中用%d进行输入scanf("%d",&a); 注意:数组名必须带取地址符&  注意:此时&a传输的是首地址   4.在字符串数组中用%s进行输入scnaf("%s",a); 注意:数组名不能带取地址符& scanf("%s",a)函数输入字
  • 2024-07-19数字IC——TCL语言2
    (接上一篇)http://t.csdnimg.cn/eChQlhttp://t.csdnimg.cn/eChQl目录三、控制流四、过程函数五、正则匹配六、文本处理 三、控制流if 条件判断语句新建test.tcl文件,写入以下内容:seta3setb2if{$a>$b}{puts$a}else{puts$b}注意事项
  • 2024-07-14Toyota Programming Contest 2024#7(AtCoder Beginner Contest 362)
    这场比赛还是比较水的A,B,C跳过D题dij把点权和边权都转换为边权即可E题DP可以用\(map\)存一下等差数列的差先说\(O(n^4)\),\(f_{len,i,j,t}\)分别表示长度,现在在\(i\),上一个在\(j\)显然动态转移方程就有了\(f_{len,i,j,k}=\sum_{k=1}^{k=j-1}f_{len-1,j,k,t}\)点击查看
  • 2024-06-17A. Bear and Prime 100
    原题链接题解1.如果是一百以内的合数,那么一定可以由两个不大于50的质数组成2.交互题关键就在于询问和返回的结果cout<<''';fflush(stdout);cin>>...code#include<bits/stdc++.h>usingnamespacestd;boolcheck(intx){for(inti=2;i*i<=x;i++){i
  • 2024-06-13第一个c语言程序
    我们有两种方式从计算机获得信息:一是看屏幕上的文字、图片、视频等,二是听从喇叭发出来的声音。让喇叭发出声音目前还比较麻烦,我们先来看看如何在屏幕上显示一些文字吧。在屏幕上显示文字非常简单,只需要一个语句,例如,下面的代码会让屏幕显示出“C语言中文网”:puts("C语言中文网
  • 2024-06-1310.C语言for循环和跳出循环的知识点
    C语言for循环、continue和break知识点3.13for循环3.14for的一些用法3.15continue和break的作用3.16嵌套的规律3.17—作业3.13for循环概述和while的对比#include<stdio.h>intmain(){ intdata; //for(条件附初值;判断临界点;条件改变)//判断、执行循
  • 2024-06-12C. Ladder
    原题链接题解找到每一个点右边能递增多远和左边能递增多远code#include<bits/stdc++.h>usingnamespacestd;inta[100005],r[100005],l[100005];intmain(){intn,m;cin>>n>>m;for(inti=1;i<=n;i++)cin>>a[i];r[n]=n;for(inti=n-1;i>
  • 2024-06-07scanf(),gets(),puts(),fgets()函数的使用
     scanf()scanf按%d输入数字或%s输入字符串时,忽略空格、回车或制表符等空白字符(被作为数据的分隔符) intmain(){ inta=0; intb=0; charc[12]; scanf("%s",&c); printf("c=%s",c); return0;}空格后面的world没有被读进去加一句scanf语句,world被读走了in