2022.02.21 SA

当我年少轻狂时,我曾拥有自由,但我并不明白它的意义。我曾拥有时间,但我没有意识到它的珍贵。我曾拥有爱,但我从未用心去体会。数十年的时间考验后,我终于理解了三者的真谛。 我已风烛残年,这种理解已经逐渐变成一种满足。爱,自由和时间,曾一度被我挥霍,而今成为了我前进的动力。而我将最特别的爱,献给最亲爱的你和我们的孩子们,以及刺客联盟的兄弟姐妹们,并献给赋予我们生命的那壮美奇妙,让人产生无限遐想的世界。此爱永恒,Mia Sofia。永远都属于你的--艾吉奥·奥迪托雷。——刺客信条:余烬

P6095 [JSOI2015]串分割

100pts

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std; #define Ri register
const int N=4e5+10;
int n,m,tot,len;
int r[N],sa[N],ranki[N],height[N],wa[N],wb[N],wv[N],wt[N];
char s[N]; inline int cmp(int *y,int a,int b,int k){
return y[a]==y[b]&&(a+k>=n?-1:y[a+k])==(b+k>=n?-1:y[b+k]);
/*if(y[a]!=y[b])return 0;
if((a+k<n)^(b+k<n))return 0;
if(a+k<n&&b+k<n)return y[a+k]==y[b+k];*/
return 0;
}
inline void SA(int *r,int *sa,int n,int m){
int p=1,*x=wa,*y=wb,*t;
m=400;
for(Ri int i=0;i<m;i++)wt[i]=0;
for(Ri int i=0;i<n;i++)++wt[x[i]=r[i]];
for(Ri int i=1;i<m;i++)wt[i]+=wt[i-1];
for(Ri int i=n-1;i>=0;i--)sa[--wt[x[i]]]=i;
for(Ri int j=1;j<n;j<<=1){
p=0;
for(Ri int i=n-j;i<n;i++)y[p++]=i;
for(Ri int i=0;i<n;i++)if(sa[i]>=j)y[p++]=sa[i]-j;
//cout<<"y "<<endl;
//for(Ri int i=0;i<p;i++)cout<<y[i]<<" ";cout<<endl;
for(Ri int i=0;i<m;i++)wt[i]=0;
for(Ri int i=0;i<n;i++)wv[i]=x[y[i]];
for(Ri int i=0;i<n;i++)++wt[wv[i]];
for(Ri int i=1;i<m;i++)wt[i]+=wt[i-1];
/*cout<<"wv "<<endl;
for(Ri int i=0;i<n;i++)cout<<wv[i]<<" ";cout<<endl;
cout<<"wt "<<endl;
for(Ri int i=0;i<n;i++)cout<<wt[i]<<" ";cout<<endl;*/
for(Ri int i=n-1;i>=0;i--)sa[--wt[wv[i]]]=y[i];
p=0;
t=x;x=y;y=t;
x[sa[0]]=0;
for(Ri int i=1;i<n;i++)
x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p:++p;
/*cout<<"sa "<<endl;
for(Ri int i=0;i<n;i++)cout<<sa[i]<<" ";cout<<endl;
cout<<"ranki "<<endl;
for(Ri int i=0;i<n;i++)cout<<x[i]<<" ";cout<<endl;*/
m=p+1;
if(p>n-2)break;
}
for(Ri int i=0;i<n;i++)ranki[sa[i]]=i;
/*cout<<"sa "<<endl;
for(Ri int i=0;i<n;i++)cout<<sa[i]<<" ";cout<<endl;
cout<<"ranki "<<endl;
for(Ri int i=0;i<n;i++)cout<<ranki[i]<<" ";cout<<endl;*/
}
inline bool check(int id){
for(Ri int i=0;i<len;i++){
int now=i;
for(Ri int j=0;j<tot;j++){
now+=len-(ranki[now]>id);
if(now-i>=n)return true;
}
}
return false;
} signed main(){
cin>>n>>tot;scanf("%s",s);
len=n/tot+(n%tot!=0);
for(Ri int i=0;i<n;i++)s[i+n]=s[i];
n<<=1;
for(Ri int i=0;i<n;i++)r[i]=s[i];//,cout<<s[i];cout<<endl;
SA(r,sa,n,m);
int L=0,R=n-1,mid;
n>>=1;
while(L<R){
mid=(L+R)>>1;
//cout<<"L "<<L<<" R "<<R<<" mid "<<mid<<endl;
if(check(mid))R=mid;
else L=mid+1;
}
//cout<<R<<endl;
for(Ri int i=0;i<(n<<1);i++)if(ranki[i]==R)
for(Ri int j=0;j<len;j++)cout<<s[j+i];
return 0;
}
/*
4 2
4321
ans 32
*/

