自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (1)
  • 收藏
  • 关注

原创 Robbie Platform项目总结与心得

Robbie Platform项目总结与心得前言项目描述项目收获前言因为最近网易跟搜狐开始提前批了,作为大三选择就业的我来说,这无疑是暗示着我得准备投简历准备面试了。折腾了一两天的简历,除了光线追踪器之外也没有跟游戏有关的项目了。在反复考虑和老师的建议下,还是选择做一个小游戏(ps:本来是打算拿了offer 大三下学期在学校里面再做demo的)地址贴在下方,欢迎大家魔改然后设计关卡、玩法之类的项目地址:github.com/Weissmm/RobbiePlatform项目描述这个项目是跟着B站M

2021-01-24 16:25:30 275 3

原创 动态规划0.0

动态规划动态规划自顶向下搜索暴力递归备忘录自底向上DP TableDP迭代动态规划动态规划:存在重叠子问题,具备最优子结构,穷举求最值的一类题目重点在于找出状态转移方程下面以322. 零钱兑换 - 力扣(LeetCode) (leetcode-cn.com) Middle为例自顶向下搜索暴力递归 vector<int> coins; int dp(int n){ if(n==0){ return 0; }

2021-08-11 19:58:02 178

原创 回溯的思维方式

回溯算法全排列 MidiumN皇后问题 Hard心得总结回溯思想就是result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径, 选择列表) 撤销选择全排列 Midium46. 全排列- 力扣(LeetCode) (leetcode-cn.com) Mid

2021-07-31 22:29:43 195

原创 递归的魅力(树篇)二

通过树来了解递归最大二叉树 Midium从前序与中序遍历序列构造二叉树Midium从中序与后序遍历序列构造二叉树Midium要说的是,关于递归,要去相信递归函数的作用,不要跳入递归,下面来感受下递归的魅力有些时候 需要去处理边界,但大概框架对了,剩下的都是debug最大二叉树 Midium654. 最大二叉树 - 力扣(LeetCode) (leetcode-cn.com)Midium这题思路是遍历找到数组最大元素,获取下标然后建树,左区间和又区间递归再进行建树TreeNode* constru

2021-07-30 22:37:16 201 1

原创 递归的魅力(树篇)

