自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【CS106L Winter 2025】C++入门课,全过程记录(完结撒花)

CS106L 是斯坦福大学的一门 C++ 进阶课程,专注于 现代 C++ 语法、标准库(STL)和工程实践。它是 CS106B(数据结构与算法)的补充课程,适合已经掌握基础编程技能的学生,希望进一步深入了解 C++ 语言及其最佳实践。课程主页。

2025-03-02 13:47:47 988

原创 【CS61A 2024秋】Python入门课,全过程记录P7(Week13 Macros至完结)【完结撒花!】

笔者是学生,课业还是比较繁重的,可能回复不及时。笔者也正在四处寻找一些可以兼职锻炼知识并且补贴一些生活的工作,如果读者需要一些详细的辅导,或者帮助完成一些简易的lab也可以找我,笔者还是学生,自以为才学有限,也没有高价的理由📖。可以发现,cs61a归档了,而这个网站是需要Berkeley账号的,还是没法登录。反引号是给宏展开,列表内元素有逗号的后面的元素所在子列表会进行eval操作。首先找到有父母的狗,再对应上父母的体重,再根据父母体重排序。创建表格的方法第一次见,是通过UNION实现的。

2025-02-11 23:53:34 1226

原创 【CS61A 2024秋】Python入门课,全过程记录P6(Week12 Interpreters到Week12 Programs as Data)

笔者也正在四处寻找一些可以兼职锻炼知识并且补贴一些生活的工作,如果读者需要一些详细的辅导,或者帮助完成一些简易的lab也可以找我,笔者还是学生,自以为才学有限,也没有高价的理由📖。Frame类实现的是一个作用域,define定义了当前frame的bindings,lookup依次查询当前和各级parent的Frame的bindings。要注意了,子frame定义lamda的参数列表和传入的实际参数的映射关系。布尔表达式,提供了判断真假的函数,注意空的时候的取值。,里面偶尔更新,最近比较忙。

2025-02-07 22:57:36 452

原创 【CS61A 2024秋】Python入门课,全过程记录P5(Week8 Inheritance到Week11 Calculator)

CS61A是加州大学伯克利分校(UC Berkeley)计算机科学专业的入门课程,全名为Structure and Interpretation of Computer Programs。这是入门的Python课程,因此这篇博客会默认读者没有很多的编程背景,讲的东西会比较基础,有编程经验的读者可以快速浏览。首先贴上课程网址。CS61A课程主页。

2025-02-02 22:42:08 990

原创 【CS61A 2024秋】Python入门课,全过程记录P4(Week7 Generators到Week7 Ants)

CS61A是加州大学伯克利分校(UC Berkeley)计算机科学专业的入门课程,全名为Structure and Interpretation of Computer Programs。这是入门的Python课程,因此这篇博客会默认读者没有很多的编程背景,讲的东西会比较基础,有编程经验的读者可以快速浏览。首先贴上课程网址。CS61A课程主页。

2025-01-29 23:09:28 537

原创 【CS61A 2024秋】Python入门课,全过程记录P3(Week5 Sequences到Wee6 Iterators)

CS61A是加州大学伯克利分校(UC Berkeley)计算机科学专业的入门课程,全名为Structure and Interpretation of Computer Programs。这是入门的Python课程,因此这篇博客会默认读者没有很多的编程背景,讲的东西会比较基础,有编程经验的读者可以快速浏览。首先贴上课程网址。CS61A课程主页数据抽象。学习字典,是python内置的哈希表。用花括号表示,和列表类似,也能用for循环产生一大堆键值对。

2025-01-23 23:04:59 581

原创 使用ffmpeg提高mp4压缩比,减小文件体积【windows+ffmpeg+batch脚本】

FFmpeg支持几乎所有的音视频格式,是非常强大的一个多媒体工具集。ffmpeg_path写你下载的ffmpeg.exe的位置路径,crf数值越高压缩比越强。其实用任何脚本都可以的,本质是一样的,下面使用Windows上最容易运行的cmd的batch脚本。情景是这样的,需要笔者遇到需要提交一个演示视频的情景,使用的是Windows自带的录屏工具。如何确定ffmpeg的路径使用windows风格的路径格式即可,找到ffmpeg.exe,右键复制路径去掉双引号即可。但是,默认录屏得到的文件非常大。

