diff --git a/404.html b/404.html new file mode 100644 index 0000000..58bcadf --- /dev/null +++ b/404.html @@ -0,0 +1,89 @@ + + + + + + + Page Not Found + + + +
+
4 0 4
+
+ Page not found +
+
+ + + + + + Back + +
+
+ + + + \ No newline at end of file diff --git a/archives/index.html b/archives/index.html new file mode 100644 index 0000000..eca132e --- /dev/null +++ b/archives/index.html @@ -0,0 +1,150 @@ + + + + + +文章归档 | 花似雪的博客 + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ + +

文章归档

+
+ +

2023

+ + + + + + + + + + +
+ +
+ + +
+ +
+
+
+ + + + + + + + + + + diff --git a/atom.xml b/atom.xml new file mode 100644 index 0000000..4104ea9 --- /dev/null +++ b/atom.xml @@ -0,0 +1,151 @@ + + + https://mongohsy.github.io + 花似雪的博客 + 2023-08-29T14:28:01.506Z + https://github.com/jpmonette/feed + + + 加油,优秀的你 + https://mongohsy.github.io/images/avatar.png + https://mongohsy.github.io/favicon.ico + All rights reserved 2023, 花似雪的博客 + + <![CDATA[Circus P题解]]> + https://mongohsy.github.io/post/circus-p-ti-jie/ + + + 2023-08-28T10:59:57.000Z + 考虑我们现在树上有k头牛。它们无论散布在树的什么地方,我们总可以移动某些牛,使得这
+kk头牛位于树上的1...k1...k号点。这是非常显然的。

+
+

我们考虑一下,假设位置(x,y)(x,y)上的牛是可以在不改动其它位置上的牛的前提下完成交换的,我们把它称作“交换关系”(注意这一名词是针对位置的,不针对位置上到底是哪头牛)。则如果位置(x,y)(x,y)与位置(y,z)(y,z)都具有“交换关系”,那么,位置(x,z)(x,z)也将具有交换关系,因为我们可以先交换位置(x,y)(x,y),再交换(y,z)(y,z),再交换(x,y)(x,y)达到交换。换句话说,“交换关系”这种性质,具有可传递性

+

则我们如果把“交换关系”看作边的话,它们将会构成许多团(完全图)。设这些团的大小为sis^{i},则有kk头牛时的答案即为

+

k!si\frac{k!}{∑s^{i}} +

+
+

现在我们考虑一下,什么情况下两个位置(x,y)(x,y)会具有“交换关系”。
+我们不妨想一想,假如你正常地想调换两个位置,你会怎么做?
+现在我们画出图来:
+
+假设我们要交换位置3355的牛,应该怎么办?
+先把一头牛移到11等待,然后再移动另一头牛。
+这启发我们在移动牛时需要在分叉的路径上等待。
+也就是说,在一条直线上的牛是不可能交换的。只有有“分叉”的地方才能完成交换。

+
+

什么样的地方不存在“分叉”呢?
+对,一条路径。
+我们定义一条“”为一条路径,使得路径两端的点的度数都不等于22,而链上其它点的度数都等于22
+典型的例子:
+
+(3456)(3−4−5−6)是一条链,链的两端是子树33与子树66。(实际上,如(21112)(2−11−12)(79)(7−9)都是链)。
+来看一下本人亲自拿ipad上的procreate画的抽象草图:
+
+(白瞎这么好的软件

+

我们设左边子树有AA个点,右边子树有BB个点,链上有CC个点(注意链两段的点既属于链,又属于子树)。
+则如果k<(A1)+(B1)k<(A−1)+(B−1)的话,左右子树的点就可以任意交换。

+

我们感性理解一下:
+首先,将所有kk个点全都移到AA子树或BB子树中。则此时链上没有任何点(包括链两段),并且两颗子树中至少有一个空隙
+则这一个空隙,就可以成为我们之前提到的“等待”处,进行交换。
+而只要能完成一次“交换”,则所有位置都可以交换。
+(感性理解一下吧……严谨的证明我自己都看不懂……)
+因为(A1)+(B1)=NC(A−1)+(B−1)=N−C,因此只要k<NCk<N−C,两边子树就是可交换的。

+
+

我们考虑删去所有满足上述要求的链上的边。如果从大到小地枚举kk的话,则删边就会变成加边,就可以使用并查集维护联通块。

+

考虑对于一坨联通块,有多少个外部节点可以通到它。设ai,bi{a^{i},b^{i}}为一条链,使得链的一端在块内,一端在块外。再设Bi{B^{i}}为该链通到的另一端的子树大小。

+

则能通到该联通块的节点数量为

+

k(kBi1)k-∑(k-B^{i}-1) +

+

(感性理解:外层用kk减去的那一大坨,是通不到的点的数量;而内层用kk减去的,则是对于当前链ai,bi{a^{i},b^{i}}来说,能通到联通块内的数量。很明显这样做可能会重复计算,但估计容斥容斥就出来了?)

+
+

我们对于每个联通块,维护它内部的边数量insins与它周围被切断的边数outout
+则按照实际意义化简,我们得到了

+

k(nins1)+(nk1)outk−(n−ins−1)+(n−k−1)out +

+

理解:
+(nins1)(n−ins−1)是外部的点数量(注意insins是边数)。我们一开始假设这所有外部的点全部通不到)
+outout是被切断的边数,就是上述的ai,bi{a^{i},b^{i}}的数量。乘上(nk1)(n−k−1)是子树中原本的kk个点数量,再加上需要空出来的那个“等待区”的大小。这是(nins1)(n−ins−1)中多减去的那些点。