通过树来了解递归翻转二叉树 Easy填充二叉树节点的右侧指针 Midium二叉树展开为链表 Midium要说的是,关于递归,要去相信递归函数的作用,不要跳入递归,下面来感受下递归的魅力翻转二叉树 Easy226. 翻转二叉树 - 力扣(LeetCode) (leetcode-cn.com) EasyTreeNode* invertTree(TreeNode* root) { //这个函数的作用就是翻转以root为结点的左右子树,并返回根结点 if(root==nullpt

2021-07-30 21:34:49 127

原创 初探双指针

文章目录最长回文子串 Midium判断回文链表 Easy最长回文子串 Midium回文子串:abba aaaa 这种正反看都是一样的子串回文串的的长度可能是奇数,也可能是偶数,解决该类问题的核心是双指针寻找回文串的问题核心思想是:从中间开始向两边扩散来判断回文串5. 最长回文子串 - 力扣(LeetCode) (leetcode-cn.com) Midiumstring Palindrome(string& s, int l, int r) { while (l >= 0 &a

2021-07-30 20:34:10 78

原创 反 转 链 表

反转链表反转整个链表递归写法迭代写法反转前N个链表结点反转[m,n]区间的链表首先是单链表的构建struct ListNode { int val; ListNode* next; ListNode(int x) :val(x) { }};反转整个链表递归写法ListNode* Reverse(ListNode* head) { if (head->next == nullptr) { //当前节点是最后一个 return head; } ListNode* last =

2021-07-29 21:53:03 102

原创 Time.deltaTime

源码的定义如下public static float deltaTime;含义为The interval in seconds from the last frame to the current one (Read Only).从最后一帧到当前帧的间隔(以秒为单位)(只读)。假设一秒执行30帧,那么如果一个物体要在一秒内在x轴移动10个单位的距离那么在Update函数里面调用时就需要使用transform.Translate(10f*Time.deltaTime,0,0,Space.Se

2021-05-02 09:44:25 1546 1

原创 快速排序、二分模板

void quick_sort(int q[],int l,int r){ if(l>=r) return; int i=l-1,j=r+1,x=q[l+r>>1]; while(i<j){ do i++;while(q[i]<x); do j--;while(q[j]>x); if(i<j) swap(q[i],q[j]);

2021-04-14 00:30:26 100

原创 瑾小的春招总结

春招总结个人情况:双非科班大三下、熟悉C++、部分C#、unity自学一个月水平、计算机基础掌握一般投递岗位:游戏客户端开发战绩:(offer或拒绝腾讯:魔方二面 天美三面 TEG AI Lab二面 offer炎魂网络:offer阿里灵犀互娱:一面拒绝祖龙:一面拒绝厦门吉比特:HR(未面 这个得感谢班上同学帮我点赞免笔试- -凉屋:HR面拒绝杭州游卡桌游:HR面拒绝厦门点触科技:HR面拒绝(失败的战绩字节:一面挂(处女面 第二次投递倒在笔试网易:雷火提前批简历挂 网易互娱

2021-04-13 21:45:35 1967 16

原创 C++和C# struct和class的区别

这篇博客的出现源于昨天面试中的一道题:struct和class的区别?C++:在C++中,class和struct区别很小。首先,C++中的struct保留有C语言中的struct的功能,但C++中的struct允许有成员函数,允许继承而C中没有,在C++中,class和struct只有两点区别。class成员变量和成员函数默认为private,而struct中成员默认为publicclass默认为private继承,struct默认为public继承除这两点之外,C++中的class和st

2021-03-05 22:37:26 300

原创 中介者模式Mediator(c++设计模式)

面试官:请你谈谈中介者模式模式优点模式缺点适用环境中介者模式代码定义一个对象来封装一系列对象的交互。中介者模式使各对象之间不需要显式地相互引用,从而使其耦合松散,而且让你可以独立地改变它们之间的交互。模式优点简化了对象之间的交互,它用中介者和同事的一对多交互代替了原来同事之间的多对多交互,将原本难以理解的网状结构转换成相对简单的星型结构可将各同事对象解耦可以减少子类生成,中介者模式将原本分布于多个对象间的行为集中在一起,改变这些行为只需生成新的中介者子类即可,这使得各个同事类可被重用,无须直接对

2021-01-28 19:13:29 109

原创 观察者模式Observer(c++设计模式)

面试官:请你谈谈观察者模式模式优点模式缺点适用环境观察者模式代码定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。模式优点可以实现表示层和数据逻辑层的分离在观察目标和观察者之间建立一个抽象的耦合支持广播通信,简化了一对多系统设计的难度符合开闭原则,增加新的具体观察者无须修改原有系统代码,在具体观察者与观察目标之间不存在关联关系的情况下,增加新的观察目标也很方便模式缺点将所有的观察者都通知到会花费很多时间如果存在循环依赖时可能导致系

2021-01-28 19:08:28 116

原创 代理模式Proxy(c++设计模式)

面试官:请你谈谈代理模式模式优点模式缺点适用环境代理模式代码给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。模式优点能够协调调用者和被调用者,在一定程度上降低了系统的耦合度客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性模式缺点由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢(例如保护代理)实现代理模式需要额外的工作,而且有些代理模式的实现过程较为复杂(例如远程

2021-01-28 19:04:03 118

原创 外观模式Facade(c++设计模式)

面试官:请你谈谈外观模式模式优点模式缺点适用环境外观模式代码为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得子系统更加容易使用。模式优点对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可子系统的内部变化不会影响到外观对象,一个子系统的修改对其他子系统也没有任何影响模式缺点不能很好地限制客户端直接使用子系统类,如果对客户端

2021-01-28 18:58:11 113

原创 装饰模式Decorator(c++设计模式)

面试官:请你谈谈装饰模式模式优点模式缺点适用环境装饰模式代码动态的给一个对象增加一些额外的职责。就扩展功能而言,装饰模式提供了一种比使用子类更加灵活的替代方案。模式优点对于扩展一个对象的功能,装饰模式比继承更加灵活,不会导致类的个数急剧增加可以通过一种动态的方式来扩展一个对象的功能,通过配置文件可以在运行时选择不同的具体装饰类,从而实现不同的行为可以对一个对象进行多次装饰具体构件类与具体装饰类可以独立变化,用户可以根据需要增加新的具体构件类和具体装饰类,且原有类库代码无须改变,符合开闭原则

2021-01-28 16:46:36 92

原创 组合模式Composite(c++设计模式)

面试官:请你谈谈组合模式模式优点模式缺点适用环境组合模式代码组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。模式优点可以清楚地定义分层次的复杂对象,表示对象的全部或部分层次,让客户端忽略了层次的差异,方便对整个层次结构进行控制客户端可以一致地使用一个组合结构或其中单个对象,不必关心处理的是单个对象还是整个组合结构,简化了客户端代码增加新的容器构件和叶子构件都很方便,符合开闭原则为树形结构的面向对象实现提供了一种灵活的解决方案模式缺

2021-01-27 19:27:11 108

原创 Unity中的Collider、Rigidbody2D

Collider、Rigidbody2DCollider碰撞器Rigidbody2D 2D刚体Collider碰撞器顾名思义,碰撞器就是用来检测碰撞的,绘好地图后需要给地图加上碰撞器加碰撞器前:加碰撞器后:这样每个像素都会有碰撞器熟悉,可以检测碰撞,但一个一个检测容易出bug,所以一般使用Composite使用后:使用后就不会产生角色卡在墙上的bug了…好的 既然地图有了碰撞检测,我们还得给角色加上碰撞器,这样碰撞器才能检测碰撞这里角色使用的是Box Collider,框体碰撞器,

2021-01-22 15:26:40 577

原创 Unity中的Rule Tile

当我们绘制地图需要有一定规则时,比如说图片的纹理规则、随机生成地图规则等,可以用到Rule Tile来编写规则如图编写了一个阴影矩形的填充规则,填充时是全像素的阴影,而当符合规则时,图片会发生变化用户反馈2333…还可以生成随机填充...

2021-01-22 14:53:05 1027 2

原创 Unity中的Awake、Start和Update

Start()表示在Script被启动的时候,点击开始的时候会执行一次Update()表示在每一帧都会执行一次Awake()表示即使Script未被启动,也会执行

2021-01-21 23:25:20 763

原创 2021搜狐畅游引擎部笔试【追光者计划】

问卷不知道是什么时候答的,笔试通知是今天晚上来的。。一共十三道题,废话不多说吧1.给出不在一条直线上的三点坐标p0p1p2,求三点组成的三角形面积,要求使用向量计算2.同上,求三点所在平面的法线,要求使用向量计算3.同上,如果再给出空间中一点p’,判断p’是否在此平面上,要求向量计算4.同上,判断p’是否在p0p1p2三角形内,要求使用向量计算5.给出一张图片,中心点为原点,x/y轴分别为右/上,求绕原点逆时针旋转矩阵6.给出三维空间中一点p(x,y,z)求变换矩阵使p点分别扩大m/n/q倍

2021-01-21 21:56:00 1093 7

原创 桥接模式Bridge(c++设计模式)

面试官:请你谈谈桥接模式模式优点模式缺点适用环境桥接模式代码将抽象部分与它的实现部分解耦,使得两者能够独立变化。模式优点分离抽象接口及其实现部分可以取代多层继承方案,极大地减少了子类的个数提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,不需要修改原有系统,符合开闭原则模式缺点会增加系统的理解与设计难度正确识别出系统中的两个独立变化的维度并不是一件容易的事情适用环境需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系抽象部分和实现部分可以以继承

2021-01-20 16:32:11 95

原创 适配器模式Adapter(c++设计模式)

面试官:请你谈谈适配器模式模式优点模式缺点适用环境适配器模式代码类适配器对象适配器将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作模式优点将目标类和适配者类解耦增加了类的透明性和复用性灵活性和扩展性非常好模式缺点类适配器一次只能适配一个适配者,且适配者不能为最终类,目标抽象类只能为接口,不能为类对象适配器在适配器中置换适配者类的方法比较麻烦适用环境系统需要使用现有的类(适配者),而这些类的接口不符合系统的需要,甚至没有这些类的源代码创建一个可

2021-01-20 16:23:59 82

原创 c++中的map与unordered_map

c++中的map与unordered_map实现原理差异实现原理map:map的内部元素是有序的,因为其内部实现了红黑树,具有自动排序功能。红黑树的每一个节点都代表着map的一个元素。因此对map进行操作相当于对红黑树进行操作,操作效率取决于红黑树的效率。unordered_map:其内部是一个哈希表,虽然无序但查找效率高,为O(1)差异map最大的优点是有序,对于有顺序要求的问题,map的效率会更高。相反unordered_map的最大优点就是查找速度快,但内存占用较大(空间换时间),对于需要

2020-12-30 23:47:06 138

原创 leetcode 题解报告 最大二叉树系列

leetcode最大二叉树系列654. 最大二叉树998. 最大二叉树 II654. 最大二叉树给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。输入:[3,2,1,6,0,5]输出:返回下面这棵树的根节点: 6 / \ 3 5 \

2020-12-30 00:20:01 127

原创 PPM文件

PPM文件简介文件分类及扩展举例简介PPM(Portable Pixmap Format)是一种简单的图像格式,仅包含格式、图像宽高、bit数等信息和图像数据。用txt打开.ppm文件的话,文件内容会如下所示:文件分类及扩展除开PPM还有两个与之相关的格式,PBM和PGMPBM是位图(Bitmap)PGM是灰度图(Grayscale)PPM是通过RGB三种颜色显现的图像(Pixmaps)它们之间通过文件的头部来区分每个图像文件的开头都通过magic number来表明文件格式的类型(P

2020-12-28 18:43:18 1414

原创 Leetcode 解题报告 剑指 Offer 32 从上到下打印二叉树系列

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]题解:之前的博客,遍历都是通过Visit()函数来打印在控制台的,这个题目虽说是简单的BFS层序遍历,但要求将每层的数据单独分类,比较有意思。这里用二维数组。/** * Definition

2020-12-27 10:42:15 2063 6

原创 深度优先搜索算法DFS

DFS介绍类似于二叉树的先序遍历,先遍历深度,再回退LeetCode 589. N叉树的前序遍历给定一个 N 叉树,返回其节点值的前序遍历。例如,给定一个 3叉树 :返回其前序遍历: [1,3,5,6,2,4]解法:用递归+栈实现简单DFS代码/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int

2020-12-26 11:29:02 107 1

原创 广度优先搜索算法BFS

BFS介绍类似于二叉树层序遍历,先遍历同一深度的结点,遍历完后再向不同深度遍历LeetCode面试题 04.03. 特定深度节点链表给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。示例:输入:[1,2,3,4,5,null,7,8] 1 / \ 2 3 / \ \ 4 5 7 / 8输出:[[1],[2

2020-12-26 10:35:02 2009 1

原创 单例模式Singleton(c++设计模式)

面试官:请你谈谈单例模式模式优点模式缺点适用环境单例模式代码对于一个软件系统中的某些类而言,只有一个示例很重要,例如一个操作系统中就只能打开一个任务管理器窗口,如果不适用机制对窗口对象进行唯一化,将会产生各种不必要的麻烦,因此有了单例模式,单例类拥有一个私有构造函数,确保用户无法通过new关键字直接实例化它模式优点提供了对唯一实例的受控访问可以节约系统资源允许可变数目的实例(多例类)模式缺点扩展困难单例类的职责过重适用环境系统只需要一个实例对象,或因为资源消耗太大而只允许创建一

2020-12-25 15:46:53 152

原创 原型模式Prototype(c++设计模式)

面试官:请你谈谈原型模式模式优点模式缺点适用环境原型模式代码原型模式使用原型示例指定待创建对象的类型,并且通过复制这个原型来创建新的对象模式优点简化对象的创建过程扩展性好提供了简单的创建结构可以用深克隆的方式保存对象的状态模式缺点需要为每一个类配备一个克隆方法,而且该方法位于一个类的内部,当对已有的类进行改造时,需要修改源代码,违背开闭原则在实现深克隆时需要编写较为复杂的代码适用环境创建新对象陈本较大系统要保存对象状态,而对象的状态变化很小需要避免使用分层次的工厂类来创建

2020-12-25 15:02:09 105

原创 建造者模式Builder(c++设计模式)

面试官:请你谈谈建造者模式模式优点模式缺点适用环境建造者模式代码建造者模式就是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可模式优点客户端不必知道产品内部组成细节,将产品本身与创建过程解耦,使相同的创建国产可以创建不同的产品对象对于替换和增加新的具体建造者符合开闭原则可以精细地控制产品创建过程特点:高内聚低耦合模式缺点产品之间的差异性很大不适合用建造者模式产品内部变化复杂的话会需

2020-12-24 23:48:30 87

原创 抽象工厂模式AbstractFactory(c++设计模式)

面试官:请你谈谈抽象工厂模式从 简单工厂模式 说起,简单工厂模式通过设置工厂来模板化了大部分重复的创建产品代码,工厂通过参数来创建不同的产品。由于这些参数得事先定义好,也就是说这工厂只能生产某些产品,如果我希望添加或者删除产品,需要对工厂进行修改,违背了 开闭原则,从而引入了 工厂方法模式 ,通过添加抽象工厂,每个工厂负责一种产品的创建,但这样工厂类会特别多,增加了系统开销。所以就有了抽象工厂模式,抽象工厂模式里每个工厂负责一个产品族的创建,也就是引入了抽象产品跟抽象工厂的结合。抽象工厂模式的开

2020-12-24 21:34:23 101

原创 摩尔投票法

知乎简介首先请考虑最基本的摩尔投票问题,找出一组数字序列中出现次数大于总数1/2的数字(并且假设这个数字一定存在)。显然这个数字只可能有一个。摩尔投票算法是基于这个事实:每次从序列里选择两个不相同的数字删除掉(或称为“抵消”),最后剩下一个数字或几个相同的数字,就是出现次数大于总数一半的那个。形象化描述想象着这样一个画面:会议大厅站满了投票代表,每个都有一个牌子上面写着自己所选的候选人的名字。然后选举意见不合的(所选的候选人不同)两个人,会打一架,并且会同时击倒对方。显而易见,如果一个人拥有的选

2020-12-24 20:23:07 94 1

原创 超详细Unity3D引擎安装教程

首先需要下载两个安装包Unity Hub是一个跟Github Desktop类似的管理工具而Unity就是编辑器啦下载网站:Unity中文官网https://unity.cn/releases我个人是Win10系统所以下载这两个安装包,当然可以根据需求下载不同的版本。(ps:刚开始因为去的是Unity官网,百搭了一堆时间。所以写这博客也是为了让大家避坑哈)QAQ下载完后就是一堆next安装操作安装成功后桌面应该会出现这两个图标。这时候双击打开Unity Hub 会进入这个页面

2020-12-18 11:24:16 2261 8

原创 银行家算法Banker‘s Algorithm(c++简单实现)

死锁问题的避免——银行家算法银行家算法的数据结构银行家算法安全算法银行家算法的数据结构可利用资源向量Available最大需求矩阵Max已分配矩阵Allocation仍然需求矩阵Need银行家算法设Requesti 是进程Pi的请求量,如果Requesti[j]=k,表示进程Pi需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查。a) 如果Requesti[j] <=Need[I,j],便转向步骤(b);否则认为出错,因为他所需要的资源数已经超过它所宣布的最大值。

2020-11-27 22:39:21 329

原创 高响应比优先算法HRRN(c++)

高响应比优先算法,我们为每一个作业引入一个动态优先级,定义如下:优先权=(等待时间+要求服务时间)/要求服务时间而等待时间与服务时间之和是系统对该作业的响应时间,所以优先级又相当于响应比Rp,所以Rp=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间#include<bits/stdc++.h>using namespace std;#define maxsize 10struct proc{ double seq; double com_

2020-11-27 15:34:32 2165

原创 图的邻接矩阵&邻接表(c++实现)

图的构造实现邻接矩阵邻接表邻接矩阵#define maxsize 20typedef char Vertex;typedef int Edge;typedef struct{ Vertex vexs[maxsize]; Edge edges[maxsize][maxsize]; int vnums,enums;}MGraph;void Create_MGraph(MGraph *G){ //创建有向图的邻接矩阵存储 cout<<"

2020-11-19 20:19:57 743

原创 哈夫曼树(最优二叉树)&哈夫曼编码(c++实现)

哈夫曼树&哈夫曼编码哈夫曼树(最优二叉树)哈夫曼编码(前缀编码)哈夫曼树(最优二叉树)具有最小带权路径长度的二叉树称为哈夫曼树权值越大的叶子节点越靠近根节点权值越小的叶子节点越远离根节点总是将最小权值和次最小权值的两个节点合并,依次往上构造树,这样根节点的权值就是最小权值假如哈夫曼树有n0个叶子节点,那么这棵树的总结点个数n=2*n0-1typedef struct{ int weight; int parent; int lchild;

2020-11-18 16:53:24 542

原创 线索二叉树 (C++实现)

线索二叉树就是在原有的二叉树上添加了两个tag属性,用来记录当前节点的线索如果ltag=0 lchild指向节点的左孩子如果ltag=1 lchild指向节点的前驱节点如果rtag=0 rchild指向节点的右孩子如果rtag=1 rchild指向节点的后继节点因为先、中、后序的前驱跟后继节点会有区别,所以二叉树线索化需要分为三种序列的线索二叉树,这里以后序为例typedef int datatype;typedef struct BiThrNode{ datatype data.

2020-11-17 21:33:17 209

2-2 递归算法之汉诺塔问题.pptx

递归算法的汉诺塔问题实现ppt,较详细得解释了递归算法的使用以及如何用递归算法来解决汉诺塔问题,QAQ

2020-05-31

空空如也

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

TA关注的人

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