2025-01-18 16:45:37 1277

原创 【CS61A 2024秋】Python入门课,全过程记录P2(Week3 Environments到Week4 Tree Recursion)

CS61A是加州大学伯克利分校(UC Berkeley)计算机科学专业的入门课程,全名为Structure and Interpretation of Computer Programs。这是入门的Python课程,因此这篇博客会默认读者没有很多的编程背景,讲的东西会比较基础,有编程经验的读者可以快速浏览。首先贴上课程网址。CS61A课程主页感觉课程主页还是非常精美的,相比MIT6.828的课程主页来说。这篇博客也根据日程表的日程来编写。本次讲函数抽象。

2024-11-24 23:47:23 925 9

原创 Vim的简单使用

会尽量避免图片的使用,方便代码仓库的更新。一些名词会进行解释,在编号较小的文章里面解释过的会减少解释,或者不解释。如果有纰漏还请指正,笔者还是个newbie。

2024-10-29 23:46:14 1286

原创 【CS61A 2024秋】Python入门课,全过程记录P1(Week1到Week2 Hog)

CS61A是加州大学伯克利分校(UC Berkeley)计算机科学专业的入门课程,全名为Structure and Interpretation of Computer Programs。这是入门的Python课程,因此这篇博客会默认读者没有很多的编程背景,讲的东西会比较基础,有编程经验的读者可以快速浏览。首先贴上课程网址。CS61A课程主页感觉课程主页还是非常精美的,相比MIT6.828的课程主页来说。这篇博客也根据日程表的日程来编写。

2024-10-29 23:42:58 2348

原创 Educational Codeforces Round 154 (Rated for Div. 2)【A-E+F(手动翻译)】

分两种小清空,首先,如果bad栈是空的,为了让0合法,必须找个位置设置逆序,对于0我们有多个位置选择逆序,这些位置对于0而言都是等价的,但是必须取,但是对于后续的1的影响是不同的,为了后面的1更好的合法,后面的1所更改的范围是有限的,为了更好地覆盖前面逆序的位置,我们选取逆序的位置必须尽量靠后,所以我们取may栈顶的数作为逆序位置。实际上,第三维度可以省略,每次我们凑出一个完整的后缀的时候,直接计算当前这个后缀对最后的答案的贡献,相当于把原来最后求答案的过程,分散到循环当中,边递推边求答案。

2023-09-19 19:25:10 681

原创 Codeforces Round 894 (Div. 3) 【题解A-G】

我们考虑以每个点结束的情况,此时消耗的量是固定的,我们要求最大的值,只需要贪心选取最大的m个正值,当然,不一定有m个正值,就是当前节点的最优的情况。思路:在某一秒之后,水魔法和火魔法可以瞬间消灭所有的怪兽,其中水魔法消灭了若干只怪兽,火魔法消灭了若干怪兽,我们只要算出两种魔法分别消灭的怪兽的力量和,除以每秒产生的魔法数,分别向上取整,取大就能得到,当前怪兽分配的最小时间。题意:给你一个数组,此处有一个机器,输入一个数组,进行如下操作,排序,去重,假如有n个数,分别加上,n , n-1, …

2023-09-08 17:04:50 810

原创 Dos系统的Debug工具简单使用(2023.9.7)

上面我首先展示了一下各个寄存器的值,我们可以看到,DS寄存器存的值是0740,DS寄存器存的是默认的段地址,不指定另外的段地址的时候默认的段地址,IP寄存器则是默认的偏移地址,然后我用a指令,吧ax,3f20写入内存,注意,存的时候是按字节低位在前。-g首先指定一个程序的开始地址,后面指定断点,如果不指定断点的话,会运行到程序结束。补充说明:在8086CPU有20根地址总线,所以物理地址是20位的,但是寄存器是16位的,所以物理地址是这样表示的,段地址:偏移地址,物理地址是段地址X16+偏移地址。

2023-09-07 17:24:59 541

原创 Go学习[合集]