+

再套上我们一开始得出的那个公式k!si\frac{k!}{∑s^{i}} ,则我们得出的那个k(nins1)+(nk1)outk−(n−ins−1)+(n−k−1)out的式子就是分母中的sis^{i}。通过预处理阶乘和阶乘的逆元,我们可以直接应用公式。

+
+

最后是统计答案。直接枚举每个联通块即可,不必担心复杂度,因为所有时刻的联通块数量是O(n)O(n)的(联通块数量与∑链长是同级别的)。
+复杂度分析:瓶颈在于添加上符合要求的链时,为了方便在kk递减时直接处理要排序。如果用桶排,复杂度就是O(n)O(n)的。这里为了图方便,使用的是O(nlogn)O(n log n)的常规排序。然后是并查集,复杂度是nα(n)nα(n)的。这里为了方便,没有按秩合并,因此仍然是O(nlogn)O(nlogn)的。另一个瓶颈就是维护仍然存在的联通块标号,只能采取平衡树等在O(nlogn)内通过。但是我不小心敲的是vector,理论复杂度是O(n2)O(n^{2})的,会被菊花图卡掉,但是没有被卡,大家敲的时候用普通set即可。

+
+

如下是AC代码:

+
#include<bits/stdc++.h>
+using namespace std;
+const int mod=1e9+7;
+int ksm(int x,int y){
+	int z=1;
+	for(;y;x=1ll*x*x%mod,y>>=1)if(y&1)z=1ll*z*x%mod;
+	return z;
+}
+int n,fac[100100],inv[100100],res[100100];
+vector<int>g[100100],key;
+struct dsu{
+	int fa,ins,out;
+}a[100100];
+void init(){
+	for(int i=1;i<=n;i++)if(g[i].size()!=2)a[i].fa=i,a[i].out=g[i].size(),key.push_back(i);
+	fac[0]=1;
+	for(int i=1;i<=n;i++)fac[i]=1ll*fac[i-1]*i%mod;
+	inv[n]=ksm(fac[n],mod-2);
+	for(int i=n-1;i>=0;i--)inv[i]=1ll*inv[i+1]*(i+1)%mod;
+}
+int find(int x){
+	return a[x].fa==x?x:a[x].fa=find(a[x].fa);
+}
+void merge(int x,int y,int z){
+	x=find(x),y=find(y);
+	if(x==y)return;
+	key.erase(lower_bound(key.begin(),key.end(),y));
+	a[x].ins+=a[y].ins+z-1,a[x].out+=a[y].out-2,a[y].fa=x;
+}
+struct path{
+	int x,y,z;
+	path(int u,int v,int w){x=u,y=v,z=w;}
+	friend bool operator <(const path &x,const path &y){
+		return x.z<y.z;
+	}
+};
+vector<path>paths;
+void getpath(int x,int fa,int len,int from){
+	if(g[x].size()!=2){
+		if(from)paths.push_back(path(from,x,len));
+		len=1,from=x;
+	}
+	for(auto y:g[x])if(y!=fa)getpath(y,x,len+1,from);
+}
+int main(){
+	scanf("%d",&n);
+	for(int i=1,x,y;i<n;i++)scanf("%d%d",&x,&y),g[x].push_back(y),g[y].push_back(x);
+	init();
+	getpath(key.front(),0,0,0);
+	sort(paths.begin(),paths.end());
+	for(int i=n-1,j=0;i;i--){
+		while(j<paths.size()&&i<n-paths[j].z)merge(paths[j].x,paths[j].y,paths[j].z),j++;
+		res[i]=fac[i];
+		for(auto x:key)res[i]=1ll*res[i]*inv[i-(n-a[x].ins-1)+a[x].out*(n-i-1)]%mod;
+	}
+	res[n]=fac[n];
+	for(int i=1;i<=n;i++)printf("%d\n",res[i]);
+	return 0;
+}
+
+]]>
+
+ + <![CDATA[Hello Blog]]> + https://mongohsy.github.io/post/hello-blog/ + + + 2023-08-28T10:45:02.000Z + +