P3181 [HAOI2016]找相同字符(万事皆允:eleveni修订版SA4.0)

https://www.luogu.com.cn/problem/P3181

\(O(n^2)\) 复杂度、40pts

新版思路:比较不能用-1,那就全部向右平移,只要把m开得够大就行。

#include<bits/stdc++.h>
using namespace std; #define Ri register
const int N=4e5+10;
const int inf=0x3f3f3f3f;
int n,m,r[N],sa[N],ranki[N],height[N],wa[N],wb[N],wv[N],wt[N];
int f[N][20],lens,lent,logi[N];
char s[N],t[N]; inline int cmp(int *r,int a,int b,int k){
return r[a]==r[b]&&(a+k<n?r[a+k]:-1)==(b+k<n?r[b+k]:-1);
//return r[a]==r[b]&&r[a+k]==r[b+k];
}
inline void SA(int *r,int *sa,int n,int m){
int *x=wa,*y=wb,*t;
int p=1;
m=400;
for(Ri int i=0;i<m;i++)wt[i]=0;
for(Ri int i=0;i<n;i++)++wt[x[i]=r[i]];
for(Ri int i=1;i<m;i++)wt[i]+=wt[i-1];
for(Ri int i=n-1;i>=0;i--)sa[--wt[x[i]]]=i;
for(Ri int j=1;j<n;j<<=1,m=p){
p=0;
for(Ri int i=n-j;i<n;i++)y[p++]=i;
for(Ri int i=0;i<n;i++)if(sa[i]>=j)y[p++]=sa[i]-j;
for(Ri int i=0;i<m;i++)wt[i]=0;
for(Ri int i=0;i<n;i++)wv[i]=x[y[i]];
for(Ri int i=0;i<n;i++)++wt[wv[i]];
for(Ri int i=1;i<m;i++)wt[i]+=wt[i-1];
for(Ri int i=n-1;i>=0;i--)sa[--wt[wv[i]]]=y[i];
p=1;t=x;x=y;y=t;x[sa[0]]=0;
for(Ri int i=1;i<n;i++)
x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++;
m=p;
if(p>=n)break;
}
/*cout<<"sa "<<endl;
for(Ri int i=0;i<n;i++)cout<<sa[i]<<" ";cout<<endl;*/
}
inline void calc(int *r,int *sa,int n){
int k=0,j;
for(Ri int i=0;i<n;i++)ranki[sa[i]]=i;
height[0]=0;
for(Ri int i=0;i<n;i++){
if(ranki[i]==0)continue;
if(k)--k;
j=sa[ranki[i]-1];
while(i+k<n&&j+k<n&&r[i+k]==r[j+k])++k;
height[ranki[i]]=k;
}
/*cout<<"ranki "<<endl;
for(Ri int i=0;i<n;i++)cout<<ranki[i]<<" ";cout<<endl;
cout<<"height "<<endl;
for(Ri int i=0;i<n;i++)cout<<height[i]<<" ";cout<<endl;*/
}
inline int query(int l,int r){
if(l>r)swap(l,r);++l;
int k=logi[r-l+1];
return min(f[l][k],f[r-(1<<k)+1][k]);
} signed main(){
memset(f,inf,sizeof(f));
scanf("%s%s",s,t);
lens=strlen(s);lent=strlen(t);
for(Ri int i=0;i<lens;i++)r[i]=s[i]+5;
r[lens]=4;
for(Ri int i=0;i<lent;i++)r[i+lens+1]=t[i]+5;
n=lens+lent+1;
r[n++]=0;
/*cout<<"r "<<endl;
for(Ri int i=0;i<n;i++)cout<<r[i]<<" ";cout<<endl;*/
SA(r,sa,n,m);calc(r,sa,n);
logi[0]=logi[1]=0;logi[2]=1;
for(Ri int i=3;i<=n;i++)logi[i]=logi[i/2]+1;
/*cout<<"logi "<<endl;
for(Ri int i=0;i<n;i++)cout<<logi[i]<<" ";cout<<endl;*/
for(Ri int i=1;i<n;i++)f[i][0]=height[i];
/*cout<<"before r "<<endl;
for(Ri int i=0;i<n;i++)cout<<(char)r[i];cout<<endl;
//--n;
cout<<"after r "<<endl;
for(Ri int i=0;i<n;i++)cout<<(char)r[i];cout<<endl;*/
for(Ri int i=1;i<=18;i++)
for(Ri int j=1;j+(1<<i)-1<n;j++)
f[j][i]=min(f[j][i-1],f[j+(1<<(i-1))][i-1]);
/*cout<<"f "<<endl;
for(Ri int i=1;i<n;i++){
for(Ri int j=0;j<=10;j++)cout<<f[i][j]<<" ";
cout<<endl;
}*/
int ans=0;
for(Ri int i=0;i<lens;i++){
for(Ri int j=lens+1;j<n;j++){
int lcp=query(ranki[i],ranki[j]);
//cout<<"L "<<ranki[i]<<" R "<<ranki[j]<<" lcp "<<lcp<<endl;
ans+=lcp;
}
}
cout<<ans;
return 0;
}

