自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 364

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

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

2023-09-08 17:04:50 436

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

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

2023-09-07 17:24:59 337

原创 Go学习[合集]

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

2023-09-04 19:50:20 1153

原创 # Go学习-Day10

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

2023-09-04 19:48:43 811

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

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

2023-08-31 14:17:15 188

原创 # Go学习-Day9

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

2023-08-28 21:57:31 410

原创 # Go学习-Day8

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

2023-08-27 22:12:30 684

原创 # Go学习-Day7

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

2023-08-26 21:55:47 558

原创 # Go学习-Day6

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

2023-08-25 22:17:20 343

原创 # Go学习-Day5

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

2023-08-24 20:31:51 479

原创 Go学习-Day4

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

2023-08-23 22:39:58 533

原创 # Go学习-Day3

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

2023-08-22 22:12:50 328

原创 Go学习-Day2

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

2023-08-21 21:44:08 486 1

原创 背包问题的一点看法

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

2023-08-17 12:26:31 176

原创 Go学习-Day1

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

2023-08-14 22:22:28 354

原创 关于memset的小实验

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

2023-08-13 20:45:37 147

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

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

2023-08-03 15:32:39 1575

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

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

2023-07-29 17:08:44 1539

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

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

2023-06-21 10:29:42 437

原创 关于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 974

原创 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 687

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

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

2023-06-11 20:27:24 107

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

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

2023-06-09 12:18:43 1642

原创 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 829

原创 第十五届吉林省赛【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 152

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

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

2023-05-11 11:59:59 130

原创 第十五届吉林省赛个人题解【中档题(不过可能对你来说是简单题)】(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 750

原创 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 808

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

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

2023-05-08 23:26:04 475

原创 第十五届吉林省赛个人题解【没有思维的简单题】(A、M、E)

思路:异或和为1说明就是最低位不同,所以,排序一下判断相邻的数即可。题意:检查随机数里的奇数和偶数的出现次数的是否差不超过1。题意:判断数组中是否有两个数的异或和为1。题意:求值域范围乘以n。

2023-05-08 11:47:43 107

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

我们考虑最坏的情况,(投票人故意每次投 n / x ,剩下一个 n % x,一个个淘汰),就必须保证,n 不会被 2~m的数整除。思路:(废话,可以不看,本来我考虑一种贪心的方法,假定xxx说的是真的,然后检验,发现wa2),我们可以观察到n很小,我们只需枚举说谎的情况即可,然后统计说谎人数是否符合,时间复杂度为n。证明:如果说左右区间两端不是最大值的两个,我们覆盖的区间更大,那么我们可以减去这两个最大的值外的值,增量不变,但是 r- l变小了,总的值更大了。关键:首先左右两端必定是最大的值中的两个。

2023-05-06 11:14:58 634

原创 零基础的字典树(Trie)【写于2023.5.5】

这里把每一个数字看成一个二进制字符串,插入到Trie当中,比如我们要求两个数的异或和最大,我们每次都选择尽可能的不一样的位,因为最高位是主要因素。这里我这些“字符串”都是等长的,所以必定可以走到底的,是一种特殊的二叉树,如果反面没有这面就一定有。,第一维是字符总数,也就是字符串的总长度,或者说文本量,后者是字符集编码的种类数。利用指针的树形结果更加直观,我们可以简单的认为是,是一种26叉树,也许可能有点疑惑,为什么内存不是26。,因为这里是把每一个字符当成树上的一个节点,前后关系作为树的边。

2023-05-05 14:40:53 51

原创 Codeforces Round 868 (Div. 2)【解析A、B、C、D】

对于长度大等于3的情况下,不管怎么安排我们都必定有三以上的本质不同回文串,对于大于等于三的情况,我们考虑在abcabcabcabcabc中插入连续相同的字符,abcabcabc相互之间不会产生回文,每一段考虑xxxxabcabcxxabcacxxabc这样的结构,加入的abc不会产生额外的贡献单个字符必定贡献一个。题意:给你一个打乱的排列,你可以随意交换距离为k的一对数,让你判断,如果可以直接sort,那么就输出0,如果最后有两个数,不匹配,那么久输出1,如果有更多就输出-1。对于长度为1的情况就一种。

2023-05-04 11:01:58 310

原创 Codeforces Round #867 (Div. 3) (全解全析,尽可能地简单)

思路:首先考虑什么时候是无解的,当n>1时,且为奇数的时候, bn = n * (n + 1) / 2 % n + 1 = 1,首先如果说ak=n, k必须是在1处的,因为如果 k > 1的话, bk = (bk-1 + ak) = bk-1不符合排列的定义。对于某个点x,其最远点为y,为直径外一点(在直径上很容易证明)。2、如果x->y与s->t有交点,记作o,|s->o| < |s->x->o|, |t->o| < |t->y->o|,|s->t| < |s->x->y->t|,矛盾。

2023-04-30 20:56:00 1096 2

原创 状态压缩DP一瞥【初识】

我们不做汉堡,000000000的状态下,f[0] = 0。就像一棵树一样,这是所以状态的根,就像网络流里的超级源点,一切的一切都从这个零开始。我们每次做汉堡都会使得1 增多,向更大的状态转移,例如000->100, 010, 001,不断地向后生长,开枝散叶。那么如何判断当前的状态能转移到哪些状态呢,我们考虑遍历所有可能的汉堡,如果说当前的1111的子集中含有制作该汉堡的1的子集,并且,花费足够,就可以向后转移。=32,768,注意到这里我们每个汉堡最多制作一个,我们利用0和1表示我们制作汉堡的情况。

2023-04-17 17:55:30 58

原创 算法一讲【树链剖分与权值线段树】【HDOJ 5029 Relief Grain】

我们考虑最坏情况,对于一个最深的点,首先,我们在dfs过程中把同一条链上的点的顶端标记成同一个点,top[x] = tp,我们可以O(1)坐电梯到达顶端,经过一条轻边,也就是连着tp的父节点的边,既然是轻边,说明这条链是轻儿子,必然还有一个重儿子,重儿子所在子树的节点数。2*轻儿子 + 1,对于节点总数不超过n的树而言,我们考虑最小的轻儿子也就是1开始,以此类推倍增,不超过logn次子树就是整棵数,也就抵达了根节点所在的重链,x和y,均是如此,logn数量级的操作后必然在这条重链上共链。

2023-04-03 14:34:47 249

原创 Codeforces Round 860 (Div. 2) (A-D)

文章目录A.Showstopper【贪心,模拟】B.Three Sevens【STL(邻接表)、倒着贪心】C.Candy Store【整除问题,贪心】D.Shocking Arrangement【结论题、数学】

2023-03-27 19:22:44 504

原创 以典题How far away(hdoj 2586)为例,小结LCA之倍增算法(2752字)

这是LCA算法的一个核心之一,这部分利用标记父节点的DFS,O(n)的时间复杂来预处理f[i][j]数组,这个数组的含义是,从节点i出发,向上追溯2^j个祖先的祖先是谁,如果说j=0零,那么就是这个节点的父节点。由于标记父节点的树上DFS,深度由浅至深的层次遍历的,对根节点我们处理好了f[u][j],对于新的部分,首先j=0的时候是其父节点,如果是第二层的点,就是根节点,这些点都是已经处理完的,所有的可能的j。1、建图,这里w指的是的边权,利用vector记录邻接表。4、main函数杂项。

2023-03-23 15:43:41 87

原创 Codeforces Round 859 (Div. 4)(G)

G. Subsequence Addition

2023-03-20 08:48:47 243

空空如也

空空如也

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

TA关注的人

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