此处我们有一个结构体n给空接口a赋值(空接口没有方法,相当于方法被n给完全实现,所以是可以赋值给接口的),然后我们想把接口赋值给具体的结构体对象,但是,这里会报错,需要使用类型断言的语法。从上面我们可以看到,在声明一个接口之后,我们用工厂方法法obj对应接口的所有方法给实现了,然后另外整一个抽象类似的的结构体,绑定一个方法运行接口,这样我们就能通过接口把这两个类给链接在一起。函数和引用的外部变量构成了闭包,相当于一个类,第一次调用得到一个匿名函数,可以类比成一个构造方法,构造出了一个类,n是类的一个成员。

2023-09-04 19:50:20 2362

原创 # Go学习-Day10

如果传入指针类型的话(反射常常需要改变原来的值)指针类型需要.Elem方法取到值,再用.SetInt之类的方修改原来的值。反射可以在运行时,动态获取变量的各种信息,例如类型,结构体本身的信息,修改变量的值,调用关联的方法。用telnet呼叫一下 telnet 127.0.0.1 8888。变量到空接口相互转换,空接口和reflect.value相互转换。reflect.Value.Kind返回的是常量。Kind是大的种类,Type是小的类型。通过端口就能和对应的程序进行交流。常量在定义的时候必须初始化。

2023-09-04 19:48:43 852

原创 freee Programming Contest 2023(AtCoder Beginner Contest 310)

非常大,我们要用快速幂的思想,蓝色第二排,也就是绿色第三排,绿色第四排的和,注意看,绿色第三排的球来自绿色第一排传两次的球,绿色第四排的球来自绿色第二排传两次的球,如果我们把绿色第一排和绿色第二排作为一个整体,那么相当于,这个整体连传两次球到绿色第三排和绿色第四排的整体,我们对传球关系进行迭代运算,可以得到右侧蓝色两排传直球的关系,经过这样的操作,总排数便减少了一半。思路:dp即可,dp表示所有以i结尾的非零后缀数,如果这位是0,那么,此处的贡献是i-1(注意这个运算,0的话任意后缀均可,除了单个零);

2023-08-31 14:17:15 299

原创 # Go学习-Day9

但是这样不同协程之间没办法通讯,不知道什么时候协成完成任务了,白白空转浪费时间,或者提前结束主线程,终止协程,管道可能能解决这些问题,明天再学。Go语言的协程是轻量级的,是逻辑态的,可以起上万个协程;go关键字会另起一个协程,主线程执行到这里会开一个协程并行执行,如果主线程执行完毕退出,协程会被强制退出。testing框架会将xxx_test.go的文件引入,调用所有TestXxx的函数。主线程读的时候也需要加锁,因为底层不知道协程已经解锁了,会发生资源冲突。协程类似线程,是轻量级的线程。

2023-08-28 21:57:31 532

原创 # Go学习-Day8

但是这样不同协程之间没办法通讯,不知道什么时候协成完成任务了,白白空转浪费时间,或者提前结束主线程,终止协程,管道可能能解决这些问题,明天再学。Go语言的协程是轻量级的,是逻辑态的,可以起上万个协程;go关键字会另起一个协程,主线程执行到这里会开一个协程并行执行,如果主线程执行完毕退出,协程会被强制退出。testing框架会将xxx_test.go的文件引入,调用所有TestXxx的函数。主线程读的时候也需要加锁,因为底层不知道协程已经解锁了,会发生资源冲突。协程类似线程,是轻量级的线程。

2023-08-27 22:12:30 823

原创 # Go学习-Day7

此处我们有一个结构体n给空接口a赋值(空接口没有方法,相当于方法被n给完全实现,所以是可以赋值给接口的),然后我们想把接口赋值给具体的结构体对象,但是,这里会报错,需要使用类型断言的语法。用.(类型)类声明a的类型。如果类型不匹配的话,就会报panic,通过这个方法,可以判断接口个具体类型,执行特定操作。类型断言之后,编译器会判断这个变量是否是指向这个类型,如果是,就转换成这个类型来赋值。首先打开文件,然后按行读取,注意读到EOF要结束死循环。就是把抽象的接口转换成具体的类型的方法。

2023-08-26 21:55:47 783 1

原创 # Go学习-Day6

