ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【题解】编程社清明节假期做题记录

2021-04-03 20:04:33  阅读:199  来源: 互联网

标签:清明节 return int 题解 编程 times cdots maxn vdots


编程社清明节假期做题记录&题解

GM清明节放题是为了让我们不闲着 ❌

GM清明节放题是为了好送我们上路 ✔

XSC062写题解是为了推销她的博客 ❌

XSC062写题解是为了好好复习总结 ✔

T1 敌兵布阵

Description

Problem Link

题意简述

有 \(N(N\leqslant5\times 10^4)\) 个营地,第 \(i\) 个营地初始时有 \(a_i\) 个人 \((1\leqslant a_i\leqslant 50)\),接下来输入若干条命令:

  • Add i j 表示第 \(i\) 个营地增加 \(j\) 个人。 \((j\leqslant30)\)
  • Sub i j 表示第 \(i\) 个营地减少 \(j\) 个人。 \((j\leqslant30)\)
  • Query i j 表示询问营地 \(i\sim j\) 的总人数。
  • End 表示当前数据命令结束。

Solution

简单来说就是单点修改,区间查询。

法一 线段树

Poster Here

这不线段树板子题吗,果然GM只是不想让我们闲着而已。

既然如此,尝试不看以前的代码,手打一遍吧。

Code

AC on 04/02

#include<cstdio>
#include<cstring>
#define lt p<<1
#define rt lt|1
#define mid (a[p].l+a[p].r>>1)
const int maxn=5e4+5;
int T,n,x,y;
int _a[maxn];
char type[15];
namespace Segment_Tree{
    struct Structure_of_Segment_Tree{int l,r,sum;}a[maxn<<2];
    inline void PushUp(int p){
        a[p].sum=a[lt].sum+a[rt].sum;
        return;
    }
    void Build(int p,int l,int r){
        a[p].l=l;a[p].r=r;
        a[p].sum=0;
        if(l==r){
            a[p].sum=_a[l];
            return;
        }
        Build(lt,l,mid);
        Build(rt,mid+1,r);
        PushUp(p);
        return;
    }
    void Update(int p,int x,int v){
        if(a[p].l==a[p].r){
            a[p].sum+=v;
            return;
        }
        if(x<=mid)Update(lt,x,v);
        else Update(rt,x,v);
        PushUp(p);
        return;
    }
    int Query(int p,int l,int r){
        if(l<=a[p].l&&a[p].r<=r)
            return a[p].sum;
        int val=0;
        if(l<=mid)
            val+=Query(lt,l,r);
        if(r>mid)
            val+=Query(rt,l,r);
        return val;
    }
}using namespace Segment_Tree;
int main(){
    scanf("%d",&T);
    for(int t=1;t<=T;++t){
        scanf("%d",&n);
        for(int i=1;i<=n;++i)
            scanf("%d",&_a[i]);
        Build(1,1,n);
        printf("Case %d:\n",t);
        scanf("%s",type+1);
        while(strcmp(type+1,"End")){
            scanf("%d%d",&x,&y);
            switch(type[1]){
                case 'A':{
                    Update(1,x,y);
                    break;
                }
                case 'S':{
                    Update(1,x,-y);
                    break;
                }
                case 'Q':{
                    printf("%d\n",Query(1,x,y));
                    break;
                }
                default:{
                    puts("114514");
                    break;
                }
            }
            scanf("%s",type+1);
        }
    }
    return 0;
}

法二 分块

Poster There will be a good blog soon

这不块状链表板子题吗,果然GM只是不想让我们闲着而已。

既然如此,尝试不看以前的代码,手打一遍吧。

人类的本质。。。

Code

AC on 04/03