\(O(nlogn)\) 复杂度、别人的好看的代码、100pts

我的代码丑得难以直视……心塞……

来自

https://www.luogu.com.cn/blog/boshi/solution-p3181

#include <iostream>
#include <cstring>
#include <cstdio>
#define MX 823123 using namespace std;
typedef long long ll;
typedef struct tSA
{
int str[MX],n,m;
int rank[MX],SA[MX],het[MX];
int buk[MX],yp[MX];
bool cmp(int *f,int x,int y,int w){return f[x]==f[y]&&f[x+w]==f[y+w];}
void jsort()
{
for(int i=0;i<=m;i++)buk[i]=0;
for(int i=1;i<=n;i++)buk[rank[yp[i]]]++;
for(int i=1;i<=m;i++)buk[i]+=buk[i-1];
for(int i=n;i>=1;i--)SA[buk[rank[yp[i]]]--]=yp[i];
}
void getSA()
{
for(int i=1;i<=n;i++)rank[i]=str[i],yp[i]=i;
m=28;jsort();
for(int w=1;w<n;w<<=1)
{
int p=0;
for(int i=n-w+1;i<=n;i++)yp[++p]=i;
for(int i=1;i<=n;i++)if(SA[i]>w)yp[++p]=SA[i]-w;
jsort(),swap(rank,yp),rank[SA[1]]=p=1;
for(int i=2;i<=n;i++)rank[SA[i]]=(cmp(yp,SA[i],SA[i-1],w)?p:++p);
m=p;
}
int k=0;
for(int i=1;i<=n;i++)
{
k=(k?k-1:0);
while(str[i+k]==str[SA[rank[i]-1]+k])k++;
het[rank[i]]=k;
}
}
}SA;
SA sa;
char str[MX];
int l1,l2,top,sum[MX];
pair<int,ll>stk[MX];
void work()
{
ll ans=0;
stk[0]=make_pair(1,0);
for(int i=1;i<=sa.n;i++)sum[i]=sum[i-1]+(sa.SA[i]<=l1);
for(int i=1;i<=sa.n;i++)
{
while(top&&sa.het[stk[top].first]>sa.het[i])top--;
top++;
stk[top]=make_pair(i,(sum[i-1]-sum[stk[top-1].first-1])*sa.het[i]+stk[top-1].second);
if(sa.SA[i]>l1+1)ans+=stk[top].second;
}
top=0;
for(int i=1;i<=sa.n;i++)sum[i]=sum[i-1]+(sa.SA[i]>l1+1);
for(int i=1;i<=sa.n;i++)
{
while(top&&sa.het[stk[top].first]>sa.het[i])top--;
top++;
stk[top]=make_pair(i,(sum[i-1]-sum[stk[top-1].first-1])*sa.het[i]+stk[top-1].second);
if(sa.SA[i]<=l1)ans+=stk[top].second;
}
printf("%lld\n",ans);
}
int main()
{
scanf("%s",str+1);l1=strlen(str+1);
scanf("%s",str+l1+2);
str[l1+1]='z'+1;
sa.n=strlen(str+1);
for(int i=1;i<=sa.n;i++)sa.str[i]=str[i]-'a'+1;
sa.getSA();
work();
return 0;
}

