- 博客(108)
- 收藏
- 关注
原创 Educational Codeforces Round 165 (Rated for Div. 2)(C dp D贪心 E二维扫点)
有个结论:如果某个点到右端点不符合要求,那么只需要修改这个点就能保证前面的点都一定符合。D:如果物品确定,那么Bob为了最小化b数组的总和,肯定最最大的k个b。由于确定了使用那个最小值,那么他只会单调往左推或者往右推,所以dp。要求,即每个右端点存在一个最近的不符合的点,只需要修改一次即可。而alice则会最小化这k个b的a。所以用扫描线求出来最右的左端点即可。前i个点使用j次的最小值即可。且肯定要修改最大的左端点。
2024-05-02 00:27:07 346
原创 Codeforces Round 816 (Div. 2)(D拆位图论构造 E斜率优化)
C:直接单独算每个位置的贡献,如果当前位置和前面位置重复了,那么前面就没选的位置了。要先把一定是0的数和u==v这种确定的数先填了,后面根据字典序填即可。考虑每层k进行斜率优化,毕竟转移只会从i-1转移到i层。拆位,考虑字典序最小,让开头的数能等于0就等于0。当i确定的时候让b最小,f[i]一定最小。修改的时候只要重新算i和i+1位置即可。
2024-04-23 18:26:20 816
原创 Educational Codeforces Round 164 (Rated for Div. 2)(D 背包dp+众数定理? E整除分块)
然后思考怎么计算贡献不重不漏,我的思路是每次强制一定要选第i种颜色,求[1,i-1]的子序列的所有方案数,再根据背包的体积分别计算贡献。因为他攻击的时候就算当前死了,也会扩展,所以等于每次选一段数,里面数不能为0,里面所有的数都要减掉x。C:贪心,让两个数尽可能接近,所以第一位比某个数大的时候,后面要保证另一个数最大。即X的数相隔,所以直接把不是X的数位置拿出来,最少次数就是删掉两个位置中的 X。mx<=(s+1)/2 的时候肯定能分成(s+1)/2组,否则需要分mx组。mx=众数个数,s=总和。
2024-04-16 16:25:24 331
原创 Educational Codeforces Round 132 (Rated for Div. 2)(C:贪心 Dst表 E启发式合并使每条路径异或和不为1)
特判如果过程中 cnt+now=1,now是负数,说明前面的cnt-1都要是(,当前问号只能做为(D:首先如果坐标差不是k的倍数就不行,然后直接贪心,让我起始点往下走往右再往上就行,启发式合并的时候判断是不是有重复的即可,如果重复直接改变根的权值,因为大小不变。x到y的路径异或和= d[x]^d[y]^a[lca(x,y)]C:直接贪心,众所周知合法序列保证过程的权值要大于>=0即可,因为让每个路径异或和都不为0,就是让每个子树的异或和不为0,所以可以直接在 2>>100次方放个1就行,
2024-04-05 18:51:07 304
原创 Educational Codeforces Round 133 (Rated for Div. 2) (C dp D前缀和优化倍数关系dp)
dp预处理当前[i,j]走到[i^1,j]的最长等待时间,然后从当前这个时间可以一路往后走,不停下来,因为一开始交换会改变两个,然后后面全都和第一个换就可以保证递减下去了。对于同行的dp=max(dp[i][j]+1,a[i][j])因为 (k+1)*(k)/2<=n,可以推出m等于根号2*n。但是对于新增的[i^1,j]也可能造成时间问题。A:能用3肯定用三,然后分类讨论即可。然后直接前缀和优化dp的倍数和即可。C:正常都能想到先蛇形再走U字形。
2024-04-03 21:15:09 249
原创 Codeforces Round 798 (Div. 2) (C 树形dp D 曼哈顿距离转换 E 位运算构造)
D:曼哈顿距离两点最大值转换成max(max(xi+yi)-min(xi+yi), max(xi-yi)-min(xi-yi))C:dp以f[i]为根的时候能获得多少个节点,那么dp就是全部儿子里面找一个切掉,其他就是。E:先全部把0变成1,然后就找最大lowbit,至少可以通过两次构造。直接拿个multiset维护前面几个最小值和最大即可。
2024-04-02 17:24:12 274
原创 (AtCoder Beginner Contest 346) (G 扫描线+数组转化成二维)
那么就变成一个矩阵,左下角是(l,i)右上角是(i,r)对于矩阵每个点都是合法的,所以变成扫描线求不重复的点对。正常是 两个区间长度相乘,但是这个题目会重复。所以问题转化成一个二维坐标。如果左边区间是[l,i]右边区间是[i,r]
2024-03-27 01:21:44 173
原创 Educational Codeforces Round 134 (Rated for Div. 2)(D:二进制分治)
因为数最多n个,集合最多有n个不同的集合,遇到分裂的集合的时候,如果大小为0要减一。这里也可以利用排序,如果不符合条件就把当前位置全部变成相同。且由于异或和大的数对小的数,所以直接sort即可。否则就可能有2^30个不同集合了。再从两个不同集合继续细分0 1。
2024-03-15 17:14:55 408
原创 Codeforces Round 813 (Div. 2) (D:二分+贪心E1容斥 E2树状数组)
且由于lcm(i,j,k)<=2k- lcm(i,j,k)<=k 没有交集,所以直接减掉即可。lcm(i,j,k)<=2*k只有两种情况 (3,4,6) (6,10,15)两种情况。lcm(i,j,k)<=2*k只有两种情况 (3,4,6) (6,10,15)两种情况。答案等于l到r选三个点-lcm(i,j,k)<=2k- lcm(i,j,k)<=k。后面的a[i]变成0,导致原本 a[i-1]<=a[i] 变成a[i-1]>0。lcm(i,j,k)=k,说明i,j是k的因子。
2024-03-14 18:44:15 378
原创 Codeforces Round 932 (Div. 2)(Cdp D 容斥 E拆位贪心)
如果堆把左端点弹出去了,到底合不合法的问题,首先如果把左端点弹出去了,但我们依然用的是当前b[r]-b[l]他是大于把[l+1,r] 到r的,所以是合法的,总数-(x+y=a[i])的个数-(y-x=a[i])的个数+(x+y=a[j] and y-x=a[i])的个数。对于(x+y=a[i])的个数就是a[i]/2+1,就比如2 有(0,2) (1,1) 3有(0,3) (1,2)方程就是f[i][j]=min(f[i][j],f[k][j-1]+a[i]-b[i]-b[k]) (k<i)
2024-03-06 20:51:43 573 2
原创 Codeforces Round 807 (Div. 2)(C复制字符串找第k位 D 固定01段 E线段树上二分解决进位问题)
的第六位得来的,因为前面得markmark[mar] 11,从3开始复制到8,得第四位就是6。我们先找到是从第三次复制获得的,且位置是第三次复制的第四位,他是从之前的字符串。是的话就直接删,不是说明这个删除的数用来进位了,就找右边第一个1,把他退位。不会改变01段且最后答案a字符串和b字符串01顺序一定是一样的。能进肯定进,最后有的数肯定是个数为1不能再进了。所以按照贪心不同01的位置小的配小的更小。A.直接最小的n个数匹配最大的n个数。第六位又是从第一次复制的第二位获得的。第二位就是原本字符串的位置了。
2024-02-29 20:12:38 401
原创 Codeforces Round 921 (Div. 2) (C贪心 D期望数学? E线段树)
那么概率就是 (z*j+(j-1)*j)/2) *C(k,j)* (1/P)^(j) * ((P-1)/P)^(k-j)假设第一字母 后面如果要包含n长度的k个子序列 那么 后面至少有n-1组都有k个字母的序列。=v[2]*(1+2+3)=v[2]*(3*(3+1)/2) 就是等差数列后一项。答案就是 4+8的点的贡献+ v[1]*(4-l) - v[8]*10-r即可。P=n*(n-1)/2 即从n个人里面选出来 一对朋友 就会有P种不同情况。找4前面的点2,把点2修改成2到4的点。
2024-01-28 14:04:37 569
原创 Educational Codeforces Round 161 (Rated for Div. 2)(D双链表 E二进制拆位构造递增子序列 C前缀和)
【代码】Educational Codeforces Round 161 (Rated for Div. 2)(D双链表 E二进制拆位构造递增子序列 C前缀和)
2024-01-22 22:54:27 373
原创 Educational Codeforces Round 131 (Rated for Div. 2 E前后缀分解dp D每个点选一个区间 C二分)
【代码】Educational Codeforces Round 131 (Rated for Div. 2 E前后缀分解dp D每个点选一个区间 C二分)
2024-01-04 21:45:19 437
原创 Codeforces Round 804 (Div. 2 D预处理+dp C数学+MEX性质)
【代码】Codeforces Round 804 (Div. 2 D预处理+dp C数学+MEX性质)
2024-01-03 15:21:48 399
原创 Codeforces Round 918 (Div. 4 Ddp E前缀和 F树状数组 G最短路)
转化成前缀和,变成是否有两个点s[i]-s[j-1]==0。前i个字母能不能分成合法序列,0是不能,1是能。再拿个lst数组记录当前点由哪些转移过来的即可。我们排序左端点,然后用树状数组统计右端点即可,求[l,r]的偶数位,奇数位的差,是否等于0。一共有1000*1000个不同的状态。因为坐标很大,我们要离散化全部点。当前区间是 l[i] r[i]范围n=1000,s=1000。赛时AKAK还是写div4爽。因为S=a*a,总和是S。想一个区间有哪些区间合法。其他区间被这个区间包含。[第几个点][速度]
2023-12-29 01:12:34 780
原创 Educational Codeforces Round 124 (Rated for Div. 2) (D 边缘点bfs推答案 C贪心)
A:第一轮剩下的都是奇数,后面全是奇数了,说明两个数相加永远都是偶数,最后答案是最大的那个奇数。边缘点最多就1e6个点,所以直接从边缘点向红色点进行bfs即可。因为最多200000个点,最近的点,一定是红色点边缘点。那么[ ] 和[2,4]两个区间都要从里面选一个连b。由于要n最多项,所以第一个数从1开始,且增长三倍。所以大的那个数至少要大于等于前面的数3倍。观察到第一个点和最后一个点都一定要连。例子a= 1 1 1 1。[1] 和 [3,4][1,2,3] 和[][1,2] 和[4]
2023-12-28 18:27:46 401
原创 Codeforces Round 917 (Div. 2)(D树状数组+二进制求逆序对?)
因为变成全0后,增加一个后缀,不论怎么加,因为他要求的是递增的,所以最多只会让一个位置下标等于数值。可以发现操作如果前面有两个字母固定不能删了,那么后面就全都不能操作了,都是完整的一个后缀了。就是因为a[i]乘2^19肯定比其他数都大,所以剩下的k-18个数都会大于全部a[i]所以如果充值了,最好的贡献是加一个前缀再加一分 让a[1]=1满足就行。就是如果乘2^19已经大于了a[i]里面的全部数,那么后面的贡献就全是。比如 [0,0,0,0,0,1,2,3,4,5,6]记住b[i]是连续的!
2023-12-25 21:00:16 484 2
原创 Codeforces Round 781 (Div. 2 C树上贪心 D二进制+gcd E结论+线段树)
如果第i位是1,那么就会进位到i+1,否则不会进位,第i位通过我们添加一个2^i后会存在2^i。这个时候我们发现我们可以得出来感染完全部需要感染节点后,当前节点剩下还需要感染的点,然后这个时候我们直接去用一个数去判断 当前gcd是不是2^(i)即可,是的话就不是。因为我们是从低位到高位去思考,所以当前低位的二进制我们都知道了,我们先减去他。我们可以通过额外感染加快时间,直接拿个堆去枚举就行了,最多就n次。然后操作的时候,无法避免的是都要一个一个从副本换过来。然后当前 i-1到0位的二进制都是0了。
2023-12-21 18:55:12 392
原创 Codeforces Round 916 (Div. 3)(E:贪心 F贪心dfs G tarjan+topsort +线段树优化建图)
贪心的假设当前点u的儿子节点x不能配对的数最大是 mx,那么如果,他其他子树的全部节点都不够这个mx大,即拿其他子树的全部节点都不能匹配完当前最大子树不能内部消化的点数,那么。可是如果x的子树不能配对的子树大小是10,那么这10个子树不能通过y,z的子树的点来全部配对完。枚举B为中介点i,然后求1到i-1的A的最大值,和i+1到n的C最大值即可。我们可以发现x的4个不能内部消化的点,可以和y和z一共3个不能消化的点配对。答案是错误的,不妨这么想,x的四个点直接和y子树的随便四个点来配合,
2023-12-20 16:15:05 965
原创 Educational Codeforces Round 160 (Rated for Div. 2)(D单调栈优化dp?C二进制贪心 E:行列费用流)
不能换了说明当前位置只能相同,说明从这个位置开始都要删了。我印象里这个好像是原题吧?我记得做过一个最小次数的..之前博客写过,一个数可以被表示成二进制,类似于快速幂。比赛一股脑子往每个数做贡献越想越偏了。就是前面位置能从后面缓过来就换。然后直接从低位到高位模拟即可。所以如果能合并就合成更高维。直接枚举位置判断大小即可。注意 2的4能合成一个8。D:视频连接讲的很清楚。
2023-12-19 14:43:07 514
原创 Codeforces Round 915 (Div. 2) (D 单调栈优化mex E数学)
那么mex的变化就是当前数组从后往前第一个比x小的数的位置 到 当i-1的位置的mex都是x。然后除了栈里面的字母都是不能移动的,把栈里面字母排序后按顺序放回去,判断字符串是否有序即可。往右移,直接去掉最小的那个,最大的依然没变,剩下一个字母为最大的时候,只能移动这个。如果已经确定了某个子串的最大的,那么这个子串右移,这个子串仍然是最大的。比如把2移动到最后,那么1到5这个位置的mex都是2了,最小次数就是栈长度减去开头的字母连续的长度。因为最大子串肯定是从头到尾是单调递减的。注意2的位置的mex是n。
2023-12-18 16:29:09 503 1
原创 Codeforces Round 757 (Div. 2)(D 质因数dp D2筛法优化调和级数)
但是这里面的cnt[x]个数的gcd由i变成了x,cnt[i]-cnt[x]的个数的gcd依然还是i。f[i]:为重拍数组a后前缀的gcd==i的前缀gcd之和的最大值。即f[x]=max(f[x],f[i]+(x-i)*cnt[x])i的个数就增加i*prime[j]的数的个数,逆序增加,也是个优化。那么贡献就是 2^(n-k) * 2^(k-1)*(2^i)假设当前第i位的二进制的1的个数k,0的个数是n-k。cnt[x]代表x的个数,前缀gcd由i变成了x。cnt[i]里面包含了cnt[x]
2023-12-15 18:52:05 94
原创 Codeforces Round 774 (Div. 2) (D树形dp上司的舞会 C二进制枚举+快速幂? E打表求每个底数不同贡献)
有个结论是如果当前点选了,相邻的点不能选,不然 w[u]=w[x],但是又由于这是一棵树,他至少还有父节点,所以w[u]至少还要加上父亲节点所以不可能相等。f[u][1]:以u为子树,不选u为好节点的最大个数,且这个最大个数的代价总和最小。f[u][0]:以u为子树,选u为好节点的最大个数,且这个最大个数的代价总和最小。贪心嘛,拿最小的数和最大的数总和比就行,个数只多1即可枚举最大的数拿了几个就好。然后对于2的幂次方的数来说,不同数的个数就是幂次方的不同数。2^1 2^2 2^3 2的行。
2023-12-14 16:44:22 65
原创 Codeforces Round 779 (Div. 2)(D trie查询最大最小值固定区间)
所以直接利用trie去查询每个数最大的是不是r和最小的数是不是l即可。利用系数有一半有2的因子,和本身排列有一半是2的因子直接全排列即可。(如果相同,异或上x就会弄出来两个相同数,就不合法了).直接想两个长度的怎么填就好了,比两个长度大的肯定也满足。所以可以证明这个数肯定是不重且最大的数是r最小的数是l。从因子出发,因为存在质数和1,所以gcd只能为2。因为是排列,最大的数肯定后面都是相同的数。然后观察因为他是连续的,且每个元素不同。首先肯定有一个数 a[i]^x=l。如果是两个00中间至少插入两个1。
2023-12-13 18:37:43 62
原创 Codeforces Round 777 (Div. 2) (C D分类讨论 E倍增+贪心)
因为字典序最小,所以直接让当前可以到达的位置里面的最小的位置等于当前最终结果的数即可。对于其他位置,因为不影响结果,所以直接从还存在的位置放进去第一个大于当前数即可。所以k=(mx-n)/(n-x)就是论数了,mx记得减n,因为本来就有n个人。实际做法是观察到如果是不合法的矩形一定存在2*2的矩阵和是3。因为p数组有x个不同元素,那么每轮就有n-x个人出去了。求出来之后就会发现有些位置会有不同的初始位置到达。然后倍增求出来每个位置最后会到哪个位置。B:写了个很暴力的二分加前缀和...分类讨论这里就不讲了。
2023-12-12 15:43:03 87
原创 Codeforces Round 769 (Div. 2)(Dgcd st表+二分 or 分解因数 C 位运算分类讨论)
A - ABC#include<bits/stdc++.h>using namespace std;const int N = 1e6+10,mod=998244353;#define int long longtypedef long long LL;typedef pair<int, int> PII;typedef unsigned long long ULL;const long long inf=1e17;using node=tuple<in
2023-12-11 15:53:14 100
原创 Codeforces Round 914 (Div. 2)(A-D全是思维+数据结构优化)
中间a[k]>b[i]:[j+1:i-1]这个区间的所有数的a[k]<=b[i] --->这个区间的a最大值不能大于b[i]中间b[k]>b[i]:[j+1:i-1]这个区间的b[k]>=b[i] --->这个区间的b的最小值要大于b[i]当前下标往左的第一个a[j]==b[i]的数或者 当前下标往右第一个a[j]==b[i]的数。排序完后,如果当前要求的是i点,那么直接求i点能往右到达的最右的点即可。就如果 中间b[k]<b[i]或者就是中间a[k]>b[i]a[i]>b[i] 直接 no。
2023-12-10 17:40:44 520
原创 Codeforces Round 851 (Div. 2 D:枚举+组合 Edp)
首先因为坐标不同,不同的两个点的位置肯定是不同的,所以直接枚举两个点即可。然后还要满足这两个点中间没数,和左右满足条件不改变这两个点合并即可。如果两个点中间有位置,那么他们的位置其实是中间的点构成的位置。每一个数位单独考虑,如果是偶数就分一半,否则交换多1。相当于找第一个位置前后2的个数相同·首先我们是能计算出第一个数的和。然后就手玩一下就得出这个规律了。第三个数=11 1 10。不解释了,感觉做了很多次。第二个数=10 2 8。第四个数=12 5 7。第五个数=13 4 9。第一个数=9 3 6。
2023-12-08 17:44:26 65
原创 Codeforces Round 913 (Div. 3)(D二分 F环加枚举 G基环树)
然后我直接维护一个可达区间,如果当前区间在这个可达区间右侧,那我最右边可以直接拉曼跳到right+k,左区间可以往左边跳,另一个同理。我也不知道为啥看了个题就直接觉得跟最大值有关...,可能每天刷一场cf刷多了,直觉就来了....因为这两个枚举都要用到原本灯状态,所以我直接懒狗,写了个dfs函数来记录到map里面了。但是注意到,如果当前点是亮的,一定要改变他,所以我们直接贪心即可。对就是这个题,我做了一个小时,然后F+G也才用了一个小时。2.正常建边,拓扑排序删掉叶子节点,留下环,再单独处理环。
2023-12-06 14:43:55 251
原创 Codeforces Round 899 (Div. 2)(C手玩? D换根dp+贪心)
考虑到从后往前选数字是不会对前面的数字造成影响的,我们可以不停先删去奇数编号大于0的数字,这样子剩下大于0的数字全部为偶数编号,如果第一个数字 ≥ 0显然,我们可以在取完第一个数字后使得偶数编号变为奇数编号,如果第二个数字 ≤ 0我们可以删去它使得后面的奇偶序翻转,但当第一个数字小于0,第二个数字大于0的时候,我们要考虑舍弃第二个数字的贡献还是选择第一个负数(容易发现对这两个数字操作改变奇偶的代价是最小的)。首先我们无论怎么选,都要让当前叶子节点先变成和他父节点的值一样。老规矩:操作题先想操作有啥性质。
2023-12-05 18:00:49 95
原创 Educational Codeforces Round 159 (Rated for Div. 2)(B 二分贪心 Cgcd D二分+前缀和 E字典树)
对于不是反转的区间 [1,L-1]和[R-1,N]这两个区间,直接从里面找即可。我直接一眼直觉得出结论了ahhh(虽然不知道这想法哪来的,反正就很直觉)注意这里的pre[R]-pre[x-1]是代表着翻转的区间的变化量。3-2就代表着我从第二个点到第三个点少了一个可以匹配的字符串。然后要减去的代价是两个点之间消失的个数*当前点的长度-1。直接跑个字典树,然后翻转字符串减去要减去的贡献即可。前面能做的任务要减1,能解决的总任务是2*x-1。第二个数是 b+kw=x -> x-b=kw。
2023-12-04 19:22:18 855
原创 Codeforces Round 906 (Div. 2)(D推公式 E1分类讨论区间 E2 dp+线段树)
所以可得 如果当前是0 那么插入当前位置的翻转后的位置,如果当前是1,那么插入到当前位置的前面的位置。所以这个(i+j-i*j)肯定是负数,不满足等式,所以证明如果能连i和j点,必然可以先连1点。因为可能我后面再加个6的点,但我不增加区间,他可以由f[4][5]和f[5][5]最大值获得。因为f[4]代表着没被区间覆盖,说明f[4]已经把前面能覆盖到4的点的区间已经删除了)对于第二个条件两个区间不相交,说明如果去掉某个区间,那么这个点只能被一个区间覆盖。我们直接暴力枚举每个点,以当前端点为相交的部分即可。
2023-11-30 18:58:50 146
原创 Codeforces Round 907 (Div. 2) (C 贪心 D套路? F dfs序+差分树状数组)
C:贪心,肯定是积个大的秒后面数量多的,然后当操作最后一个数的时候,尽量别浪费当前计数器的数,要分奇偶性和1,比如8,前面已经有2了,那么再操作2次,计数器变成4,操作个计数器秒掉,如果当前是8,前面计数器是3,为了不浪费计数器,最后一次肯定是直接消灭而不是使用计数器,所以先-1变成偶数(如果不这样做,最后计数器会多1,次数可能会增加),再换成偶数操作即可,特判1。如果当前数a[i]可以整除2^x,然后加上2^(x-1),那么下次这个数就不能整除2^x。假设 5是新增的节点,我们怎么操作,
2023-11-29 17:40:19 194
原创 Codeforces Round 908 (Div. 2) (思维 + 鸽巢原理+枚举)
我10w个数枚举完后,当前数肯定没有的,然后个数取当前数就行了,答案肯定是0。因为n=10w,由于鸽巢原理,就是L到R总和很大,由于n的不同数有10w个。你肯定直接插入到最后一个7后面嘛,毕竟越后面插入,中间用得到6的数更少。比如 7 2 1 是由最后一个数1操作来的,所以上一个序列是。观察最后一个数,每次都是由最后一个数操作才得到当前序列的。然后还是由最后一个数2操作来的,所以上一个序列是。然后继续由最后一个属1操作来的,所以上一个序列是。我是这样想的,让b数组随便插入而且还要非单调递增。
2023-11-28 16:24:16 169
原创 Codeforces Round 911 (Div. 2)(C dp D gcd 分解+容斥 E tarjan+dp)
然后因为是拓扑序大的 scc_cnt小,因为tarjan是先到底部的,底部的点会先缩,再回溯到上面缩,所以dp直接从1开始即可。比如上面例子的f[2]要减去f[4] f[1]要减去f[1]减去f[2]减去f[4](这里的f[2]要先减去f[4]哦)通过一个调和级数求1到10w的每个数的因子(不是质因子哦,而是因子,比如16的因子有1 2 4 8 16)f[4]=1 f[2]=1 f[1]=1(因为只有两个数嘛,所以只有一对)然后我们可以求当前数的当前因子能和前面数的因子的总贡献。
2023-11-27 17:12:00 693
原创 Codeforces Round 745 (Div. 2)(C:前缀和+滑动窗口,E:位运算加分块)
然后想U,如果某个U到D和U+x到D,相同答案,那么选谁呢,其实都一样,如果D往下移,那么他们要加的公共部分都是一样的就是g[D][L],g[D][R],和D那条线,这个都是要加的,休息区间有:[st+x,st+x+y-1],[st+x+y+x,st+x+y+x+y-1]....工作区间有:[st,st+x-1],[st+x+y,st+x+y+x]....如果x+y500,那么只需要400次就可以遍历完所以需要修改的点,
2023-11-23 22:43:52 345
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人