从上面我们可以看到,在声明一个接口之后,我们用工厂方法法obj对应接口的所有方法给实现了,然后另外整一个抽象类似的的结构体,绑定一个方法运行接口,这样我们就能通过接口把这两个类给链接在一起。Go语言没有implements关键字,只要一个变量类型,绑定了接口中所有的方法,这个变量就能实现这个接口。相似的类具有相似的方法,反复绑定相同的方法,代码冗余,所以引入了继承的概念。interface类型可以定义一组方法,方法不用实现,并且不能含有变量。基本数据类型可以匿名,但是不能出现多个相同类型的匿名基本类型。

2023-08-25 22:17:20 385

原创 # Go学习-Day5

用type struct1 struct2给struct2取别名,相当于定义了一个新的类型,两者之间可以强制类型转换,但是不能直接赋值。但是这种大写的变量很多客户端不习惯,所以使用tag,如果使用小写,就无法被结构体外部函数使用,无法序列化。struct的每个字段上可以写上一个tag,该tag可以通过反射机制获取,常见于序列化和反序列化。如果想要修改原来的参数,我们使用结构体指针,并且这更常用,不用深拷贝,速度更快。遍历key来删除,或者让map赋值一个新的map,给GC回收。

2023-08-24 20:31:51 519

原创 Go学习-Day4

切片可以追加,可以追加多个数,可以追加多个切片,利用append将追加后的切片赋值给原来的切片。string底层也指向一个byte数组,我们用切片来拷贝这个只读的byte数组再进行操作。Go中数组是值类型,会进行拷贝,要想修改原数组,需要使用指针,写法类似C语言的行指针。抛出一个panic的异常,在defer中通过recover捕获异常。Go底层会创建一个新的数组,然后切片这个新的数组,这些过程均不可见。数组中的元素可以是任何合法的类型,但是不能混用。切片和数组类似,但是长度是可以变化的!

2023-08-23 22:39:58 641

原创 # Go学习-Day3

包名和文件夹名可以不一致,这样下面调用的时候也要用另外的包名,一般来说,我们习惯于名字保持一致,这样我们导入包的时候,就就能知道包名是什么了。函数和引用的外部变量构成了闭包,相当于一个类,第一次调用得到一个匿名函数,可以类比成一个构造方法,构造出了一个类,n是类的一个成员。或者,我们这样想,这个匿名函数和他所引用的变量构成的闭包,在匿名函数第一次返回的时候,这些变量也在相同的作用域进行声明。这里是一个返回值是(int)int的匿名函数,返回了一个含有未知参数并且引用了n的匿名函数,对这个匿名函数多次调用。

2023-08-22 22:12:50 363

原创 Go学习-Day2

string也是基本类型,传入&地址。加号拼接,可以分行写(加号放行尾)go不会自动转换类型,需要显式转换。var关键字+变量名+变量类型。利用UTF-8编码,支持中文。go中字符串是常量,无法修改。另一种声明方法,开发中常用。对应的,可以声明多个变量。

2023-08-21 21:44:08 663 1

原创 背包问题的一点看法

Tutorial说得可能有点模糊,稍微解释一下,就是当前最大值,到下一个更大值出现前都是属于同一组的,新的最大值以及后续管辖的较小值也是属于同一组的,不过可能是本组也可能是对面组,先划分成组,对这些元素进行背包即可,看看能否平分就行。初始化背包容量为负无穷,然后f[0]=0,这个空的状态,是其他万千状态的源泉,再这个基础上,进行完全相同的01背包或者完全背包,最后检查一下f[V]是不是大于0,是则输出,不是则输出-1。所以答案便是最后一个元素。然后,如果考虑到再放一个物品的时候,01背包,的来源必须是前。

2023-08-17 12:26:31 264

原创 Go学习-Day1