P5546 [POI2000]公共串(出ub【未定义行为】了)

https://www.luogu.com.cn/problem/P5546

28pts

这次ub是因为没有把数组初始化。

#include<bits/stdc++.h>
using namespace std; #define int long long
#define Ri register
const int N=1e5+100;
int T,n,m,r[N],sa[N],ranki[N],height[N],wa[N],wb[N],wv[N],wt[N];
int color[N];
char s[N]; inline int cmp(int *r,int a,int b,int k){
return r[a]==r[b]&&(a+k<n?r[a+k]:-1)==(b+k<n?r[b+k]:-1);
//return r[a]==r[b]&&r[a+k]==r[b+k];
}
inline void SA(int *r,int *sa,int n,int m){
int *x=wa,*y=wb,*t;
int p=1;
m=400;
for(Ri int i=0;i<m;i++)wt[i]=0;
for(Ri int i=0;i<n;i++)++wt[x[i]=r[i]];
for(Ri int i=1;i<m;i++)wt[i]+=wt[i-1];
for(Ri int i=n-1;i>=0;i--)sa[--wt[x[i]]]=i;
for(Ri int j=1;j<n;j<<=1,m=p){
p=0;
for(Ri int i=n-j;i<n;i++)y[p++]=i;
for(Ri int i=0;i<n;i++)if(sa[i]>=j)y[p++]=sa[i]-j;
for(Ri int i=0;i<m;i++)wt[i]=0;
for(Ri int i=0;i<n;i++)wv[i]=x[y[i]];
for(Ri int i=0;i<n;i++)++wt[wv[i]];
for(Ri int i=1;i<m;i++)wt[i]+=wt[i-1];
for(Ri int i=n-1;i>=0;i--)sa[--wt[wv[i]]]=y[i];
p=1;t=x;x=y;y=t;x[sa[0]]=0;
for(Ri int i=1;i<n;i++)
x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++;
m=p;
if(p>=n)break;
}
/*cout<<"sa "<<endl;
for(Ri int i=0;i<n;i++)cout<<sa[i]<<" ";cout<<endl;*/
}
inline void calc(int *r,int *sa,int n){
int k=0,j;
for(Ri int i=0;i<n;i++)ranki[sa[i]]=i;
height[0]=0;
for(Ri int i=0;i<n;i++){
if(ranki[i]==0)continue;
if(k)--k;
j=sa[ranki[i]-1];
while(i+k<n&&j+k<n&&r[i+k]==r[j+k])++k;
height[ranki[i]]=k;
}
/*cout<<"ranki "<<endl;
for(Ri int i=0;i<n;i++)cout<<ranki[i]<<" ";cout<<endl;
cout<<"height "<<endl;
for(Ri int i=0;i<n;i++)cout<<height[i]<<" ";cout<<endl;*/
}
inline bool check(int minn){
int vis[110];
memset(vis,0,sizeof(vis));
for(Ri int i=2;i<n;i++){
if(height[i]<minn){
int flag=0;
for(Ri int j=1;j<=T;j++)flag+=vis[j];
if(flag==T)return true;
memset(vis,0,sizeof(vis));
}else{
if(height[i-1]<minn)vis[color[i-1]]=1;
vis[color[i]]=1;
}
}
return false;
} signed main(){
cin>>T;
int maxn=0;
for(Ri int i=1;i<=T;i++){
scanf("%s",s+n);
for(Ri int j=n;j<(int)strlen(s);j++)color[j]=i;
maxn=max(maxn,(int)strlen(s)-n);
n=strlen(s);
}
//for(Ri int i=0;i<n;i++)cout<<s[i];cout<<endl;
//for(Ri int i=0;i<n;i++)cout<<color[i]<<" ";cout<<endl;
n=0;
for(Ri int i=0;i<(int)strlen(s);i++){
r[n++]=s[i]+5;
if(color[i]+1==color[i+1])r[n++]=4;
}
r[n++]=0;
//for(Ri int i=0;i<n;i++)cout<<i<<" "<<(char)r[i]<<endl;
memset(color,0,sizeof(color));
SA(r,sa,n,m);calc(r,sa,n);
for(Ri int i=0,j=1;i<n-1;i++){
if(r[i]==4)++j;
color[ranki[i]]=j;
}
/*cout<<"color "<<endl;
for(Ri int i=0;i<=n;i++)cout<<color[i]<<" ";cout<<endl;
cout<<check(1)<<" "<<check(2)<<" "<<check(3)<<endl;*/
int L=0,R=maxn+1,mid=0,ans=0;
while(L<R){
mid=(L+R)/2;
//cout<<"L "<<L<<" R "<<R<<" mid "<<mid<<endl;
if(check(mid))L=mid,ans=mid;
else R=mid-1;
//cout<<mid<<endl;
}
cout<<ans;
return 0;
}
/*
3
abcb
bca
acbc
*/