这里是花似雪jacxi的个人博客

+ +

欢迎来到花似雪的个人博客
+这是我的第一篇文章
+日后会添加更多文章
+感谢支持!

+]]>
+
+
\ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100755 index 0000000..5ac9c3d Binary files /dev/null and b/favicon.ico differ diff --git a/images/.DS_Store b/images/.DS_Store new file mode 100644 index 0000000..d254858 Binary files /dev/null and b/images/.DS_Store differ diff --git a/images/avatar.png b/images/avatar.png new file mode 100755 index 0000000..5ac9c3d Binary files /dev/null and b/images/avatar.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..583b17b --- /dev/null +++ b/index.html @@ -0,0 +1,160 @@ + + + + + +花似雪的博客 + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + + + + +
+ + +
+ +
+
+
+ + + + + + + + + + + diff --git a/media/.DS_Store b/media/.DS_Store new file mode 100644 index 0000000..c811270 Binary files /dev/null and b/media/.DS_Store differ diff --git a/media/images/sidebar-bg.jpg b/media/images/sidebar-bg.jpg new file mode 100644 index 0000000..892b749 Binary files /dev/null and b/media/images/sidebar-bg.jpg differ diff --git a/media/logo.png b/media/logo.png new file mode 100644 index 0000000..2fe16cf Binary files /dev/null and b/media/logo.png differ diff --git a/post-images/.DS_Store b/post-images/.DS_Store new file mode 100644 index 0000000..e480cc2 Binary files /dev/null and b/post-images/.DS_Store differ diff --git a/post-images/hello-blog.png b/post-images/hello-blog.png new file mode 100644 index 0000000..993042d Binary files /dev/null and b/post-images/hello-blog.png differ diff --git a/post/about/index.html b/post/about/index.html new file mode 100644 index 0000000..e6858b7 --- /dev/null +++ b/post/about/index.html @@ -0,0 +1,185 @@ + + + + + +关于 | 花似雪的博客 + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+

关于

+ + +
+
+

欢迎来到我的小站呀,很高兴遇见你!🤝

+
+

🏠 关于本站

+

这是花似雪的个人博客

+

👨‍💻 博主是谁

+

当然是我花似雪啦

+

⛹ 兴趣爱好

+

编程,跑步,唱跳rap

+

📬 联系我呀

+ +
+ + + + + +
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/post/circus-p-ti-jie/index.html b/post/circus-p-ti-jie/index.html new file mode 100644 index 0000000..80488fa --- /dev/null +++ b/post/circus-p-ti-jie/index.html @@ -0,0 +1,292 @@ + + + + + +Circus P题解 | 花似雪的博客 + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+

Circus P题解

+ + +
+

考虑我们现在树上有k头牛。它们无论散布在树的什么地方,我们总可以移动某些牛,使得这
+kk头牛位于树上的1...k1...k号点。这是非常显然的。

+
+

我们考虑一下,假设位置(x,y)(x,y)上的牛是可以在不改动其它位置上的牛的前提下完成交换的,我们把它称作“交换关系”(注意这一名词是针对位置的,不针对位置上到底是哪头牛)。则如果位置(x,y)(x,y)与位置(y,z)(y,z)都具有“交换关系”,那么,位置(x,z)(x,z)也将具有交换关系,因为我们可以先交换位置(x,y)(x,y),再交换(y,z)(y,z),再交换(x,y)(x,y)达到交换。换句话说,“交换关系”这种性质,具有可传递性

+

则我们如果把“交换关系”看作边的话,它们将会构成许多团(完全图)。设这些团的大小为sis^{i},则有kk头牛时的答案即为

+

k!si\frac{k!}{∑s^{i}} +

+
+

