题面

MtOI2019 幽灵乐团

给定 \(p\),\(Cnt\) 组测试数据,每次给 \(a,b,c\),求

\[\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^c\left(\frac{{\rm lcm}(i,j)}{\gcd(i,k)}\right)^{f(t)}\bmod p
\]

\(t\in\{0,1,2\}\),\(f(0)=1,f(1)=ijk,f(2)=\gcd(i,j,k)\)。

数据范围:\(1\le a,b,c\le 10^5\),\(10^7\le p\le 105\cdot 10^7\),\(p\in\mathbb{P}\),\(1\le Cnt\le 70\)。


蒟蒻语

初学莫比乌斯反演是很久之前了,最近集训老师讲了莫比乌斯反演。

那天蒟蒻没去,神 \(\tt zhoukangyang\) 说:

老师抓了隔壁机房的 \(\texttt{x义x}\)(\(\tt orz\))来现场做「MtOI2019 幽灵乐团」,结果他上来就开了题解……

于是神 \(\tt zky\) 和神【数据删除】就干了这题一个晚上。第二天蒟蒻去推了一个下午,终于推出来了,推了一面,细节很多,但不难。最后蒟蒻比他们两个先做出来 \(\tt /yx\)。


蒟蒻解

\[\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^c\left(\frac{{\rm lcm}(i,j)}{\gcd(i,k)}\right)^{f(t)}
=\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^c\left(\frac{ij}{\gcd(i,j)\gcd(i,k)}\right)^{f(t)}
\]

所以只需算出:

\[\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^ci^{f(t)}
\]

\[\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^c\gcd(i,j)^{f(t)}
\]

即可,共 \(2\times 3=6\) 种式子。


t=0

\[\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^ci=(a!)^{bc}
\]

预处理 \(n!\) 时间复杂度 \(\Theta(n)\),计算 \(\Theta(\log n)\)。

\[\begin{split}
&\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^c\gcd(i,j)\\
=&\left(\prod_{d=1}^{\min(a,b)}d^{\sum\limits_{i=1}^a\sum\limits_{j=1}^b[\gcd(i,j)=d]}\right)^c\\
=&\left(\prod_{d=1}^{\min(a,b)}d^{\sum\limits_{k=1}^{\lfloor\frac{a}{d}\rfloor}\mu(k)\lfloor\frac{a}{dk}\rfloor\lfloor\frac{b}{dk}\rfloor}\right)^c\\
=&\left(\prod_{T=1}^{\min(a,b)}\left(\prod_{d|T}d^{\mu(\frac{T}{d})}\right)^{\lfloor\frac{a}{T}\rfloor\lfloor\frac{b}{T}\rfloor}\right)^c
\end{split}
\]

预处理 \(\prod_{d|T}d^{\mu(\frac{T}{d})}\) 前缀积时间复杂度 \(\Theta(n\log\log n)\),分块计算 \(\Theta(\sqrt{n}\log n)\)。


t=1

令 \(S(n)=\frac{n(n+1)}{2}\)。

\[\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^ci^{ijk}=\left(\prod_{i=1}^a i^i\right)^{S(b)S(c)}
\]

预处理 \(\prod_{i=1}^a i^i\) 时间复杂度 \(\Theta(n)\),计算 \(\Theta(\log n)\)。

\[\begin{split}
&\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^c \gcd(i,j)^{ij}\\
=&\left(\prod_{d=1}^{\min(a,b)}d^{\sum\limits_{i=1}^a\sum\limits_{j=1}^b[\gcd(i,j)=d]ij}\right)^{S(c)}\\
=&\left(\prod_{d=1}^{\min(a,b)}d^{d^2\sum\limits_{k=1}^{\lfloor\frac{\min(a,b)}{d}\rfloor}\mu(k)k^2S(\lfloor\frac{a}{dk}\rfloor)S(\lfloor\frac{b}{dk}\rfloor)}\right)^{S(c)}\\
=&\left(\prod_{T=1}^{\min(a,b)}\left(\prod_{d|T}d^{\mu(\frac{T}{d})}\right)^{T^2S(\lfloor\frac{a}{T})\rfloor S(\lfloor\frac{b}{T}\rfloor)}\right)^{S(c)}\\
\end{split}
\]