100pts

#include<bits/stdc++.h>
using namespace std; #define int long long
#define Ri register
const int N=1e5+100;
int T,n,m,r[N],sa[N],ranki[N],height[N],wa[N],wb[N],wv[N],wt[N];
int color[N];
char s[N],t[10][2010];
char temp[10] = {'!', '@', '#', '$', 0}; inline int cmp(int *r,int a,int b,int k){
return r[a]==r[b]&&(a+k<n?r[a+k]:-1)==(b+k<n?r[b+k]:-1);
//return r[a]==r[b]&&r[a+k]==r[b+k];
}
inline void SA(int *r,int *sa,int n,int m){
int *x=wa,*y=wb,*t;
int p=1;
m=400;
for(Ri int i=0;i<m;i++)wt[i]=0;
for(Ri int i=0;i<n;i++)++wt[x[i]=r[i]];
for(Ri int i=1;i<m;i++)wt[i]+=wt[i-1];
for(Ri int i=n-1;i>=0;i--)sa[--wt[x[i]]]=i;
for(Ri int j=1;j<n;j<<=1,m=p){
p=0;
for(Ri int i=n-j;i<n;i++)y[p++]=i;
for(Ri int i=0;i<n;i++)if(sa[i]>=j)y[p++]=sa[i]-j;
for(Ri int i=0;i<m;i++)wt[i]=0;
for(Ri int i=0;i<n;i++)wv[i]=x[y[i]];
for(Ri int i=0;i<n;i++)++wt[wv[i]];
for(Ri int i=1;i<m;i++)wt[i]+=wt[i-1];
for(Ri int i=n-1;i>=0;i--)sa[--wt[wv[i]]]=y[i];
p=1;t=x;x=y;y=t;x[sa[0]]=0;
for(Ri int i=1;i<n;i++)
x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++;
m=p;
if(p>=n)break;
}
/*cout<<"sa "<<endl;
for(Ri int i=0;i<n;i++)cout<<sa[i]<<" ";cout<<endl;*/
}
inline void calc(int *r,int *sa,int n){
int k=0,j;
for(Ri int i=0;i<n;i++)ranki[sa[i]]=i;
height[0]=0;
for(Ri int i=0;i<n;i++){
if(ranki[i]==0)continue;
if(k)--k;
j=sa[ranki[i]-1];
while(i+k<n&&j+k<n&&r[i+k]==r[j+k])++k;
height[ranki[i]]=k;
}
/*cout<<"ranki "<<endl;
for(Ri int i=0;i<n;i++)cout<<ranki[i]<<" ";cout<<endl;
cout<<"height "<<endl;
for(Ri int i=0;i<n;i++)cout<<height[i]<<" ";cout<<endl;*/
}/*
inline bool check(int minn){
int vis[110];
memset(vis,0,sizeof(vis));
for(Ri int i=2;i<n;i++){
if(height[i]<minn){
int flag=0;
for(Ri int j=1;j<=T;j++)flag+=vis[j];
if(flag==T)return true;
memset(vis,0,sizeof(vis));
}else{
if(height[i-1]<minn)vis[color[i-1]]=1;
vis[color[i]]=1;
}
}
return false;
}*/
inline bool check(int mid){
int vis[10];
memset(vis,0,sizeof(vis));
for(Ri int i=2;i<n;i++){
if(height[i]>=mid)vis[color[sa[i]]]=1;
else{
int flag=0;
for(Ri int j=1;j<=T;j++){
if(!vis[j])flag=1;
vis[j]=0;
}
if(!flag)return true;
vis[color[sa[i]]]=1;
}
}
int flag=0;
for(Ri int i=1;i<=T;i++){
if(!vis[i])flag=1;
vis[i]=0;
}
if(!flag)return true;
else return false;
} signed main(){
cin>>T;
int maxn=0;
n=0;
for(Ri int i=1;i<=T;i++){
scanf("%s",t[i]);
maxn=max(maxn,(int)strlen(t[i]));
for(Ri int j=0;j<(int)strlen(t[i]);j++)color[n]=i,s[n++]=t[i][j];
if(i!=T)s[n++]=i;
}
//for(Ri int i=0;i<n;i++)cout<<s[i];cout<<endl;
//for(Ri int i=0;i<n;i++)cout<<color[i]<<" ";cout<<endl;
/*n=0;
for(Ri int i=0,j=0;i<(int)strlen(s);i++){
r[n++]=s[i]+5;
if(color[i]+1==color[i+1])r[n++]=temp[j++];
}*/
r[n++]=0;
for(Ri int i=0;i<n;i++)r[i]=s[i];//,cout<<(char)r[i];cout<<endl;
//for(Ri int i=0;i<n;i++)cout<<i<<" "<<(char)r[i]<<endl;
//memset(color,0,sizeof(color));
SA(r,sa,n,m);calc(r,sa,n);
/*for(Ri int i=0,j=1;i<n-1;i++){
if(r[i]==(int)temp[j-1])++j;
color[ranki[i]]=j;
}
cout<<"color "<<endl;
for(Ri int i=0;i<=n;i++)cout<<color[i]<<" ";cout<<endl;*/
//cout<<check(1)<<" "<<check(2)<<" "<<check(3)<<endl;
int L=0,R=n,mid=0,ans=0;
while(L+1<R){
mid=(L+R)/2;
//cout<<"L "<<L<<" R "<<R<<" mid "<<mid<<endl;
if(check(mid))L=mid;
else R=mid;
//cout<<mid<<endl;
}
if(check(R))ans=R;
else ans=L;
cout<<ans;
return 0;
}
/*
3
abcb
bca
acbc
*/