现在我们考虑一下,什么情况下两个位置(x,y)(x,y)会具有“交换关系”。
+我们不妨想一想,假如你正常地想调换两个位置,你会怎么做?
+现在我们画出图来:
+
+假设我们要交换位置3355的牛,应该怎么办?
+先把一头牛移到11等待,然后再移动另一头牛。
+这启发我们在移动牛时需要在分叉的路径上等待。
+也就是说,在一条直线上的牛是不可能交换的。只有有“分叉”的地方才能完成交换。

+
+

什么样的地方不存在“分叉”呢?
+对,一条路径。
+我们定义一条“”为一条路径,使得路径两端的点的度数都不等于22,而链上其它点的度数都等于22
+典型的例子:
+
+(3456)(3−4−5−6)是一条链,链的两端是子树33与子树66。(实际上,如(21112)(2−11−12)(79)(7−9)都是链)。
+来看一下本人亲自拿ipad上的procreate画的抽象草图:
+
+(白瞎这么好的软件

+

我们设左边子树有AA个点,右边子树有BB个点,链上有CC个点(注意链两段的点既属于链,又属于子树)。
+则如果k<(A1)+(B1)k<(A−1)+(B−1)的话,左右子树的点就可以任意交换。

+

我们感性理解一下:
+首先,将所有kk个点全都移到AA子树或BB子树中。则此时链上没有任何点(包括链两段),并且两颗子树中至少有一个空隙
+则这一个空隙,就可以成为我们之前提到的“等待”处,进行交换。
+而只要能完成一次“交换”,则所有位置都可以交换。
+(感性理解一下吧……严谨的证明我自己都看不懂……)
+因为(A1)+(B1)=NC(A−1)+(B−1)=N−C,因此只要k<NCk<N−C,两边子树就是可交换的。

+
+

我们考虑删去所有满足上述要求的链上的边。如果从大到小地枚举kk的话,则删边就会变成加边,就可以使用并查集维护联通块。

+

考虑对于一坨联通块,有多少个外部节点可以通到它。设ai,bi{a^{i},b^{i}}为一条链,使得链的一端在块内,一端在块外。再设Bi{B^{i}}为该链通到的另一端的子树大小。

+

则能通到该联通块的节点数量为

+

k(kBi1)k-∑(k-B^{i}-1) +

+

(感性理解:外层用kk减去的那一大坨,是通不到的点的数量;而内层用kk减去的,则是对于当前链ai,bi{a^{i},b^{i}}来说,能通到联通块内的数量。很明显这样做可能会重复计算,但估计容斥容斥就出来了?)

+
+

我们对于每个联通块,维护它内部的边数量insins与它周围被切断的边数outout
+则按照实际意义化简,我们得到了

+

k(nins1)+(nk1)outk−(n−ins−1)+(n−k−1)out +

+

理解:
+(nins1)(n−ins−1)是外部的点数量(注意insins是边数)。我们一开始假设这所有外部的点全部通不到)
+outout是被切断的边数,就是上述的ai,bi{a^{i},b^{i}}的数量。乘上(nk1)(n−k−1)是子树中原本的kk个点数量,再加上需要空出来的那个“等待区”的大小。这是(nins1)(n−ins−1)中多减去的那些点。

+

再套上我们一开始得出的那个公式k!si\frac{k!}{∑s^{i}} ,则我们得出的那个k(nins1)+(nk1)outk−(n−ins−1)+(n−k−1)out的式子就是分母中的sis^{i}。通过预处理阶乘和阶乘的逆元,我们可以直接应用公式。

+
+

最后是统计答案。直接枚举每个联通块即可,不必担心复杂度,因为所有时刻的联通块数量是O(n)O(n)的(联通块数量与∑链长是同级别的)。
+复杂度分析:瓶颈在于添加上符合要求的链时,为了方便在kk递减时直接处理要排序。如果用桶排,复杂度就是O(n)O(n)的。这里为了图方便,使用的是O(nlogn)O(n log n)的常规排序。然后是并查集,复杂度是nα(n)nα(n)的。这里为了方便,没有按秩合并,因此仍然是O(nlogn)O(nlogn)的。另一个瓶颈就是维护仍然存在的联通块标号,只能采取平衡树等在O(nlogn)内通过。但是我不小心敲的是vector,理论复杂度是O(n2)O(n^{2})的,会被菊花图卡掉,但是没有被卡,大家敲的时候用普通set即可。

+
+

如下是AC代码:

+
#include<bits/stdc++.h>
+using namespace std;
+const int mod=1e9+7;
+int ksm(int x,int y){
+	int z=1;
+	for(;y;x=1ll*x*x%mod,y>>=1)if(y&1)z=1ll*z*x%mod;
+	return z;
+}
+int n,fac[100100],inv[100100],res[100100];
+vector<int>g[100100],key;
+struct dsu{
+	int fa,ins,out;
+}a[100100];
+void init(){
+	for(int i=1;i<=n;i++)if(g[i].size()!=2)a[i].fa=i,a[i].out=g[i].size(),key.push_back(i);
+	fac[0]=1;
+	for(int i=1;i<=n;i++)fac[i]=1ll*fac[i-1]*i%mod;
+	inv[n]=ksm(fac[n],mod-2);
+	for(int i=n-1;i>=0;i--)inv[i]=1ll*inv[i+1]*(i+1)%mod;
+}
+int find(int x){
+	return a[x].fa==x?x:a[x].fa=find(a[x].fa);
+}
+void merge(int x,int y,int z){
+	x=find(x),y=find(y);
+	if(x==y)return;
+	key.erase(lower_bound(key.begin(),key.end(),y));
+	a[x].ins+=a[y].ins+z-1,a[x].out+=a[y].out-2,a[y].fa=x;
+}
+struct path{
+	int x,y,z;
+	path(int u,int v,int w){x=u,y=v,z=w;}
+	friend bool operator <(const path &x,const path &y){
+		return x.z<y.z;
+	}
+};
+vector<path>paths;
+void getpath(int x,int fa,int len,int from){
+	if(g[x].size()!=2){
+		if(from)paths.push_back(path(from,x,len));
+		len=1,from=x;
+	}
+	for(auto y:g[x])if(y!=fa)getpath(y,x,len+1,from);
+}
+int main(){
+	scanf("%d",&n);
+	for(int i=1,x,y;i<n;i++)scanf("%d%d",&x,&y),g[x].push_back(y),g[y].push_back(x);
+	init();
+	getpath(key.front(),0,0,0);
+	sort(paths.begin(),paths.end());
+	for(int i=n-1,j=0;i;i--){
+		while(j<paths.size()&&i<n-paths[j].z)merge(paths[j].x,paths[j].y,paths[j].z),j++;
+		res[i]=fac[i];
+		for(auto x:key)res[i]=1ll*res[i]*inv[i-(n-a[x].ins-1)+a[x].out*(n-i-1)]%mod;
+	}
+	res[n]=fac[n];
+	for(int i=1;i<=n;i++)printf("%d\n",res[i]);
+	return 0;
+}
+
+ +
+ + + + + + + +
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/post/hello-blog/index.html b/post/hello-blog/index.html new file mode 100644 index 0000000..8d49ede --- /dev/null +++ b/post/hello-blog/index.html @@ -0,0 +1,182 @@ + + + + + +Hello Blog | 花似雪的博客 + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+

Hello Blog

+ + +
+
+ +
+
+

这里是花似雪jacxi的个人博客

+
+

欢迎来到花似雪的个人博客
+这是我的第一篇文章
+日后会添加更多文章
+感谢支持!