在 \(\prod_{d|T}d^{\mu(\frac{T}{d})}\) 的基础上预处理 \(\left(\prod_{d|T}d^{\mu(\frac{T}{d})}\right)^{T^2}\) 时间复杂度 \(\Theta(n\log n)\),分块计算 \(\Theta(\sqrt{n}\log n)\)。


t=2

\[\begin{split}
&\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^ci^{\gcd(i,j,k)}\\
=&\prod_{d=1}^{\min(a,b,c)}\prod_{i=1}^a i^{d\sum\limits_{j=1}^b\sum\limits_{k=1}^c[(i,j,k)=d]}\\
=&\prod_{d=1}^{\min(a,b,c)}\prod_{h=1}^{\lfloor\frac{\min(a,b,c)}{d}\rfloor}\left(\prod_{i=1}^{\lfloor\frac{a}{dh}\rfloor}(idh)^{d\mu(h)}\right)^{\lfloor\frac{a}{dh}\rfloor\lfloor\frac{b}{dh}\rfloor}\\
=&\prod_{T=1}^{\min(a,b,c)}\left(\lfloor\frac{a}{T}\rfloor!T^{\lfloor\frac{a}{T}\rfloor}\right)^{\varphi(T)\lfloor\frac{b}{T}\rfloor\lfloor\frac{c}{T}\rfloor}\\
=&\prod_{T=1}^{\min(a,b,c)}\left(\lfloor\frac{a}{T}\rfloor!\right)^{\varphi(T)\lfloor\frac{b}{T}\rfloor\lfloor\frac{c}{T}\rfloor}\times\prod_{T=1}^{\min(a,b,c)}\left(T^{\varphi(T)}\right)^{\lfloor\frac{a}{T}\rfloor\lfloor\frac{b}{T}\rfloor\lfloor\frac{c}{T}\rfloor}
\end{split}
\]

左边用已经预处理过的阶乘,右边预处理 \(T^{\varphi(T)}\) 前缀积时间复杂度 \(\Theta(n\log n)\),分块计算 \(\Theta(\sqrt{n}\log n)\)。

\[\begin{split}
&\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^c\gcd(i,j)^{\gcd(i,j,k)}\\
=&\prod_{d=1}^{\min(a,b,c)}\prod_{i=1}^a\prod_{j=1}^b\gcd(i,j)^{d\sum\limits_{k=1}^c[\gcd(i,j,k)=d]}\\
=&\prod_{d=1}^{\min(a,b,c)}\prod_{h=1}^{\lfloor\frac{\min(a,b,c)}{d}\rfloor}\prod_{i=1}^{\lfloor\frac{a}{dh}\rfloor}\prod_{j=1}^{\lfloor\frac{b}{dh}\rfloor}\left(\gcd(i,j)dh\right)^{d\mu(h)\lfloor\frac{c}{dh}\rfloor}\\
=&\prod_{T=1}^{\min(a,b,c)}T^{\sum_{d|T}d\mu(\frac{T}{d})\lfloor\frac{a}{T}\rfloor\lfloor\frac{b}{T}\rfloor\lfloor\frac{c}{T}\rfloor}\times \prod_{T=1}^{\min(a,b,c)}\left(\prod_{i=1}^{\lfloor\frac{a}{T}\rfloor}\prod_{j=1}^{\lfloor\frac{b}{T}\rfloor}\gcd(i,j)^{\sum_{d|T}d\mu(\frac{T}{d})}\right)^{\lfloor\frac{c}{T}\rfloor}\\
=&\prod_{T=1}^{\min(a,b,c)}T^{\varphi(T)\lfloor\frac{a}{T}\rfloor\lfloor\frac{b}{T}\rfloor\lfloor\frac{c}{T}\rfloor}\times \prod_{T=1}^{\min(a,b,c)}\left(\prod_{i=1}^{\lfloor\frac{a}{T}\rfloor}\prod_{j=1}^{\lfloor\frac{b}{T}\rfloor}\gcd(i,j)^{\varphi(T)}\right)^{\lfloor\frac{c}{T}\rfloor}\\
=&\prod_{T=1}^{\min(a,b,c)}T^{\varphi(T)\lfloor\frac{a}{T}\rfloor\lfloor\frac{b}{T}\rfloor\lfloor\frac{c}{T}\rfloor}\times \prod_{T=1}^{\min(a,b,c)}\left(\prod_{G=1}^{\lfloor\frac{\min(a,b,c)}{T}\rfloor}\left(\prod_{e|G}e^{\mu(\frac{G}{e})}\right)^{\lfloor\frac{a}{TG}\rfloor\lfloor\frac{b}{TG}\rfloor}\right)^{\lfloor\frac{c}{T}\rfloor\varphi(T)}\\
\end{split}
\]