#include<cmath>
#include<cstdio>
#include<cstring>
#define lt p<<1
#define rt lt|1
#define mid (a[p].l+a[p].r>>1)
const int maxk=233;
const int maxn=5e4+5;
int T,n,x,y;
char type[15];
namespace Block{
    int k,siz;
    int sum[maxk];
    int l[maxk],r[maxk];
    int a[maxn],pos[maxn];
    inline void init(void){
        siz=sqrt(n);
        k=(n+siz-1)/siz;
        for(int i=1;i<=k;++i){
            l[i]=r[i-1]+1;
            r[i]=l[i]+siz-1;
            sum[i]=0;
        }
        r[k]=n;
        for(int i=1;i<=n;++i){
            pos[i]=(i+siz-1)/siz;
            sum[pos[i]]+=a[i];
        }
        return;
    }
    inline void Update(int x,int v){
        a[x]+=v;
        sum[pos[x]]+=v;
        return;
    }
    inline int Query(int ql,int qr){
        int res=0;
        if(pos[ql]==pos[qr]){
            for(int i=ql;i<=qr;++i)
                res+=a[i];
            return res;
        }
        for(int i=ql;i<=r[pos[ql]];++i)
            res+=a[i];
        for(int i=pos[ql]+1;i<pos[qr];++i)
            res+=sum[i];
        for(int i=l[pos[qr]];i<=qr;++i)
            res+=a[i];
        return res;
    }
}using namespace Block;
int main(){
    scanf("%d",&T);
    for(int t=1;t<=T;++t){
        scanf("%d",&n);
        for(int i=1;i<=n;++i)
            scanf("%d",&a[i]);
        init();
        printf("Case %d:\n",t);
        scanf("%s",type+1);
        while(strcmp(type+1,"End")){
            scanf("%d%d",&x,&y);
            switch(type[1]){
                case 'A':{
                    Update(x,y);
                    break;
                }
                case 'S':{
                    Update(x,-y);
                    break;
                }
                case 'Q':{
                    printf("%d\n",Query(x,y));
                    break;
                }
                default:{
                    puts("114514");
                    break;
                }
            }
            scanf("%s",type+1);
        }
    }
    return 0;
}

T2 Yet Another Number Sequence

Description

Problem Link

双倍经验

题意简述

设 \(F_i\) 表示Fibonacci数列的第 \(i\) 项,即 \(F_1=1,F_2=2,F_i=F_{i-1}+F_{i-2}\)。

设 \(A_i=F_i\times i^k(k\leqslant 40)\),你的任务是求出其前 \(n\) 项和 \((n\leqslant 10^{18})\bmod 10^9+7\) 的结果。

Solution

题目突然就变得不板了起来。

注意到Fibonacci,\(n\leqslant 10^{18}\) 等关键词,明摆着就是一道矩阵加速嘛。

但是,,,\((i-1)^k\) 怎么转移到 \(i^k\) 呢?

BDFS了一大堆后,发现了方法:二项式定理。

ccc我刚刚才想到过二项式定理然后自己一口否决(XSC062:矩阵乘法考NM的二项式定理……),现在只能疯狂打脸。

\(k\) 那么小,那你干脆把 \((i-1)^1,(i-1)^2,(i-1)^3,\cdots,(i-1)^k\) 丢到初始矩阵里去不就行了?

顺便还得把 \(i^1,i^2,i^3,\cdots,i^k\) 丢进去,然后 \((i-1)^x\) 就可以直接转换成 \(i^x\)。