+ +
+ + + + + +
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/styles/main.css b/styles/main.css new file mode 100644 index 0000000..cb86470 --- /dev/null +++ b/styles/main.css @@ -0,0 +1,760 @@ +/*! modern-normalize | MIT License | https://github.com/sindresorhus/modern-normalize */ +/* Document + ========================================================================== */ +/** + * Use a better box model (opinionated). + */ +html { + box-sizing: border-box; +} +*, +*::before, +*::after { + box-sizing: inherit; + margin: 0; + padding: 0; +} +/** + * Use a more readable tab size (opinionated). + */ +:root { + -moz-tab-size: 4; + tab-size: 4; +} +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ +html { + line-height: 1.15; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} +/* Sections + ========================================================================== */ +/** + * Remove the margin in all browsers. + */ +body { + margin: 0; + font-size: 14px; +} +/** + * Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) + */ +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; +} +/* Grouping content + ========================================================================== */ +/** + * Add the correct height in Firefox. + */ +hr { + height: 0; +} +/* Text-level semantics + ========================================================================== */ +/** + * Add the correct text decoration in Chrome, Edge, and Safari. + */ +abbr[title] { + text-decoration: underline dotted; +} +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} +/** + * 1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp, +pre { + font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} +/** + * Prevent `sub` and `sup` elements from affecting the line height in all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sub { + bottom: -0.25em; +} +sup { + top: -0.5em; +} +/* Forms + ========================================================================== */ +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; + /* 1 */ + margin: 0; + /* 2 */ +} +/** + * Remove the inheritance of text transform in Edge and Firefox. + * 1. Remove the inheritance of text transform in Firefox. + */ +button, +select { + /* 1 */ + text-transform: none; +} +/** + * Correct the inability to style clickable types in iOS and Safari. + */ +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; +} +/** + * Remove the inner border and padding in Firefox. + */ +button::-moz-focus-inner, +[type='button']::-moz-focus-inner, +[type='reset']::-moz-focus-inner, +[type='submit']::-moz-focus-inner { + border-style: none; + padding: 0; +} +/** + * Restore the focus styles unset by the previous rule. + */ +button:-moz-focusring, +[type='button']:-moz-focusring, +[type='reset']:-moz-focusring, +[type='submit']:-moz-focusring { + outline: 1px dotted ButtonText; +} +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} +/** + * Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers. + */ +legend { + padding: 0; +} +/** + * Add the correct vertical alignment in Chrome and Firefox. + */ +progress { + vertical-align: baseline; +} +/** + * Correct the cursor style of increment and decrement buttons in Safari. + */ +[type='number']::-webkit-inner-spin-button, +[type='number']::-webkit-outer-spin-button { + height: auto; +} +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ +[type='search']::-webkit-search-decoration { + -webkit-appearance: none; +} +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} +/* Interactive + ========================================================================== */ +/* + * Add the correct display in Chrome and Safari. + */ +summary { + display: list-item; +} +/* a11y-dark theme */ +/* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */ +/* @author: ericwbailey */ +/* Comment */ +.hljs-comment, +.hljs-quote { + color: #d4d0ab; +} +/* Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, +.hljs-regexp, +.hljs-deletion { + color: #ffa07a; +} +/* Orange */ +.hljs-number, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params, +.hljs-meta, +.hljs-link { + color: #f5ab35; +} +/* Yellow */ +.hljs-attribute { + color: #ffd700; +} +/* Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet, +.hljs-addition { + color: #abe338; +} +/* Blue */ +.hljs-title, +.hljs-section { + color: #00e0e0; +} +/* Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #dcc6e0; +} +.hljs { + display: block; + overflow-x: auto; + background: #2b2b2b; + color: #f8f8f2; + padding: 0.5em; +} +.hljs-emphasis { + font-style: italic; +} +.hljs-strong { + font-weight: bold; +} +@media screen and (-ms-high-contrast: active) { + .hljs-addition, + .hljs-attribute, + .hljs-built_in, + .hljs-builtin-name, + .hljs-bullet, + .hljs-comment, + .hljs-link, + .hljs-literal, + .hljs-meta, + .hljs-number, + .hljs-params, + .hljs-string, + .hljs-symbol, + .hljs-type, + .hljs-quote { + color: highlight; + } + .hljs-keyword, + .hljs-selector-tag { + font-weight: bold; + } +} +body { + background: #f8f9fa; + color: #495057; + font-size: 16px; +} +a { + text-decoration: none; + color: #495057; +} +.sidebar { + width: 320px; + position: fixed; + left: 0; + top: 0; + bottom: 0; + background-color: #7c8280; + background-size: cover; + background-position: center; + background-image: url('../media/images/sidebar-bg.jpg'); + display: flex; + flex-direction: column; + overflow-y: scroll; +} +.sidebar .menu-btn { + display: none; +} +.sidebar .top-container { + text-align: center; + padding: 48px 16px; + flex: 1; +} +.sidebar .top-container .site-logo { + width: 80px; + height: 80px; + border-radius: 50%; + border: 2px solid #F1F3F5; + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16); +} +.sidebar .top-container .site-title { + font-size: 24px; + padding: 32px 0; + color: #dee2e6; +} +.sidebar .top-container .site-nav { + display: block; + padding: 8px 16px; + margin: 16px 0; + color: #dee2e6; + transition: all 0.3s; +} +.sidebar .top-container .site-nav:hover { + color: #f8f9fa; +} +.sidebar .bottom-container { + padding: 24px 16px; + color: #dee2e6; + font-size: 12px; +} +.sidebar .bottom-container .site-description { + padding: 16px 0; +} +.sidebar .bottom-container a { + color: #fff; +} +.main-container { + margin-left: 320px; +} +.content-container { + max-width: 1064px; + margin: 0 auto; + padding: 48px 32px; +} +.post-item { + display: flex; + padding-bottom: 32px; + margin-bottom: 32px; + border-bottom: 1px solid #ced4da; +} +.post-item:last-of-type { + border-bottom: none; +} +.post-item .left { + flex: 1; +} +.post-item .left .post-title { + font-size: 24px; + transition: all 0.3s; +} +.post-item .left .post-title:hover { + color: #212529; +} +.post-item .left .post-date { + font-size: 18px; + padding: 24px 0; + color: #adb5bd; +} +.post-item .left .post-abstract { + line-height: 24px; + font-size: 18px; + color: #868e96; +} +.post-item .right { + flex-shrink: 0; + margin-left: 24px; + width: 38.2%; +} +.post-item .right .feature-container { + padding-top: 56.25%; + background-size: cover; + background-position: center; + border-radius: 3px; + box-shadow: 0 2px 5px rgba(0, 0, 25, 0.1), 0 5px 75px 1px rgba(0, 0, 50, 0.2); +} +.pagination-container { + display: flex; + justify-content: space-between; +} +.pagination-container .prev, +.pagination-container .next { + display: inline-block; + padding: 8px 16px; + background: #fff; + border: 1px solid #f1f3f5; + border-radius: 2px; + transition: all 0.3s; +} +.pagination-container .prev:hover, +.pagination-container .next:hover { + transform: translateY(-3px); + border: 1px solid #dee2e6; +} +.post-detail { + max-width: 720px; + margin: 0 auto; +} +.post-detail .feature-container { + padding-top: 56.25%; + background-size: cover; + background-position: center; + border-radius: 3px; + box-shadow: 0 2px 5px rgba(0, 0, 25, 0.1), 0 5px 75px 1px rgba(0, 0, 50, 0.2); + margin-bottom: 24px; +} +.post-detail .post-title { + font-size: 40px; +} +.post-detail .post-date { + font-size: 18px; + padding: 24px 0; + color: #adb5bd; +} +.post-detail .post-content h1, +.post-detail .post-content h2, +.post-detail .post-content h3, +.post-detail .post-content h4, +.post-detail .post-content h5, +.post-detail .post-content h6 { + margin: 16px 0; + color: #343a40; +} +.post-detail .post-content a { + color: #4c6ef5; + border-bottom: 1px dotted #4c6ef5; + transition: all 0.3s; +} +.post-detail .post-content a:hover { + color: #3b5bdb; + border-bottom: 1px dotted #3b5bdb; +} +.post-detail .post-content img { + display: block; + box-shadow: 0 2px 5px rgba(0, 0, 25, 0.1), 0 5px 75px 1px rgba(0, 0, 50, 0.2); + max-width: 100%; + border-radius: 2px; + margin: 24px auto; +} +.post-detail .post-content p { + line-height: 1.725; + margin-bottom: 24px; + font-size: 18px; + color: #495057; +} +.post-detail .post-content p code, +.post-detail .post-content ul code, +.post-detail .post-content ol code { + padding: 0 3px; + margin: 0 2px; + background: #e9ecef; + font-size: 0.9em; + border-radius: 2px; + border: 1px solid #dee2e6; + display: inline-block; + line-height: 1.5; + color: #868e96; +} +.post-detail .post-content blockquote { + background: #e9ecef; + padding: 16px; + border-left: 3px solid #7048e8; + border-radius: 2px; + margin-bottom: 16px; +} +.post-detail .post-content blockquote p { + color: #868e96; + margin-bottom: 0; +} +.post-detail .post-content pre { + margin-bottom: 16px; +} +.post-detail .post-content pre code { + font-size: 14px; + font-family: 'Source Code Pro', Consolas, Menlo, Monaco, 'Courier New', monospace; + padding: 2em 1em 1em; + border-radius: 5px; + line-height: 1.375; + position: relative; + background: #343a40; + color: #f1f3f5; + display: block; +} +.post-detail .post-content pre code:after { + content: 'CODE'; + display: block; + position: absolute; + left: 8px; + top: 4px; + font-size: 14px; + font-weight: bold; + color: #495057; +} +.post-detail .post-content table { + border-collapse: collapse; + margin: 1rem 0; + display: block; + overflow-x: auto; +} +.post-detail .post-content tr { + border-top: 1px solid #dfe2e5; +} +.post-detail .post-content td, +.post-detail .post-content th { + border: 1px solid #dfe2e5; + padding: 0.6em 1em; +} +.post-detail .post-content ul, +.post-detail .post-content ol { + color: var(--c-base-blacklight); + padding-left: 24px; + line-height: 1.725; + margin-bottom: 16px; +} +.post-detail .post-content strong { + font-weight: bolder; +} +.post-detail .post-content em { + color: #868e96; +} +.post-detail .post-content hr { + height: 0; + border: 2px solid #efefef; + margin-bottom: 24px; +} +.tag { + display: inline-block; + font-size: 14px; + padding: 8px 16px; + border-radius: 16px; + background: #e9ecef; + color: #868e96; + margin: 16px 16px 16px 0; + transition: all 0.3s; +} +.tag:hover { + background: #dee2e6; + color: #495057; + transform: translateY(-3px); +} +.next-post { + border-top: 1px solid #ced4da; + border-bottom: 1px solid #ced4da; + padding: 24px 0; + margin: 32px 0; +} +.next-post .post-title { + font-size: 24px; +} +.next-post .next { + color: #ced4da; + margin-bottom: 16px; +} +.archives-title, +.tag-list-title, +.current-tag { + color: #495057; + padding-bottom: 48px; + font-size: 32px; +} +.archives-container { + padding-bottom: 32px; +} +.archives-container .year { + font-size: 16px; + padding-bottom: 16px; + border-bottom: 1px solid #ced4da; + margin: 16px 0; + color: #868e96; +} +.archives-container .post { + padding-bottom: 16px; +} +.archives-container .post .post-title { + font-size: 18px; + transition: all 0.3s; +} +.archives-container .post .post-title:hover { + color: #212529; +} +@media (max-width: 800px) { + .sidebar { + position: relative; + width: 100% !important; + height: 80px; + overflow: hidden; + transition: height 0.382s ease-in-out; + } + .sidebar.full-height { + height: 100vh; + } + .sidebar .sidebar-content { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + } + .sidebar .top-header-container { + display: flex; + justify-content: space-between; + margin-top: 16px; + } + .sidebar .top-header-container .menu-btn { + display: block; + position: relative; + width: 48px; + height: 48px; + } + .sidebar .top-header-container .menu-btn .line { + width: 32px; + height: 2px; + background: #e9ecef; + border-radius: 2px; + position: absolute; + right: 0; + top: 23px; + } + .sidebar .top-header-container .menu-btn:before, + .sidebar .top-header-container .menu-btn:after { + content: ''; + display: block; + width: 32px; + height: 2px; + background: #e9ecef; + border-radius: 2px; + position: absolute; + right: 0; + } + .sidebar .top-header-container .menu-btn:before { + top: 12px; + } + .sidebar .top-header-container .menu-btn:after { + bottom: 12px; + } + .sidebar .top-container { + text-align: left; + padding: 0 16px; + } + .sidebar .top-container .site-title-container { + display: flex; + align-items: center; + } + .sidebar .top-container .site-logo { + width: 48px; + height: 48px; + } + .sidebar .top-container .site-title { + display: inline; + padding: 0 8px; + font-size: 18px; + } + .main-container { + margin-left: 0 !important; + } + .content-container { + padding: 32px 16px; + } + .post-item { + flex-direction: column-reverse; + padding-bottom: 16px; + margin-bottom: 16x; + } + .post-item .right { + width: 100%; + margin-left: 0; + margin-bottom: 16px; + } + .post-item .left .post-date { + font-size: 16px; + padding: 16px 0; + } + .post-item .left .post-abstract { + font-size: 16px; + } + .pagination-container .prev:hover, + .pagination-container .next:hover { + transform: translateY(0px); + } + .post-detail .post-title { + font-size: 28px; + } + .post-detail .post-date { + font-size: 16px; + padding: 16px 0; + } + .post-detail .feature-container { + margin-bottom: 16px; + } + .post-detail .post-content p { + font-size: 16px; + } + .next-post { + margin: 24px 0; + padding: 16px 0; + } + .archives-title, + .tag-list-title, + .current-tag { + font-size: 28px; + padding-bottom: 32px; + } + .tag { + margin: 8px 8px 8px 0; + } + .tag:hover { + transform: translateY(0px); + } +} +.social-container .social-link { + color: #dee2e6; + font-size: 16px; + margin: 4px 8px; +} diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000..7b7171f --- /dev/null +++ b/tags/index.html @@ -0,0 +1,119 @@ + + + + + +标签列表 | 花似雪的博客 + + + + + + + + + + + + + + + + + +
+ + + + +
+
+

标签列表

+
+ +
+
+
+
+ + + + + + + + + + +