有点跳步,但是有了这点拨并不难推,毕竟前人之述备矣,然则有些细节,确实该细讲。

\(T^{\varphi(T)}\) 和 \(\prod_{e|G}e^{\mu(\frac{G}{e})}\) 已经预处理过了,分块套分块 \(\Theta(n\log n)\)。


细节&优化

注意要模 \(p\),但是根据欧拉定理,指数要模 \(\varphi(p)=p-1\)。

看到一个式子怎么知道该筛什么?看看哪些东西不可以分块统一算。

怎么 \(\Theta(n\log \log n)\) 预处理 \(\prod_{d|T}d^{\mu(\frac{T}{d})}\)?

利用积性函数的性质,同时计算这东西和这东西的逆元(注意还没有求前缀积):

for(int i=1;i<=N;i++) f[i]=i,ivf[i]=in[i];
for(int j=0;j<cp;j++)for(int i=N/p[j];i>=1;i--)
f[i*p[j]]=(ll)f[i*p[j]]*ivf[i]%P,ivf[i*p[j]]=(ll)ivf[i*p[j]]*f[i]%P;

现在的时间复杂度是 \(\Theta(Tn\log n)\) 我卡过去了,但是是可以优化到 \(\Theta(n^{\frac{4}{3}}+Tn^{\frac{2}{3}}\log n)\)。

注意这个式子里面有什么:

\[\prod_{T=1}^{\min(a,b,c)}\left(\prod_{G=1}^{\lfloor\frac{\min(a,b,c)}{T}\rfloor}\left(\prod_{e|G}e^{\mu(\frac{G}{e})}\right)^{\lfloor\frac{a}{TG}\rfloor\lfloor\frac{b}{TG}\rfloor}\right)^{\lfloor\frac{c}{T}\rfloor\varphi(T)}
\]
\[\begin{split}
g(a,b)=&\prod_{T=1}^{\min(a,b)}\left(\prod_{d|T}d^{\mu(\frac{T}{d})}\right)^{\lfloor\frac{a}{T}\rfloor\lfloor\frac{b}{T}\rfloor}\\
=&\prod_{i=1}^a\prod_{j=1}^b \gcd(i,j)\\
\end{split}
\]

所以可以 \(\Theta(n^{\frac{4}{3}})\) 用类似辗转相除的方法预处理 \(a,b\le n^{\frac{2}{3}}\) 的 \(g(a,b)\) 以及前缀积,然后总时间复杂度就 \(\Theta(n^{\frac{4}{3}}+Tn^{\frac{2}{3}}\log n)\) 了。

for(int i=1;i<=K;i++){
for(int j=1;j<i;j++){
g[i][j]=g[max(j,i-j)][min(j,i-j)];
sg[i][j]=(ll)sg[i-1][j]*sg[i][j-1]%P*isg[i-1][j-1]%P*g[i][j]%P;
isg[i][j]=(ll)isg[i-1][j]*isg[i][j-1]%P*sg[i-1][j-1]%P*in[g[i][j]]%P;
}
g[i][i]=i;
sg[i][i]=(ll)sg[i][i-1]*sg[i][i-1]%P*isg[i-1][i-1]%P*i%P;
isg[i][i]=(ll)isg[i][i-1]*isg[i][i-1]%P*sg[i-1][i-1]%P*in[i]%P;
}

代码