那么 \(i^x\) 也得转换为 \((i+1)^x\),所以关键在于 \(i^x\) 怎么转换为 \((i+1)^x\)。(那这不是又回到原问题上了吗!

经过作者一阵乱搞,发现矩阵乘法是处理不了 \(A_i\) 的。

所以只能把矩阵里的 \(i^1,i^2,\cdots,i^k\) 都乘上一个 \(F_i\) 来充数。

那么我们看一看 \(F_{i+1}\times(i+1)^k\) 是怎么得到的:

\[\begin{aligned} F_{i+1}\times(i+1)^k&=(F_{i-1}+F_i)\times(i+1)^k\\ &=F_{i-1}\times(i+1)^k+F_i\times(i+1)^k\\ &=F_{i-1}\times[(i-1)+2]^k+F_i\times[(i)+1]^k \end{aligned} \]

是时候亮出二项式定理了!

我们都知道,二项式定理是一个酱紫的东西:

\[(x+y)^k=\sum\limits_{i=0}^kC_k^ix^iy^{k-i} \]

代入到 \([(i-1)+2]^k\) 中来,就是:

\[[(i-1)+2]^x=\sum\limits_{j=0}^xC_x^j(i-1)^j2^{x-j} \]

而我们刚好有 \((i-1)^j\)。

\(C_x^j\times2^{x-j}\) 就是 \((i-1)^j\) 在加速矩阵里对应的系数。

又代入到 \([(i)+1]^x\) 中,得:

\[[(i)+1]^x=\sum\limits_{j=0}^xC_x^ji^j \]

挺巧的,我们也有 \(i^j\)。

\(C_x^j\) 就是 \(i^j\) 在加速矩阵中对应的系数。

设 \(S_x=\sum\limits_{i=1}^xA_i\)。

那么初始矩阵就长这样:

\[[F_1,F_2,S_1,F_1\times1^1,F_1\times 1^2,\cdots,F_1\times1^k,F_2\times2^1,F_2\times2^2,\cdots,F_2\times2^k] \]

转移一步后长这样:

\[[F_2,F_3,S_3,F_2\times2^1,F_2\times2^2,\cdots,F_2\times2^k,F_3\times3^1,F_3\times3^2,\cdots,F_3\times3^k] \]

转移 \(n-1\) 步后的最终矩阵长这样:

\[[F_n,F_{n+1},S_n,F_n\times n^1,F_n\times n^2,\cdots,F_n\times n^k,F_{n+1}\times(n+1)^1,F_{n+1}\times(n+1)^2,\cdots,F_{n+1}\times(n+1)^k] \]

加速矩阵长这样:

\[\begin{bmatrix} &F_i&F_{i+1}&S_i&F_i\times i^1&F_i\times i^2&\cdots&F_i\times i^k&F_{i+1}\times(i+1)^1&F_{i+1}\times(i+1)^2&\cdots&F_{i+1}\times(i+1)^k \\ F_{i-1}(\times(i-1)^0)&0&1&0&0&0&\cdots&0&2^{1-0}\times C_1^0=2&2^{2-0}\times C_2^0=4&\cdots&2^{k-0}\times C_k^0\\ F_{i}(\times i^0)&1&1&0&0&0&\cdots&0&C_1^0=1&C_2^0=1&\cdots&C_k^0\\ S_{i-1}&0&0&1&0&0&\cdots&0&0&0&\cdots&0\\ F_{i-1}\times(i-1)^1&0&0&0&0&0&\cdots&0&2^{1-1}\times C_1^1=1&2^{2-1}\times C_2^1=4&\cdots&2^{k-1}\times C_k^1\\ F_{i-1}\times(i-1)^2&0&0&0&0&0&\cdots&0&0&2^{2-2}\times C_2^2=1&\cdots&2^{k-2}\times C_k^2\\ \cdots&\vdots&\vdots&\vdots&\vdots&\vdots&\cdots&\vdots&\vdots&\vdots&\cdots&\vdots\\ F_{i-1}\times(i-1)^k&0&0&0&0&0&\cdots&0&0&0&\cdots&2^{k-k}\times C_k^k\\ F_i\times i^1&0&0&0&1&0&\cdots&0&C_1^1=1&C_2^1=2&\cdots&C_k^1\\ F_i \times i^2&0&0&0&0&1&\cdots&0&0&C_2^2=1&\cdots&C_k^2\\ \vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\cdots&\vdots&\vdots&\vdots&\cdots&\vdots\\ F_i\times i^k&0&0&1&0&0&\cdots&0&0&0&\cdots&C_k^k \end{bmatrix} \]

(cnm这个\(\LaTeX\) 是给人打的吗。。。)

好了,除了初始化麻烦点,代码还是比较简单的。

Code

感谢@w23c3c3大巨佬让我逃离了手推 \(k=40\) 大数据然后真·清明节快乐的厄运。

AC on 04/03

#include<cstdio>
#include<cstring>
#define int long long
const int mod=1e9+7;
const int maxn=105;
struct Matrix{
	int n,m;
	int c[maxn][maxn]; 
	Matrix(int N=0,int M=0){
		n=N,m=M;
		memset(c,0,sizeof(c));
	}
	Matrix operator*(const Matrix a)const{
		int l=n,r=a.m;
		Matrix x=Matrix(l,r);
		for(int i=1;i<=l;++i){
			for(int j=1;j<=r;++j){
				for(int k=1;k<=m;++k){
					x.c[i][j]+=c[i][k]*a.c[k][j];
					x.c[i][j]%=mod;
				}
			}
		}
		return x;
	}
}A,B;
int n,k,x=4;
int f[45][45]; 
Matrix pow(Matrix&x,int b){
	Matrix ans=Matrix(x.n,x.m);
	for(int i=1;i<=x.m;++i)
        ans.c[i][i]=1;
	while(b){
		if(b&1)
			ans=x*ans;
		x=x*x;
		b>>=1;
	}
	return ans;
}
inline void init(void){
	f[0][0]=1;
	for(int i=1;i<=k;++i){
        f[i][0]=1;
		for(int j=1;j<=i;++j)
			f[i][j]=(f[i-1][j-1]+f[i-1][j])%mod;
	}
    return;
}
signed main(){
    scanf("%lld%lld",&n,&k);
    init();
    A=Matrix(1,3+(k<<1));
    A.c[1][1]=1;A.c[1][2]=2;A.c[1][3]=1;
    for(int i=1;i<=k;++i){
        A.c[1][3+i]=1;
        A.c[1][k+3+i]=x%mod;
        x<<=1;
    }
    B=Matrix(3+(k<<1),3+(k<<1));
    B.c[2][1]=1;
    B.c[1][2]=B.c[2][2]=1;
    B.c[3][3]=B.c[3+(k<<1)][3]=1;
    for(int i=1;i<=k;++i){
        B.c[1][i+k+3]=(1ll<<i)%mod;
        B.c[3+k+i][3+i]=1;
        B.c[2][3+i+k]=1;
    }
    for(int i=1;i<=k;++i){
        for(int j=i;j<=k;++j){
            B.c[3+i][3+k+j]=(((1ll<<j-i)%mod)*f[j][i])%mod;
            B.c[3+k+i][3+k+j]=f[j][i];
        }
    }
    A=A*pow(B,n-1);
    printf("%lld",A.c[1][3]);
    return 0;
}

T3 JM的荧光棒工厂

Description

Problem Link

题意简述

给定字符串 \(S(1\leqslant|S|\leqslant2\times10^5)\),求出所有既是 \(S\) 的前缀,又是 \(S\) 的后缀的子串长度。

Solution

主要考察 KMP Next 数组的应用。

经典KMP题了。

Code

AC on 04/03

#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using std::sort;
const int maxn=2e5+5;
int tot,len;
char S[maxn];
int ans[maxn];
int Next[maxn];
void get_Next(void){
	int i=0,j=-1;
	Next[0]=-1;
	while(i<len){
		if(j==-1||S[i]==S[j]){
			i++;
			j++;
			Next[i]=j;
		}
		else j=Next[j];
	}
	return;
}
signed main(){
    scanf("%s",S);
	len=strlen(S);
	get_Next();
	while(len>0){
		ans[++tot]=len;
		len=Next[len];
	}
    printf("%lld\n",tot-1);
	sort(ans+1,ans+tot+1);
	for(int i=1;i<tot;++i)
		printf("%lld ",ans[i]);
	return 0;
}

T4 剪花布条

Description

Problem Link

双倍经验

题意简述

给定两个字符串 \(S,M(|S|,|M|\leqslant1000)\),求 \(S\) 中最多有多少个互不重叠的 \(M\)。

Solution

又是一道KMP板子题。

Code

AC on 04/03

#include<cstdio>
#include<cstring>
const int maxn=1005;
int Next[maxn];
int ans,ALen,BLen;
char S[maxn],M[maxn];
void KMP(char *A,char *B){
    ans=0;
	int i=0,j=-1;
	Next[0]=-1;
	BLen=strlen(B);
	while(i<BLen){
		if(j==-1||B[i]==B[j]){
			i++;
			j++;
			Next[i]=j;
		}
		else j=Next[j];
	}
	i=0,j=0;
	while(i<ALen&&j<BLen){
		if(j==-1||A[i]==B[j]){
			i++;
			j++;
		}
		else j=Next[j];
		if(j==BLen){
			ans++;
			j=0;
		}
	}
	return;
}
int main(){
	while(~scanf("%s",S)){
        if((ALen=strlen(S))==1){
            if(S[0]=='#')
                return 0;
        }
        scanf("%s",M);
        KMP(S,M);
        printf("%d\n",ans);
    }
	return 0;
}

T5 函数

Description

Problem Link

题意简述

有 \(Q\) 个询问 \((1\leqslant Q\leqslant 10^5)\),对于每个询问,给定 \(n,r,mod(1\leqslant r\leqslant n\leqslant 10^5,1\leqslant mod\leqslant 10^{14})\),其中 \(mod\) 不一定是质数,求 \(C_n^r\times(n-r)!\bmod mod\)。

Solution

若 \(mod\) 是质数,可以用逆元。(虽然我不会)

但是,这里的 \(mod\) 不一定是质数了,我们就要想办法避免除法。

开始推式子:

\[\begin{aligned} C_n^r\times(n-r)!&=\frac{n!}{r!(n-r)!}\times(n-r)!\\ &=\frac{n!}{r!} \end{aligned} \]

此时暴力的时间复杂度为 \(\mathcal O(nQ)\),要炸。

所以考虑把 \(1\sim 10^5\) 中的连乘值处理出来,然后线段树区间查询 \(r+1\sim n\) 的连乘。

Code

这道不要脸的题居然要开 __int128 ,差评。

AC on 04/03

#include<cstdio>
#include<cstring>
#define int __int128
#define lt p<<1
#define rt lt|1
#define mid (a[p].l+a[p].r>>1)
const int maxn=1e5+5;
const int LEN=(1<<20);
int Q,n,mod,r;
namespace Segment_Tree{
    struct Structure_of_Segment_Tree{int l,r,mul;}a[maxn<<2];
    inline void PushUp(int p){
        a[p].mul=(a[lt].mul*a[rt].mul)%mod;
        return;
    }
    void Build(int p,int l,int r){
        a[p].l=l;a[p].r=r;
        a[p].mul=1;
        if(l==r){
            a[p].mul=l%mod;
            return;
        }
        Build(lt,l,mid);
        Build(rt,mid+1,r);
        PushUp(p);
        return;
    }
    int Query(int p,int l,int r){
        if(l<=a[p].l&&a[p].r<=r)
            return a[p].mul;
        int val=1;
        if(l<=mid)
            val=Query(lt,l,r);
        if(r>mid)
            val=(val*Query(rt,l,r))%mod;
        return val;
    }
}using namespace Segment_Tree;
inline int nec(){
	static char buf[LEN],*p=buf,*e=buf;
	if(p==e){
		if((e=buf+fread(buf,1,LEN,stdin))==buf)return EOF;
		p=buf;
	}
	return *p++;
}
inline bool read(int&x){
	static char neg=0,c=nec();
	neg=0,x=0;
	while((c<'0'||c>'9')&&c!='-'){
		if(c==EOF)return 0;
		c=nec();
	}
	if(c=='-'){
		neg=1;
		c=nec();
	}
	do{x=x*10+c-'0';}while((c=nec())>='0');
	if(neg)x=-x;
	return 1;
}
void print(int x){
	if(x>9)print(x/10);
	putchar(x%10+'0');
	return;
}
signed main(){
    #ifdef ONLINE_JUDGE
    freopen("function.in","r",stdin);
    freopen("function.out","w",stdout);
    #endif
    read(Q);read(mod);
    Build(1,1,1e5+5);
    while(Q--){
        read(n);read(r);
        print(Query(1,r+1,n));
        putchar('\n');
    }
    return 0;
}

T6 树的统计

Description

Problem Link, and this,this,this,this,this.

题意简述

原题目描述够简了。

Solution

树剖板子题,有手就行,不讲。快来!这里有个人水博客!

Code

AC on 04/03

#include<cstdio>
const int maxn=3e4+5;
const int inf=0x3f3f3f3f;
struct _{
    int l,r;
    int mx,sum;
}a[maxn<<2];
char s[15];
int n,q,x,y,tot,cnt;
int to[maxn<<1],nxt[maxn<<1];
int h[maxn],dep[maxn],w[maxn],rk[maxn];
int f[maxn],hvst[maxn],siz[maxn],st[maxn],top[maxn];
void add(int x,int y){
    to[++tot]=y;
    nxt[tot]=h[x];
    h[x]=tot;
    return;
}
int max(int x,int y){return x>y?x:y;}
void swap(int&x,int&y){
    if(x==y)return;
    x^=y^=x^=y;
    return;
}
void dfs1(int x,int fa){
    siz[x]=1;
    int mxsiz=0;
    for(int i=h[x];i;i=nxt[i]){
        int v=to[i];
        if(v==fa)continue;
        dep[v]=dep[x]+1;
        f[v]=x;
        dfs1(v,x);
        siz[x]+=siz[v];
        if(siz[v]>mxsiz){
            mxsiz=siz[v];
            hvst[x]=v;
        }
    }
    return;
}
void dfs2(int x,int tp){
    top[x]=tp;
    st[x]=++cnt;
    rk[cnt]=x;
    if(!hvst[x])                           
        return;
    dfs2(hvst[x],tp);
    for(int i=h[x];i;i=nxt[i]){
        int v=to[i];
        if(v!=f[x]&&v!=hvst[x])
            dfs2(v,v); 
    }
    return;
}
void build(int p,int l,int r){
    a[p].l=l,a[p].r=r;
    if(l==r){
        a[p].mx=a[p].sum=w[rk[l]];
        return;
    }
    int mid=l+r>>1;
    int lt=p<<1;int rt=lt|1;
    build(lt,l,mid);
    build(rt,mid+1,r);
    a[p].mx=max(a[lt].mx,a[rt].mx);
    a[p].sum=a[lt].sum+a[rt].sum;
    return;
}
void Update(int p,int x,int v){
    if(a[p].l==a[p].r){
        a[p].sum=a[p].mx=v;
        return;
    }
    int lt=p<<1;int rt=lt|1;
    int mid=a[p].l+a[p].r>>1;
    if(x<=mid)Update(lt,x,v);
    else Update(rt,x,v);
    a[p].mx=max(a[lt].mx,a[rt].mx);
    a[p].sum=a[lt].sum+a[rt].sum;
    return;
}
int QueryMax(int p,int l,int r){
    if(l<=a[p].l&&r>=a[p].r)
        return a[p].mx;
    int val=-inf;
    int mid=a[p].l+a[p].r>>1;
    if(l<=mid)
        val=max(val,QueryMax(p<<1,l,r));
    if(r>mid)
        val=max(val,QueryMax((p<<1)|1,l,r));
    return val;
}
int QuerySum(int p,int l,int r){
    if(l<=a[p].l&&r>=a[p].r)
        return a[p].sum;
    int val=0;
    int mid=a[p].l+a[p].r>>1;
    if(l<=mid)
        val+=QuerySum(p<<1,l,r);
    if(r>mid)
        val+=QuerySum((p<<1)|1,l,r);
    return val;
}
int QueryMaxPath(int x,int y){
    int res=-inf;
    while(top[x]!=top[y]){
        if(dep[top[x]]<dep[top[y]])
            swap(x,y);
        res=max(res,QueryMax(1,st[top[x]],st[x]));
        x=f[top[x]];
    }
    if(dep[x]>dep[y])swap(x,y);
    res=max(res,QueryMax(1,st[x],st[y]));
    return res;
}
int QuerySumPath(int x,int y){
    int res=0;
    while(top[x]!=top[y]){ 
        if(dep[top[x]]<dep[top[y]])
            swap(x,y);
        res+=QuerySum(1,st[top[x]],st[x]);
        x=f[top[x]];
    }
    if(dep[x]>dep[y])swap(x,y);
    res+=QuerySum(1,st[x],st[y]);
    return res;
}
int main(){
    dep[1]=1;
    scanf("%d",&n);
    for(int i=1;i<n;++i){ 
        scanf("%d%d",&x,&y);
        add(x,y);add(y,x);
    }
    for(int i=1;i<=n;++i)
        scanf("%d",&w[i]);
    dfs1(1,-1);
    dfs2(1,1);
    build(1,1,n);
    scanf("%d",&q);
    while(q--){
        scanf("%s%d%d",s+1,&x,&y);
        if(s[1]=='C')
            Update(1,st[x],y);
        else if(s[2]=='M')
            printf("%d\n",QueryMaxPath(x,y));
        else printf("%d\n",QuerySumPath(x,y));
    }
    return 0;
}

end.

标签:清明节,return,int,题解,编程,times,cdots,maxn,vdots
来源: https://www.cnblogs.com/Sunshine-Girl-XSC062/p/14614637.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有