2022.02.21 SA的更多相关文章

  1. 2022.02.20 SA

    2022.02.20 SA 如果我还能看见明天黎明,如果我还能再爬起来,我仍会走我的路,哪怕这条路已经荒废许久,也许我们无法拥有感情,我们甚至无法像个正常人一样接受太阳的洗礼,但是我依然会执行我的条约 ...

  2. 2022.02.21 UB

    2022.02.21 UB 参考资料: https://zhuanlan.zhihu.com/p/141467895 https://blog.csdn.net/ghscarecrow/article ...

  3. FFMpeg ver 20160219-git-98a0053 滤镜中英文对照 2016.02.21 by 1CM

    FFMpeg ver 20160219-git-98a0053 滤镜中英文对照 2016.02.21 by 1CM T.. = Timeline support 支持时间轴 .S. = Slice t ...

  4. http://www.cnblogs.com/xwdreamer/archive/2012/02/21/2360818.html

    http://www.cnblogs.com/xwdreamer/archive/2012/02/21/2360818.html

  5. ROS的安装-> rosdep init /update报错2022.02.24实测有效

    ROS的安装-> rosdep init /update报错2022.02.24实测有效   一. 解决rosdep_init问题 正常执行sudo rosdep init会报错,如下: ERR ...

  6. 2022.02.27 CF811E Vladik and Entertaining Flags

    2022.02.27 CF811E Vladik and Entertaining Flags https://www.luogu.com.cn/problem/CF811E Step 1 题意 在一 ...

  7. 2022.02.27 CF811E Vladik and Entertaining Flags(线段树+并查集)

    2022.02.27 CF811E Vladik and Entertaining Flags(线段树+并查集) https://www.luogu.com.cn/problem/CF811E Ste ...

  8. [2017.02.21] 《Haskell趣学指南 —— Learning You a Haskell for Great Good!》

    {- 2017.02.21 <Haskell趣学指南 -- Learning You a Haskell for Great Good!> [官网](http://learnyouahas ...

  9. Cocos2dx游戏源码合集(BY懒骨头+持续更新+2014.02.21)

    转自:http://blog.csdn.net/iamlazybone/article/details/19612941 声明: <萝莉快跑><喵汪大战>两个demo的原作者b ...

随机推荐

  1. Linux移植实际操作一

    @ 目录 *前言 目前看了很多关于"Linux移植"的的各种教程.书籍,看完发现不过是对已有板子.已有驱动进行启用.禁用.参数修改.只能叫做"Linux配置". ...

  2. 6月26日 Django 中间件

     前戏 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装 ...

  3. 4月10日 python学习总结 模块和面向对象

    1.hashlib  1.什么叫hash:hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值 2.hash值的特点是:2.1 只要传入的内容一样,得到的hash值必然一样=====& ...

  4. 常见的url编码

    URL编码值 字符 %20 空格 %22 " %23 # %25 % %26 &; %28 ( %29 ) %2B + %2C , %2F / %3A : %3B ; %3C < ...

  5. 论文翻译:2021_Joint Online Multichannel Acoustic Echo Cancellation, Speech Dereverberation and Source Separation

    论文地址:https://arxiv.53yu.com/abs/2104.04325 联合在线多通道声学回声消除.语音去混响和声源分离 摘要: 本文提出了一种联合声源分离算法,可同时减少声学回声.混响 ...

  6. 火花思维java

    面试过程: 问的问题比较广,涉及java基础与互联网中间件,数据库很多知识,面试官态度非常友好,对于错的回答也做出来相应解答 面试官问的面试题: 1.redis如何保证数据一致性2.mysql的索引机 ...

  7. IDEA使用Docker插件构建镜像

    IDEA使用Docker插件构建镜像 记一次坑  第一次插件docker-maven-plugin的 配置文件中没写远程主机的地址 <dockerHost>http://192.168.1 ...

  8. [邮件服务]Foxmail安装及配置指引(Windows)

    操作指引: Step1:访问Foxmail邮箱官网:https://www.foxmail.com/,选择"Windows"版,点击"立即下载". Step2: ...

  9. Ajax是什么?包含什么技术?有什么作用?

    Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写. Ajax 尝试建立桌面应用程序的功能和交互性,与不断更新的 Web 应用程序之间的桥梁.不 ...

  10. MyBatis 框架的缺点?

    1.SQL 语句的编写工作量较大,尤其当字段多.关联表多时,对开发人员编写 SQL 语句的功底有一定要求. 2.SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库.