#include <bits/stdc++.h>
using namespace std; //Start
typedef long long ll;
typedef double db;
#define mp(a,b) make_pair(a,b)
#define x first
#define y second
#define be(a) a.begin()
#define en(a) a.end()
#define sz(a) int((a).size())
#define pb(a) push_back(a)
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f; //Data
const int N=1e5;
int P,fac[N+1],faci[N+1],in[N+1];
int sum(int a){return (ll)a*(a+1)/2%(P-1);}
int Pow(int a,int x){
if(!a) return 0; int res=1;
for(;x;a=(ll)a*a%P,x>>=1)if(x&1) res=(ll)res*a%P;
return res;
} //Sieve
const int K=2500;
bool np[N+1];
int mu[N+1],phi[N+1],cp,p[N];
int f[N+1],ivf[N+1],fii[N+1],ifii[N+1],dp[N+1],idp[N+1];
int g[K+1][K+1],sg[K+1][K+1],isg[K+1][K+1];
void Sieve(){
np[1]=true,mu[1]=phi[1]=fii[0]=ifii[0]=dp[0]=idp[0]=f[0]=ivf[0]=in[1]=fac[0]=faci[0]=1;
for(int i=2;i<=N;i++) in[i]=(ll)(P-P/i)*in[P%i]%P;
for(int i=1;i<=N;i++) fac[i]=(ll)fac[i-1]*i%P,faci[i]=(ll)faci[i-1]*Pow(i,i)%P;
for(int i=2;i<=N;i++){
if(!np[i]) mu[i]=-1,phi[i]=i-1,p[cp++]=i;
for(int j=0;j<cp&&i*p[j]<=N;j++){
np[i*p[j]]=1;
if(i%p[j]==0){mu[i*p[j]]=0,phi[i*p[j]]=phi[i]*p[j];break;}
mu[i*p[j]]=mu[i]*mu[p[j]],phi[i*p[j]]=phi[i]*phi[p[j]];
}
}
for(int i=1;i<=N;i++) f[i]=i,ivf[i]=in[i];
for(int j=0;j<cp;j++)for(int i=N/p[j];i>=1;i--)
f[i*p[j]]=(ll)f[i*p[j]]*ivf[i]%P,ivf[i*p[j]]=(ll)ivf[i*p[j]]*f[i]%P;
for(int i=1;i<=N;i++){
fii[i]=Pow(f[i],(ll)i*i%(P-1)),ifii[i]=Pow(ivf[i],(ll)i*i%(P-1));
dp[i]=Pow(i,phi[i]%(P-1)),idp[i]=Pow(in[i],phi[i]%(P-1));
}
for(int i=2;i<=N;i++){
f[i]=(ll)f[i]*f[i-1]%P,ivf[i]=(ll)ivf[i]*ivf[i-1]%P;
fii[i]=(ll)fii[i]*fii[i-1]%P,ifii[i]=(ll)ifii[i]*ifii[i-1]%P;
dp[i]=(ll)dp[i]*dp[i-1]%P,idp[i]=(ll)idp[i]*idp[i-1]%P;
(phi[i]+=phi[i-1])%=(P-1);
}
for(int i=0;i<=K;i++) g[i][0]=g[0][i]=i,sg[i][0]=sg[0][i]=isg[i][0]=isg[0][i]=1;
for(int i=1;i<=K;i++){
for(int j=1;j<i;j++){
g[i][j]=g[max(j,i-j)][min(j,i-j)];
sg[i][j]=(ll)sg[i-1][j]*sg[i][j-1]%P*isg[i-1][j-1]%P*g[i][j]%P;
isg[i][j]=(ll)isg[i-1][j]*isg[i][j-1]%P*sg[i-1][j-1]%P*in[g[i][j]]%P;
}
g[i][i]=i;
sg[i][i]=(ll)sg[i][i-1]*sg[i][i-1]%P*isg[i-1][i-1]%P*i%P;
isg[i][i]=(ll)isg[i][i-1]*isg[i][i-1]%P*sg[i-1][i-1]%P*in[i]%P;
}
} //Mobius
int ProdGcd(int a,int b){
int res=1;
if(a<=K&&b<=K) res=sg[max(a,b)][min(a,b)];
else {
for(int d=1,r;d<=min(a,b);d=r+1){
r=min(a/(a/d),b/(b/d));
res=(ll)res*Pow((ll)f[r]*ivf[d-1]%P,(ll)(a/d)*(b/d)%(P-1))%P;
}
}
// cout<<"ProdGcd("<<a<<','<<b<<"):"<<res<<'\n';
return res;
}
int Geti0(int a,int b,int c){
int res=Pow(fac[a],(ll)b*c%(P-1));
// cout<<"Geti0("<<a<<','<<b<<','<<c<<"):"<<res<<'\n';
return res;
}
int Getg0(int a,int b,int c){
int res=1;
for(int d=1,r;d<=min(a,b);d=r+1){
r=min(a/(a/d),b/(b/d));
res=(ll)res*Pow((ll)f[r]*ivf[d-1]%P,(ll)(a/d)*(b/d)%(P-1))%P;
}
res=Pow(res,c%(P-1));
// cout<<"Getg0("<<a<<','<<b<<','<<c<<"):"<<res<<'\n';
return res;
}
int Geti1(int a,int b,int c){
int res=Pow(faci[a],(ll)sum(b)*sum(c)%(P-1));
// cout<<"Geti1("<<a<<','<<b<<','<<c<<"):"<<res<<'\n';
return res;
}
int Getg1(int a,int b,int c){
int res=1;
for(int d=1,r;d<=min(a,b);d=r+1){
r=min(a/(a/d),b/(b/d));
res=(ll)res*Pow((ll)fii[r]*ifii[d-1]%P,(ll)sum(a/d)*sum(b/d)%(P-1))%P;
}
res=Pow(res,sum(c)%(P-1));
// cout<<"Getg1("<<a<<','<<b<<','<<c<<"):"<<res<<'\n';
return res;
}
int Geti2(int a,int b,int c){
int res=1;
for(int d=1,r;d<=min(a,min(b,c));d=r+1){
r=min(a/(a/d),min(b/(b/d),c/(c/d)));
res=(ll)res*Pow(fac[a/d],(ll)(b/d)*(c/d)%(P-1)*(phi[r]-phi[d-1]+P-1)%(P-1))%P;
res=(ll)res*Pow((ll)dp[r]*idp[d-1]%P,(ll)(a/d)*(b/d)%(P-1)*(c/d)%(P-1))%P;
}
// cout<<"Geti2("<<a<<','<<b<<','<<c<<"):"<<res<<'\n';
return res;
}
int Getg2(int a,int b,int c){
int res=1;
for(int d=1,r;d<=min(a,min(b,c));d=r+1){
r=min(a/(a/d),min(b/(b/d),c/(c/d)));
res=(ll)res*Pow(ProdGcd(a/d,b/d),(ll)(c/d)*(phi[r]-phi[d-1]+P-1)%(P-1))%P;
res=(ll)res*Pow((ll)dp[r]*idp[d-1]%P,(ll)(a/d)*(b/d)%(P-1)*(c/d)%(P-1))%P;
}
// cout<<"Getg2("<<a<<','<<b<<','<<c<<"):"<<res<<'\n';
return res;
} //Main
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int cacnt; cin>>cacnt>>P;
// clock_t start=clock();
Sieve();// cout<<f[2]<<'\n';
while(cacnt--){
int a,b,c,ans0,ans1,ans2;
cin>>a>>b>>c;
ans0=(ll)Geti0(a,b,c)*Geti0(b,a,c)%P*Pow(Getg0(a,b,c),P-2)%P*Pow(Getg0(a,c,b),P-2)%P;
ans1=(ll)Geti1(a,b,c)*Geti1(b,a,c)%P*Pow(Getg1(a,b,c),P-2)%P*Pow(Getg1(a,c,b),P-2)%P;
ans2=(ll)Geti2(a,b,c)*Geti2(b,a,c)%P*Pow(Getg2(a,b,c),P-2)%P*Pow(Getg2(a,c,b),P-2)%P;
cout<<ans0<<' '<<ans1<<' '<<ans2<<'\n';
}
// clock_t end=clock();
// cout<<db(end-start)/CLOCKS_PER_SEC<<'\n';
return 0;
}

