- 博客(259)
- 资源 (1)
- 收藏
- 关注
原创 简单的代码生成程序 SDUT 【编译原理】C++
目录 Description 代码: 分析: Description 通过三地址代码序列生成计算机的目标代码,在生成算法中,对寄存器的使用顺序为:寄存器中存有 > 空寄存器 > 内存中存有 > 以后不再使用 > 最远距离使用 Input 单组输入,给定输出的三地址代码的个数和寄存器的个数.所有的变量为大写字母,寄存器的数量不超过9 Output 参照示例格式输出,不需要将最后的寄存器中的值写回内存,不再使用变量不用写回内存 Sample Input
2022-05-15 19:17:39
1333
1
原创 DAG优化 SDUT 【编译原理】 C++
目录 Description 代码: 分析: Description 大家都学过了代码优化,其中有一个DAG优化,这次我们就练习这个操作。 Input 输入第一行为一个整数n(n < 100),表示该组输入的表达式的个数之后n行为表达式,每个变量为一个字母,表达式仅包括二元运算 + - * / 例如:A=B+C Output 通过构造DAG图,进行代码优化,只需要保留AB,删除无用变量,删除变量时,尽量保留最早出现的变量。PS:保证AB的值不同。 sam...
2022-05-14 18:14:09
6411
3
原创 N - 翻译布尔表达式 SDUT C++
目录 代码: 分析: 代码实现思路: ☆错误ERROR: 代码: #include <bits/stdc++.h> using namespace std; vector <string> ans; //ans中存放的是每个只含and的子bool表达式,在下面分析中有详细说明,这里的判断符长度可能不同,所以用vector与string组合数据结构的正好。 int main() { string boolStr, str; getline(cin, boolSt..
2022-05-01 21:33:42
2949
1
原创 SDUT 表达式语法分析——递归子程序法
目录 Description 题目分析 代码 Description 递归子程序法是一种确定的自顶向下语法分析方法,要求文法是LL(1)文法。它的实现思想是对应文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选式时能够按LL(1)形式唯一地确定选择某个候选式进行推导。请根据下面的表达式LL(1)文法,构造递归子程序,完成对表达式的语法分析。 表达式文法如下: E→TG G→+TG | ε T→FS S→*FS | ε ..
2022-03-26 15:56:16
873
原创 C 走迷宫 SDUT
#include<stdio.h> #include<string.h> struct node { int x, y; }ls[400]; int dx[] = {0,-1,0,1}, dy[] = {-1,0,1,0}; int bj[16][16], map[16][16]; int m, n, step, sum, xz, yz; void dfs(int ...
2022-03-22 14:49:31
501
原创 小C语言--词法分析程序SDUT
Description 小C语言文法 <程序>→<main关键字>(){<声明序列><语句序列>} <声明序列>→<声明序列><声明语句>|<声明语句>|<空> <声明语句>→<标识符表>; <标识符表>→<标识符>,<标识符表>|<标识符> <语句序列>→<语句序列><语句>
2022-03-09 22:14:45
1305
原创 BUUCTF 刷新过的图片 writeup
下载后是一张图片,但是这张图片实在有点。。。 这里题目是刷新过的图片,刷新是F5键呀,这就是一个提示,图片是F5加密,这里如果不知道这种加密就比较难办。 kali:在F5-steganography路径下,执行下面指令。解密后就多了一个output.txt文件。看一下,发现是乱码。用010看一下,发现是压缩包(文件头是50400102)。改一下后缀,解压,这里我忘记解压时有没有输入密码的弹窗,如果有的话应该是伪加密(找到504b后面的14 00后面的两组十六进制数,这就是加密的标记位)。解压后就是flag。
2021-10-15 13:17:15
1715
2
原创 BUUCTF 面具下的flag writeup
下载后是一张图,010打开后后面是压缩包。直接分离出来,解压时发现需要密码,但是暂时找不到密码提示,那就在010里搜索504b,查看每一个后面是否有14 00,这个后面就是加密的标识,发现其他都是00 00,就一个09 00,显然就是伪加密了(如果都是09 00, 可能就不是伪加密了,但这是可能,就算都是09 00也可能是伪加密),手工改成00 00。 解压后是一个wmware的虚拟磁盘文件。 这个可以再kali里解压。 解压后,flag分在了两个文件里,key_part_one和key_part_
2021-10-15 12:47:59
1011
原创 BUUCTF 九连环 writeup
下载后是一张图片,用kali找到里面有文件。用binwalk进行分离。 这里分离有有一个asd文件夹,还有一个压缩包,这个压缩包看看里面的内容发现就是asd文件夹里的东西。这里就没有必要解压这个压缩包了,当然要解压也没问题,但是解压时需要密码,在010edit里面找到最后,发现是一个伪加密。这里为什么说是伪加密呢!压缩包伪加密 这里可以查找504b的十六进制,然后看看每一个504b后面的14 00后面的就是加密标记。把01改成00就可以,08也可以一起改成00。改完就可以解压了(这里注意:只有伪加密的情况
2021-10-15 11:50:36
608
原创 BUUCTF 被劫持的神秘礼物 writeup
原来以为下载有是一个稀奇古怪的文件,但是这就是一个数据包文件直接用wireshark打开就行了,当然如果没有做过web题目或者没有见过,这个文件后缀确实有点奇怪。打开后,既然是找账号密码,那当然是找http流量包,为什么呢!之前做过web题目就知道了,我们到时找个包,找个包一般就是http,然后再这个包里改一下用户名和密码。所以这里的也是在http包中的,直接过滤一下就好了,然后其中有一个login的包,显然就是这个了。 然后选中这个包右键->追踪数据流->http流,然后找到name和Wo.
2021-10-14 22:16:31
692
原创 BUUCTF webshell后门 writeup
下载后是一些PHP文件,既然是webshell后门就用D盾扫描一下。 扫描出来的有两个级别5的,但是题目既然说是后门,其中有一个说明里就是已知后门,我就想先看看这个,结果这里面都是一下base64编码的东西,解码后并没有找到MD5的passWord,所以只能再看看第一个,结果一下就开到了pass的值是一个MD5格式的。那这个就是flag了。 $pass = 'ba8e6c6f35a53933b871480bb9a9545c'; //angel ...
2021-10-11 22:03:21
999
原创 BUUCTF 来首歌吧 writeup
下载后是一个音频文件,先听一下,啥也听不出来,用MP3Stego好像不行,那就扔到Audacity里面看一下。 这里上面显然使用东西的,但是好像是摩斯密码,但是又好像不是,这里需要按住Ctrl+滚轮放大。 原来的时候每一小段其实就是一个摩斯密码,但是因为太小所以就成一段了,放大后很明显是一组一组的长短小段,可能就是摩斯密码,但也有可能是01串,但是01串应该不会有间隔,所以十有八九是摩斯密码。莫斯密码是".-"串,这里短的是点,长的是上划线。 ..... -... -.-. ----. ..--- ..
2021-10-11 21:56:31
1110
原创 BUUCTF 后门查杀 writeup
这里题目中说了,flag是密码,那就可以挨个找password这个关键字,但是真正的flag不是password,而是pass有一点点坑。使用D盾进行扫描文件夹,就可以找出网站的后门。 flag就在级别最高的那个文件里,这里有路径,找到这个文件,就可以得到flag。 ...
2021-10-11 19:50:09
1068
原创 BUUCTF 另一个世界 writeup
解压后得到一张图片,直接用010editor打开,再有后面发现一串01数字,一开始我以为是画一个二维码,结果发现长度为56,所以不是二维码,而是简单的二进制数,直接转化为16进制,然后转为字符串。 import binascii flag = hex(int('01101011011011110110010101101011011010100011001101110011', 2)) print(flag) flag = binascii.a2b_hex('6b6f656b6a3373') print(
2021-10-10 17:06:14
560
原创 BUUCTF 被嗅探的流量 writeup
这里下载后就是一个包,用wireshark打开,因为需要寻找文件类型,所以就找POST提交方式的包。 flag就在第二个包里。
2021-10-10 16:15:48
395
原创 BUUCTF zip伪加密 writeup
zip伪加密原理及操作 这里直接把14 00 后面的09改成00就可以了,这个09就表示压缩包加密了,解压的时候就会弹框输入解压密码。
2021-10-10 15:41:50
465
原创 BUUCTF LSB writeup
题目说的很清楚,是一个lsb隐写。直接用stegslove打开。 然后按动这个尖括号,查看每个颜色图层。 这里发现红绿蓝三色的最低位的顶部明显不对。所以直接选择红绿蓝三色的最低位,点击preview。 查看头部发现这是个png图片。点击save bin,保存为png图片形式。然后得到下面的二维码,扫描就得到flag。 这里需要把括号外面的换成flag,题目中明确说了。 ...
2021-10-10 15:22:28
424
原创 BUUCTF 基础破解 writeup
打开后是一个加密的压缩包,很显然题目中说了密码是一个四位数字,所以可以使用暴力破解的方法。 然后解压借的到了flag。
2021-10-10 15:11:15
551
原创 BUUCTF N种方法解决 writeup
下载后是一个可执行文件,但是又是在misc里的题目一般先丢到010Editor里,果然是一个图片的base64的编码。这里有很多方法,可以使用在线工具,或者使用一个HTML里的img标签。 再有浏览器打开就可以直接解析。解析出来是一个二维码,可以使用手机扫码,也可以使用工具。 ...
2021-10-10 14:55:03
1004
原创 BUUCTF Alice与Bob writeup
题目描述: 密码学历史中,有两位知名的杰出人物,Alice和Bob。他们的爱情经过置换和轮加密也难以混淆,即使是没有身 份认证也可以知根知底。就像在数学王国中的素数一样,孤傲又热情。下面是一个大整数:98554799767,请分解为 两个素数,分解后,小的放前面,大的放后面,合成一个新的数字,进行md5的32位小写哈希,提交答案。 注意: 得到的 flag 请包上 flag{} 提交 这里的大整数虽然很大,但是需要找它的两个因数,所以暴力的算法也只有根号n的时间复杂度。 跑出来的结果是:101999 96
2021-10-09 17:30:33
708
原创 BUUCTF 丢失的MD5 writeup
import hashlib for i in range(32,127): for j in range(32,127): for k in range(32,127): m=hashlib.md5() m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM') des=m.hexdigest() if 'e9032' i
2021-10-09 16:50:06
920
1
转载 Linux学习笔记5——拷贝和移动文件
我们介绍三个有关的命令 命令 对应英文 作用 tree[目录名] tree 以树状图列出文件目录结构 cp源文件 目标文件 copy 复制文件或者目录 mv源文件 目标文件 move 移动文件或者目录/文件或者目录重命名 1.tree tree命令可以以树状图列出文件目录结构 选项-d 表示只显示目录 2.cp cp命令的功能是将给出的文件或目录复制到另一个文件或目录中,相当于DOS下的copy命令 选项 含义 -f 已经存在的目标文件直接覆盖,不会提示 -
2021-09-26 16:59:36
339
转载 Linux学习笔记4——创建和删除
1.touch 如果文件不存在,可以创建一个空白文件 如果文件已经存在,可以修改文件的末次修改日期 如1a.txt原来存在,touch后修改日期就变化了。 2.mkdir 创建一个新目录 选项-p表示可以递归创建目录 新建目录的名称不能与当前目录中已有的目录或文件同名。 如用-p递归的创建a1/b1/c1/d1/文件夹 命令为 mkdir -p a1/b1/c1/d1 或 mkdir -p ~/桌面 a1/b1/c1/d1 3.rm 删除文件或目录,且删除之后不能恢复。 参数 含义 -f
2021-09-26 16:51:58
256
转载 Linux学习笔记3——cd命令
1.cd cd英文单词change directory的简写,其功能为更改当前的工作目录。 注意:Linux所有的目录和文件名都是大小写敏感的 命令 含义 cd 切换到当前用户的主目录(/home/用户目录) cd ~ 切换到当前用户的主目录(/home/用户目录)~就是表示当前用户的主目录 cd . 保持当前目录不变 cd … 切换到上级目录 cd - 可以在最近两次工作目录之间来回切换 如: 在~目录下pwd,输出/home/alexlu就是当前用户的主目录,说明~
2021-09-26 16:45:23
203
转载 linux学习笔记2——ls命令说明
ls是list的简写,功能是列出目录的内容,类似于DOS下的dir命令。这篇学习笔记主要介绍ls命令相关知识。 一.Linux下文件目录的特点 蓝色字体代表文件夹,白色字体代表文件 1.Linux文件或目录最多有256个字符 2.以“.”开头的文件是隐藏文件,需要用指令 ls -a 才能显示 3.“.”表示当前目录—— cd . 表示打开当前目录 4.“…”表示上一级目录——cd … 表示打开上一级目录 二.ls常用选项 参数 含义 -a 显示指定目录下所有子目录与文件,
2021-09-25 17:21:01
939
转载 Linux使用笔记1 基本终端指令
Linux学习笔记,自己学一点就记一点,好记性不如烂笔头。 本篇学习笔记介绍最常用的Linux终端相关命令。 终端快捷键 1.Ctrl + Alt + t 打开终端 2.Ctrl + Shift + = 放大字体 3.Ctrl + - 缩小字体 4.Tab 自动补齐命令或文件名 5.Ctrl + c 退出当前命令 终端常用命令 1.ls list 查看当前文件夹下的内容 2.pwd print work directory 查看当前所在文件夹 3.cd[目录名
2021-09-25 17:11:22
226
原创 SDUT java 单词和字符鉴别器
Description 读入包含若干个单词的文本数据,将所有内容转换为大写,统计每个单词与该单词的出现次数。此外,还需要统计每个字符及其出现次数(不包括空格)。 Input 若干行的单词,以空格作为分隔符,每行单词数量不定。 遇到一行数据“0000”,读取数据结束。(字符串“0000”不计入上述统计数据) Output 全部数据读取完成,输出如下信息: (1)出现次数最多的单词及其出现次数;若次数相同,输出字典序最大的单词。 (2)出现次数最少的单词及其出现次数;若次数相同,输出字典序最小的单词。 (.
2021-01-21 10:31:59
1594
5
原创 SDUT java - 手机键盘
Description 大家应该都见过那种九键的手机键盘,键盘上各字母的分布如下图所示。 当我们用这种键盘输入字母的时候,对于有些字母,往往会需要按多次键才能输入。 比如:a, b, c 都在“2”键上,输入 a 只需要按一次,而输入 c 需要连续按三次。 连续输入多个字母的规则如下: 1、如果前后两个字母不在同一个按键上,则可在输入前一个字母之后直接输入下一个字母,如:ad 需要按两次键盘,kz 需要按 6 次。 2、如果前后两个字母在同一个按键上,则输入完前一个字母之后需要等待一段时间才能输入下一个字
2020-11-27 19:41:31
287
原创 SDUT C++ 7-11 悄悄关注 (25分)
新浪微博上有个“悄悄关注”,一个用户悄悄关注的人,不出现在这个用户的关注列表上,但系统会推送其悄悄关注的人发表的微博给该用户。现在我们来做一回网络侦探,根据某人的关注列表和其对其他用户的点赞情况,扒出有可能被其悄悄关注的人。 输入格式: 输入首先在第一行给出某用户的关注列表,格式如下: 人数N 用户1 用户2 …… 用户N 其中N是不超过5000的正整数,每个用户i(i=1, …, N)是被其关注的用户的ID,是长度为4位的由数字和英文字母组成的字符串,各项间以空格分隔。 之后给出该用户点赞的信息:首先给
2020-11-07 11:07:22
320
原创 2397 分类游戏 java SDUT
Description 分类游戏很适合于对儿童的教育,可以让他们通过游戏了解更多的事物,学习更多的知识。我们要实现的分类游戏很简单,是基于单词的分类游戏。我们给出两个或三个类别,比如说单词的首字母,有以B开头的字母和以C开头的字母两类,也可能有三类。然后给出若干个图片代表这两种分类里面的事物,这样孩子可以把下面的物品拖到对应首字母的篮子里,对了加分,错了减分。 作为写程序的人怎么可以忍受,于是你决定写一个外挂,瞬间秒杀,直接满分。假设你已经获得了数据,虽然有时候这是最难的部分,但今天我们只考虑外挂要实现的
2020-11-05 17:52:58
234
原创 SDUT java 字符串扩展
Description Tom有些时候为了记录的方便,常常将一些连续的字符用扩展符’-‘简单表示。比如abcdefg可以简写为a-g,即用起始的字符和终止字符中间加上一个扩展符’-‘来表示这个字符串。但是为了处理的方便,Tom又必须将这些我们简单记法扩展成原来的字符串。很明显要是人工来做的话必定很麻烦,Tom知道计算机可以帮助他完成这个任务,但是他却不会编程,这的确让他很上火。他知道今天是山东理工大学第三届ACM校赛的日子,届时来自全校的编程爱好者都会来参加比赛,他很兴奋,因为这个困惑他良久的问题终于要.
2020-10-30 20:02:45
341
4
原创 c++ H - Half Nice Years Gym - 101840H SDUT
题目大意:有n个区间[L,R],找出满足下满条件的最大的数: 1. 将该数平分成两部分,如果该数的位数是奇数则让右侧部分比左侧部分多一位,如123456分成123和456两部分,12345分成12和345两部分,我们把这两部分分别叫pre和past。 2. 使得这两部分的最大公约数大于1. 解题思路:如果直接暴力解决从R开始一个一个判断到L,知道找到符合题意的,可能会超时。这里需要用到素数的部分内容, 区间最大为11-1e13,所以平分成两部分最大不会超过1e7,找出小于1e7的所有素数。 我们从n=R..
2020-08-25 20:10:23
320
原创 c++ G - Sphenic numbers Gym - 101243G SDUT
题目大意:给定一个整数判断是否为三个不同素数的乘积 解题思路: 因为是将一个整数分解成3个素数,所以我们想到唯一分解定理: 任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积 N=P1a1P2a2P3a3…Pnan,这里P1<P2<P3…<Pn均为质数,其中指数ai是正整数。这样的分解称为 N 的标准分解式. #include<bits/stdc++.h> using namespace std; /*自定义函数*/ int fenjie(.
2020-08-21 09:44:12
204
原创 c++ B - Hanoi tower Gym - 101243B SDUT
题目大意:用一个汉诺塔,本题中的汉诺塔和一般汉诺塔有相同的规则,但是这道题求得是,当三个柱子上的盘子相等(也就是每个柱子上有N/3个盘子,这里的N mod 3 == 0)时的最小步骤 解题思路: 本题不能使用常规的递归,因为数据很大(递归一般在40以内可以递归,但这道题N 最大为300)。 本题其实是找规律的题:只是规律比较难找 N = 3 6 9 12 15 18 sum = 2 9 38 135 542 ...
2020-08-20 21:25:17
204
原创 c++ H - Islands Gym - 101291H SDUT
You are mapping a faraway planet using a satellite. Your satellite has captured an image of the planet’s surface. The photographed section can be modeled as a grid. Each grid cell is either land, water, or covered by clouds. Clouds mean that the surface c.
2020-08-18 11:21:13
258
原创 c++ A - Alphabet Gym - 101291A SDUT
A string of lowercase letters is called alphabetical if deleting zero or more of its letters can result in the alphabet string “abcdefghijklmnopqrstuvwxyz”. Given a string s, determine the minimum number of letters to insert anywhere in the string to make.
2020-08-18 11:03:44
326
原创 c++ M - Zigzag Gym - 101291M SDUT
Your Ph.D. thesis on properties of integer sequences is coming along nicely. Each chapter is on a different type of sequence. The first covers arithmetic sequences. Subsequently you cover binomial sequences, computable sequences, decreasing sequences, and.
2020-08-18 10:50:51
225
原创 c++ H - Sudoku HDU - 5547 SDUT
这就是一个数独的题目:给你一个不完整的数独,该数独是1 2 3 4 这四个数组成的,你的目的就是输出一个填充完整的数独。 数独:每一行和每一列中的数字都是不相同的,但是本题中还有一个条件,就是在这个44的数独中它的左上左下右上右下的四个22的小矩阵也是不相等的四个数。 思路:遍历整个图,采用深度优先搜索是的回溯思想,先从第一个元素开始判断1 2 3 4 这四个数中那个数填上不会产生矛盾(只是填该位置的这个数是不会产生矛盾,但是填上这个数可能岁后面的数产生影响),直到填到一个*无法填1-4的任意一个数,...
2020-08-13 19:45:14
286
原创 c++ G - Ancient Go HDU - 5546 SDUT
这是一个棋盘的题目: 题目大意:在一个9*9的矩阵中有‘x’ ‘o’ '.‘三种字符,目的是只添加一个’x’让‘o’字符不与’.'直接相连,这里的’o’可以是一个或者是几个,也就是添加一个’x’使得’x’包围’o’ 思路:输入图后遍历整个图,遇到’o’从该点进行广度优先搜索,搜索的终点是‘x’和 ‘.’ ,其中当遇到 ‘.’ 时用一个计数变量累加,搜索完后判断一共遍历到几个 ’ . ’ 。 #include <iostream> #include <string.h> u...
2020-08-13 19:28:59
217
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