注意配置PATH,GOPATH(项目的位置),GOROOT(SDK的位置)Go语言有静态语言的安全和性能和动态语言开发维护的效率。通过go build来编译go文件,得到exe文件。Hello World (一定要注意目录结构!project00 //项目名open这个项目。关于文件夹架构,一定要准确,不然找不到包。并且配置一些settings里面相应的变量。

2023-08-14 22:22:28 411

原创 关于memset的小实验

memset是一个返回通用指针的函数,返回的地址便是输入的地址int c表示对这块内存的赋值len是内存的长度memset是按照字节来赋值的,但是int类型是4个字节的。

2023-08-13 20:45:37 188

原创 【排序算法略解】(十种排序的稳定性,时间复杂度以及实现思想)(含代码)(完工于2023.8.3)

注:以下排序默认为升序排序。稳定性:指的是排序的过程中是否会改变多个相同的值的相对次序,如果会改变则是不稳定的。

2023-08-03 15:32:39 2513

原创 雪花算法,在分布式环境下实现高效的ID生成

点2:时间戳的单位是毫秒,可以同时链接1024台机器,每台机器每毫秒可以使用4096个序列好,我们会给生成id上一个同步锁,阻塞住其他线程的访问。点1:UID是一个long类型的41位时间戳,10位存储机器码,12位存储序列号。点3:利用掩码我们可以检测序列是否溢出,如果溢出的话,就强制等待到下一毫秒。其实雪花算法比较简单,可能称不上什么算法就是一种构造UID的方法。

2023-07-29 17:08:44 1724

原创 Java递归时候需要用到的引用传值之List

当list容器进行拷贝的时候,拷贝的是地址,是引用传值,所以,我们再递归的时候可以利用list容器来实现C++中 vector &ans 的效果,记录递归路径。

2023-06-21 10:29:42 554

原创 关于leetcode或者vscode本地调试(C++)【2023.6.13】

我的workspace在E盘的Github文件夹内,第一行,切换到C++文件夹内,g++ ok.cpp -o ok.exe表示,利用g++编译器将当前目录下的ok.cpp编译为ok.exe文件,第三行是ok运行exe,后面表示输入输出重定向,读取in.txt文本,输出到out.txt中。输入./run.bat即可运行,输入完成后,下次编译可以直接按上下左右的上键即可找到历史命令,回车运行便可。3、为了方便运行,以及观察输入和输出,我们利用.bat脚本来批量处理终端命令。

2023-06-13 13:47:30 1230

原创 KYOCERA Programming Contest 2023(AtCoder Beginner Contest 305)(A、B、C、D、E、F)[施工中]

这里有一点点细节,分两种情况,先考虑简单的情况,就是l,r之间至少有一个节点,我们之间二分查找到l右侧第一个点,r右侧第一个点,然后减去r 到右侧第一个点的部分,补上l到右侧第一个点的部分。第二种情况是,l,r之间没有节点的情况,如果l刚好在,节点上,那么r如果也在节点上,查出来的两个最近点的位置是一样的,考虑这个点是奇数位置还是偶数位置,如果说,l在节点上,r不在节点上,查出来刚好差一个点,我们考虑,l右侧的第一个是奇数位置还是偶数位置。题意:给出相邻点距离,让你查询某个线段的距离。

2023-06-12 15:44:15 893

原创 Leetcode 67.二进制求和(高精度加法)

高精度加法是一种最简单的高精度运算。高精度运算的本质是模拟人手算的过程,一般来说,首先,我们倒置一下,然后,从低位开始向高位运算,并且记录进位情况。注意,当两个字符串不等长的时候要补齐。给定二进制串a, b求出a + b其中a的长度1e4。

2023-06-11 20:27:24 215

原创 利用python制作一个简易的期末刷题小程序【2023.6.9】

每当期末的时候,一些课程会发布一些excel题库,特别是历史类的,例如纲要课。我们会有一个这样的excel一道道看显然太浪费时间了,而且很多水题在里面耗人精力,复习效果不佳。990题qwq。

2023-06-09 12:18:43 2484

原创 Codeforces Round 875 (Div. 2)【A、B、C】

思路:如何理解这种操作,实际上就是在a数组中插入b数组,首先可以统计a数组中的答案(注意,这也是答案的一部分),统计所有的数的最大连续出现次数。插入b数组后这些答案一定不会更差,由于插入并不能改变b数组的顺序,我们将b数组划分成若干块,一步步插入,如果有更优的答案记录。从根开始出发,进行dfs,我们考虑,根画到这个点最多要画几轮,这样就转化为一个非常经典的问题了。就是求下降的次数,因为前面的边必须先画,所以,后面的边序号反而小的话就要再过一轮,答案取最大就行。时间复杂度:O(n)时间复杂度:O(n)

2023-05-29 11:56:40 881

原创 第十五届吉林省赛【D. Rush Morning】【换根DP/欧拉序+线段树】

右上部分表示sub换根的过程,如果说当前我们到了u子树的话,需要更新v子树,我们已经知道了up子树的直径,我们还需要知道u子树减去v子树部分的直接,我们还需要知道跨越u节点的直径,此时我们就需要开出第d3表示次次长路,如果说最长路经过v,我们跨越u的直径必须是次长和次次长,如果说是次长,就是最长,和次次长,其他是最长和次长。up是递归dp得到是已知的。如果说我们修改了,uv这条边,那么可能的最大直径有两种情况,一种是经过uv这条边的,那么我们需要知道从u开始向左延伸的最长路,和v开始向右延伸的最长路。

2023-05-13 23:31:21 248

原创 第十五届吉林省赛个人题解【中档题】(I)

思路:首先你要知道,nim游戏后手必胜条件(也就是先手必败条件),是异或和为0。为了支持区间加我们利用树状数组维护差分,可以单点查询某个位置的值。然后你需要了解一下线性基的知识,1e9范围的内的线性基大小最多不超过31。如果说超过31必定有非线性基组,必定存在线性基表示其他数,必定存在集合异或和为0。如果小于31,我们一次插入基,如果无法插入,说明该数被线性基线性表示了,也就是异或和为0。题意:给你一个数组,支持区间加,让你查询区间内是否有子集的异或和为0。

2023-05-11 11:59:59 209

原创 第十五届吉林省赛个人题解【中档题(不过可能对你来说是简单题)】(H、G、C)

题意:给你一个无向图,每条边上都有一个数码,然后给你一个路径,每次你必须从Ai走到Ai+1(直接走到,必须相邻),如果有多条路径,你等概率的选择这些路径,这样从头走到尾,你依次把这些数码写下来,得到一个十进制数,现在问你最后可以得到的期望是多少?logn最多是20,常数小1.5倍。题意:给你一个破损的矩阵,给你原来的矩阵的行列的奇偶性,让你复原这个矩阵,如果矩阵唯一,就输出这个矩阵,如果矩阵不唯一,就输出-1。关于特判:a= 1的时候b=0的时候是no,注意不要使用 a- 1作为逆元,0逆元会把人橄榄。

2023-05-10 21:41:17 807

原创 Codeforces Round 871 (Div. 4)【A、B、C、D、E、F、G、H】

首先,如果说这里有三种度数,1 1 1 x x x x y 那么唯一的y度数必定是第一分支数,多个x必定是第二分支数(注意这里xy均大于1),1是叶子,无妨。对于i的所有j的值的方法数,来源有三种,一种是前i - 1内部的方法数的贡献,一种是第i个数单独的贡献,一种是前i-1数和第i个数相互作用的贡献。题意:给你两个整数m,n,你每次可以把一个数拆成两份,大份的恰好是小份两倍,你可以在产生的新的数继续这样操作,问你是否能够从m中拆出n。题意:给你一个雪花图的联通关系,让你判断雪花的第一分支数和第二分支数。

2023-05-09 17:08:51 1026

原创 第十五届吉林省赛【有点思维的简单题】(L、B、K)

题意:给出一个字符串,让你选择任意的两个后缀,可以通过对较长的后缀的删除最后一个字符添加最后一个字符的操作使得该后缀转换为另一个后缀。思路:合法的括号序列满足卡特兰数,对所有左括号染色共有k^n种方法,利用乘法原理可以得出。思路:考虑选定全长,然后找到第一个不同的字符,注意特判全相同的字符串。前者不如后者,如果已经首个不同的话,已经是全删除了,后面也不会更优。题意:有n种不同的括号,k种不同的颜色,问有多少种合法的括号序列。aaaaaaabc是较长的后缀,那么较短的如果是。aaaaaabc的话。

2023-05-08 23:26:04 648

空空如也

空空如也

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

TA关注的人

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