祝大家学习愉快!

题解-MtOI2019 幽灵乐团的更多相关文章

  1. [SDOI2017]数字表格 & [MtOI2019]幽灵乐团

    P3704 [SDOI2017]数字表格 首先根据题意写出答案的表达式 \[\large\prod_{i=1}^n\prod_{j=1}^mf_{\gcd(i,j)} \] 按常规套路改为枚举 \(d ...

  2. P5518 [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题

    瞎扯 建议在阅读题解之前欣赏这首由普莉兹姆利巴姐妹带来的的合奏. Q:你参加省选吗?不是说好了考完 NOIP 就退吗. A:对啊. Q:那你学这玩意干啥? A:对啊,我学这玩意干啥? 写这题的动机? ...

  3. [MtOI2019]幽灵乐团

    题目 一个很暴力的辣鸡做法 考虑到两个数的\(\gcd\)是所有质数次幂取\(\min\),两个数的\(\rm lcm\)是所有质数次幂取\(\max\),于是最后的答案一定是\(\prod p_i^ ...

  4. 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)

    洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...

  5. 「THP3考前信心赛」题解

    目录 写在前面 A 未来宇宙 B 空海澄澈 C 旧约酒馆 算法一 算法二 D 博物之志 算法一 算法二 算法三 写在前面 比赛地址:THP3 考前信心赛. 感谢原出题人的贡献:第一题 CF1422C, ...

  6. 莫比乌斯反演&各种筛法

    不学莫反,不学狄卷,就不能叫学过数论 事实上大概也不是没学过吧,其实上赛季头一个月我就在学这东西,然鹅当时感觉没学透,连杜教筛复杂度都不会证明,所以现在只好重新来学一遍了(/wq 真·实现了水平的负增 ...

  7. [MtOI2019]永夜的报应 题解

    题面 题面说的乱糟糟的看起来似乎是个可持久化线性基: 然而~ 一个式子搞定一切: a^b<=a+b 那么把所有数异或起来便是答案: #include <bits/stdc++.h> ...

  8. 题解 P5613 【[MtOI2019]黑蚊子多】

    题目传送门 一道模拟题目,签到送分题. 您需要的知识 1.while循环 2.for循环 3.一维数组 思路: Step 1:按题目要求,定义a[],n,m,k int a[10001]; int n ...

  9. 【LGR-063】洛谷11月月赛 I & MtOI2019 Ex Div.2

    [MtOI2019]黑蚊子多: 送分向水题,直接模拟即可. #include<iostream> #include<cstdio> #define N 1505 using n ...

随机推荐

  1. leetcode bitmap系列问题整理

    1. 题目: 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量). 示例 : 输入: 11输出: 3解释: 整数 11 的二进制表示为 000000 ...

  2. minishell的实现

    直接上各个模块的代码,注释都在文档代码中,非常详细,加上最后的Makefile文件完全可以自行运行看懂: main函数一个文件main.c 1 /* 2 minishell实现的功能:简单命令解析.管 ...

  3. 你真的能分清putc()函数和fputc()函数吗?

    最近小编在讲关于C语言文件部分内容,讲到了fputc()函数.前面在讲字符串的时候,我们还学习过putc()函数,我们知道,putc()函数一般用于标准输出,fputc()函数一般用于文件读写.刚才呢 ...

  4. 我要进大厂之大数据Hadoop HDFS知识点(1)

    01 我们一起学大数据 老刘今天开始了大数据Hadoop知识点的复习,Hadoop包含三个模块,这次先分享出Hadoop中的HDFS模块的基础知识点,也算是对今天复习的内容进行一次总结,希望能够给想学 ...

  5. webug第十二关:我系统密码忘记了!

    第十二关:我系统密码忘记了! 文件上传 直接上传php一句话, 菜刀链接

  6. gcc和g++理解

    环境使用的编译器版本是是gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) 编译使用了c++11标准的程序时不能通过. 先放解决方法:g++ -std=c++11 ...

  7. 重新认识C++的"cin >>"、"cout <<" 简简单单 - 快快乐乐

    重新认识C++的"cin >>"."cout <<" 简简单单 - 快快乐乐 JERRY_Z. ~ 2020 / 11 / 24 转载请 ...

  8. CorelDRAW常用工具之橡皮擦工具

    很多作图以及设计软件都会自带橡皮擦工具,但对于专业做平面设计的小伙伴来说,普通的橡皮工具肯定是无法满足日常作图需求的,今天来看看CorelDRAW的橡皮擦能玩出什么花样来. 1.擦除对象 CorelD ...

  9. 在FL Studio中如何更好地为人声加上混响(进阶教程)

    为人声加上混响是我们在处理人声过程中必不可少的一步.然而,除了直接在人声混音轨道加上混响插件进行调节以外,这里还有更为细节的做法可以达到更好的效果. 步骤一:使用均衡器 在为人声加上混响之前,我们应该 ...

  10. Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal 题解(思维+逆序对)

    题目链接 题目大意 给你一个长度为n的字符串,可以交换相邻两个元素,使得这个字符串翻转,求最少多少种次数改变 题目思路 如果要求数组排序所需要的冒泡次数,那其实就是逆序对 这个也差不多,但是如果是相同 ...