基本算法

  • 快速幂
 ll ksm(ll a,ll b)
{
ll ans=;
while(b)
{
if(b&) ans=ans*a%p;
b>>=;
a=a*a%p;
}
return ans;
}

ksm

  • 64位大整数乘法
 ll mul(ll a,ll b)
{
ll ans=;
while(b)
{
if(b&) ans=(ans+a)%p;
b>>=;
a=a*%p;
}
return ans;
}

mul

  • 离散化
     for(int i=;i<=n;i++) scanf("%d",&a[i]),b[i]=a[i];
sort(b+,b++n);
int cnt=unique(b+,b++n)-(b+);
for(int i=;i<=n;i++) a[i]=lower_bound(b+,b+cnt+,a[i])-b;

discrete

  • 归并排序求逆序对
 void mergesort(int l,int r)
{
if(l==r) return ;
int mid=(l+r)>>;
mergesort(l,mid);
mergesort(mid+,r);
int i=l,j=mid+,k=l-;
while(i<=mid&&j<=r)
{
if(a[i]<=a[j]) b[++k]=a[i],i++;
else b[++k]=a[j],j++,(ans+=mid-i+)%=moder;
}
while(i<=mid) b[++k]=a[i],i++;
while(j<=r) b[++k]=a[j],j++;
for(int qwq=l;qwq<=r;qwq++) a[qwq]=b[qwq];
}

mergesort

  • 全排列
 void dfs(int x)
{
for(int i=;i<=n;i++)
if(!vis[i])
{
seq[x]=i;
vis[i]=;
if(x==n) work();
else dfs(x+);
vis[i]=;
}
}

Permutation

  • ST表
 #include<cstdio>
#include<algorithm>
#include<cmath> using namespace std; int n,m;
int st[][]; int sta(int l,int r)
{
int k=log2(r-l+);
return max(st[l][k],st[r-(<<k)+][k]);
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&st[i][]);
for(int j=;j<=;j++)
for(int i=;i+(<<j)-<=n;i++)
st[i][j]=max(st[i][j-],st[i+(<<(j-))][j-]);
for(int i=;i<=m;i++)
{
int l=,r=;
scanf("%d%d",&l,&r);
printf("%d\n",sta(l,r));
}
return ;
}

ST Table

  • 两种二分
 while(l<r)
{
int mid=(l+r)>>;
if(check(mid)) r=mid;
else l=mid+;
}
while(l<r)
{
int mid=(l+r+)>>;
if(check(mid)) r=mid-;
else l=mid;
}

整数域二分

 double eps=1e-;
while(l+eps<r)
{
double mid=(l+r)/;
if(check(mid)) r=mid;
else l=mid;
}

实数域二分

 void Recantor(ll x)
{
memset(vis,,sizeof(vis));
x--;
int j=;
for(int i=;i<=n;i++)
{
ll t=x/fac[n-i];
for(j=;j<=n;j++)
if(!vis[j])
{
if(!t) break;
t--;
}
printf("%d ",j);
vis[j]=;
x%=fac[n-i];
}
printf("\n");
} ll cantor()
{
ll ans=;
for(int i=;i<=n;i++)
{
int tot=;
for(int j=i+;j<=n;j++)
if(a[j]<a[i]) tot++;
ans+=1ll*tot*fac[n-i];
}
return ans;
}

Cantor&Recantor

其他算法

  • 莫队算法(不带修)
 bool cmp(query a,query b)
{
return (a.l/block)^(b.l/block) ? a.l<b.l : (((a.l/block)&) ? a.r<b.r : a.r>b.r);
}//奇偶块排序 block=sqrt(n);
for(int i=;i<=n;i++) scanf("%d",&seq[i]);
for(int i=;i<=m;i++)
{
scanf("%d%d",&ask[i].l,&ask[i].r);
ask[i].id=i;
ask[i].in=ask[i].l/block;
}
sort(ask+,ask++m,cmp);
for(int i=;i<=m;i++)
{
int l=ask[i].l,r=ask[i].r;
while(posl<l) remove(posl++);
while(posr>r) remove(posr--);
while(posl>l) add(--posl);
while(posr<r) add(++posr);
ans[ask[i].id]=noww;
}
for(int i=;i<=m;i++) printf("%d\n",ans[i]);

Mo's Algorithm

数学

  • 预处理阶乘和处理逆元求组合数
 ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==)
{
x=;
y=;
return a;
}
int gu=exgcd(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
return gu; } ll niyuan(ll hu)
{
x=,y=;
ll tmp=exgcd(hu,p,x,y);
return (x+p)%p;
} ll C(ll k,ll m)
{
ll up=fac[k]%p;
ll down=fac[m]%p*fac[k-m]%p;
ll ans=up*niyuan(down)%p;
return ans;
} void pre()
{
fac[]=;
for(int i=;i<=n+;i++)
fac[i]=(ll)fac[i-]*i%p;
}

Combination

  • 杨辉三角求组合数

     C[][]=;C[][]=;
for(int i=;i<=n;i++) C[i][]=,C[i][i]=;
for(int i=;i<=n;i++)
for(int j=;j<=i;j++)
(C[i][j]=C[i-][j]+C[i-][j-])%=moder;

Yang's triangle

数据结构

  • $vector$实现普通平衡树 慎用!!!
 #include<cstdio>
#include<algorithm>
#include<vector> using namespace std; int n;
vector<int>v; int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int op=,x=;
scanf("%d%d",&op,&x);
if(op==) v.insert(upper_bound(v.begin(),v.end(),x),x);
else if(op==) v.erase(lower_bound(v.begin(),v.end(),x));
else if(op==) printf("%d\n",lower_bound(v.begin(),v.end(),x)-v.begin()+);
else if(op==) printf("%d\n",v[x-]);
else if(op==) printf("%d\n",*--lower_bound(v.begin(),v.end(),x));
else if(op==) printf("%d\n",*upper_bound(v.begin(),v.end(),x));
}
return ;
}
/*
您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:
1. 插入x数
2. 删除x数(若有多个相同的数,因只删除一个)
3. 查询x数的排名(若有多个相同的数,因输出最小的排名)
4. 查询排名为x的数
5. 求x的前驱(前驱定义为小于x,且最大的数)
6. 求x的后继(后继定义为大于x,且最小的数)
*/

Balanced Tree By vector

图论

  • Floyd算法。复杂度$O(n^3)$
     memset(dis,0x3f,sizeof(dis));
for(int i=;i<=v;i++) dis[i][i]=,dis[][i]=;//这一步很重要
for(int i=;i<=e;i++)
{
int x=,y=,z=;
scanf("%d%d%d",&x,&y,&z);
dis[x][y]=min(dis[x][y],z);
dis[y][x]=min(dis[y][x],z);
}
for(int kk=;kk<=v;kk++)
for(int i=;i<=v;i++)
for(int j=;j<=v;j++)
dis[i][j]=min(dis[i][j],dis[i][kk]+dis[kk][j]);

floyd

  • Dijkstra+堆优化。复杂度$O(mlogn)$。稠密图优。好像不能用来跑最长路诶(
 void dijkstra()
{
priority_queue<pair<int,int> >q;
memset(dis,0x3f,sizeof(dis));
dis[s]=;q.push(make_pair(,s));
while(!q.empty())
{
int u=q.top().second;q.pop();
if(vis[u]) continue;
vis[u]=;
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(dis[v]>dis[u]+edge[i].val)
{
dis[v]=dis[u]+edge[i].val;
q.push(make_pair(-dis[v],v));
}
}
}
}

Dijkstra+Heap

  • spfa过世算法复杂度理解为$O(nm)$。但稀疏图$O(km)$。
 void spfa()
{
memset(dis,0x3f,sizeof(dis));
queue<int>q;
q.push(s),vis[s]=,dis[s]=;
while(!q.empty())
{
int u=q.front();q.pop();
vis[u]=;
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(dis[v]>dis[u]+edge[i].val)
{
dis[v]=dis[u]+edge[i].val;
if(!vis[v]) q.push(v),vis[v]=;
}
}
}
}

spfa

  • 判断树上两路径是否相交

*  题目:LuoguP3398仓鼠找sugar / 计蒜客NOIP提高组模拟一试T2 敌对势力 / hihocoder 11D(题目找不到了==可以看这位dalao的博客

 #include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#define maxn 100090 using namespace std; int n,m,tot,t;
int head[maxn],d[maxn],f[maxn][];
struct node{
int to,next;
}edge[maxn*]; void add(int x,int y)
{
edge[++tot].to=y;
edge[tot].next=head[x];
head[x]=tot;
} void LCA_prework()
{
queue<int>q;
q.push();d[]=;
while(!q.empty())
{
int u=q.front();q.pop();
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(d[v]) continue;
d[v]=d[u]+;
f[v][]=u;
for(int j=;j<=t;j++)
f[v][j]=f[f[v][j-]][j-];
q.push(v);
}
}
} int LCA(int x,int y)
{
if(d[x]>d[y]) swap(x,y);
for(int i=t;i>=;i--)
if(d[f[y][i]]>=d[x]) y=f[y][i];
if(x==y) return x;
for(int i=t;i>=;i--)
if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
return f[x][];
} int main()
{
scanf("%d%d",&n,&m);
t=log2(n)+;
for(int i=;i<=n-;i++)
{
int x=,y=;
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
}
LCA_prework();
for(int i=;i<=m;i++)
{
int a=,b=,c=,e=;
scanf("%d%d%d%d",&a,&b,&c,&e);
int Chemist=LCA(a,b);
int cellur=LCA(c,e);
if(Chemist==cellur)
{
printf("NO\n");
continue;
}
if(d[Chemist]>d[cellur])
{
if(LCA(Chemist,c)==Chemist||LCA(Chemist,e)==Chemist)
{
printf("NO\n");
continue;
}
else
{//没有相交输出yes
printf("YES\n");
continue;
}
}
else
{
if(LCA(cellur,a)==cellur||LCA(cellur,b)==cellur)
{
printf("NO\n");
continue;
}
else
{
printf("YES\n");
continue;
}
}
} return ;
}
  • 最短路计数
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring> using namespace std;
typedef long long ll; int n,m,fake;
int vis[],dis[];
ll f[];
int e[][]; void spfa()
{
memset(dis,,sizeof(dis));
fake=dis[];
queue<int>q;
q.push();vis[]=;dis[]=;f[]=;
while(!q.empty())
{
int u=q.front();q.pop();
vis[u]=;
if(u==n) continue;
for(int i=;i<=n;i++)
{
if(dis[i]==dis[u]+e[u][i])
f[i]+=f[u];
if(dis[i]>dis[u]+e[u][i])
{
dis[i]=dis[u]+e[u][i];
f[i]=f[u];
}
if(f[i]&&!vis[i]) vis[i]=,q.push(i);
}
f[u]=;
}
} int main()
{
scanf("%d%d",&n,&m);
memset(e,,sizeof(e));
for(int i=;i<=m;i++)
{
int x=,y=,z=;
scanf("%d%d%d",&x,&y,&z);
e[x][y]=min(e[x][y],z);
}
spfa();
if(fake==dis[n]) printf("No answer");
else printf("%d %lld",dis[n],f[n]);
return ;
}

以上是过世算法$spfa$,现在我来为大家表演一下$dijkstra$。(搬运逛公园的30部分分)dij不用清空,非常优秀。

 #include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#define maxn 100090 using namespace std;
typedef long long ll; int T,n,m,k,tot;
int head[maxn];
bool vis[maxn];
ll moder,f[maxn],dis[maxn];
struct node{
int to,next,val;
}edge[maxn<<]; void add(int x,int y,int z)
{
edge[++tot].to=y;
edge[tot].next=head[x];
head[x]=tot;
edge[tot].val=z;
} void Clear()
{
tot=;
memset(head,,sizeof(head));
memset(vis,,sizeof(vis));
memset(f,,sizeof(f));
} void dijkstra()
{
priority_queue<pair<ll,int> >q;
for(int i=;i<=n;i++) dis[i]=3e9;
q.push(make_pair(,));dis[]=;f[]=;
while(!q.empty())
{
int u=q.top().second;q.pop();
if(vis[u]) continue;
vis[u]=;
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(dis[v]>dis[u]+edge[i].val)
{
dis[v]=dis[u]+edge[i].val;
q.push(make_pair(-dis[v],v));
(f[v]=f[u])%=moder;
}
else if(dis[v]==dis[u]+edge[i].val)
(f[v]+=f[u])%=moder;
}
}
} int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%lld",&n,&m,&k,&moder);
for(int i=;i<=m;i++)
{
int x=,y=,z=;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
dijkstra();
// if(dis[n]==3e9) printf("-1");
printf("%lld\n",f[n]);
//for(int i=1;i<=n;i++) printf("%lld ",dis[i]);
Clear();
}
return ;
}

Counting

  • kruskal算法求最小生成树:基于边。比较好理解,先对所有边进行排序,用并查集维护联通关系。复杂度为$O(mlogm)$。(其实不用找到n-1条边就退出...)
 /*
最小生成树Kruskal算法
快排权值+并查集看是否连通
*/
#include<cstdio>
#include<algorithm> using namespace std; int n,m,cnt,ans;
int fa[];
struct node{
int f,t,w;
}edge[]; bool cmp(node a,node b)
{
return a.w<b.w;
} int getf(int x)
{
if(x==fa[x]) return x;
return fa[x]=getf(fa[x]);
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
scanf("%d%d%d",&edge[i].f,&edge[i].t,&edge[i].w);
for(int i=;i<=n;i++) fa[i]=i;
sort(edge+,edge++m,cmp);
for(int i=;i<=m;i++)
{
if(cnt==n-) break;
int pp=getf(edge[i].f);
int qq=getf(edge[i].t);
if(pp==qq) continue;
fa[qq]=pp;
cnt++;
ans+=edge[i].w;
}
if(cnt<n-) printf("orz");
else printf("%d\n",ans);
return ;
}

Kruskal

  • Prim算法求最小生成树:基于点,逐步扩展。随便找一个点作为起点,设$dis$为添加了这个点需要增加的边权,然后每次在尚未被进入生成树的节点中寻找最小的$dis$,记录它的位置,这一次就把他加入生成树,并更新其他点的$dis$。复杂度$O(n^2)$。注意是否$vis$。
 #include<cstdio>
#include<algorithm>
#include<cstring>
#define maxn 5090 using namespace std;
typedef long long ll; int n,m,tot;
ll ans;
int head[maxn],dis[maxn],vis[maxn];
struct node{
int to,next,val;
}edge[]; void add(int x,int y,int z)
{
edge[++tot].to=y;
edge[tot].next=head[x];
head[x]=tot;
edge[tot].val=z;
} void prim()
{
memset(dis,,sizeof(dis));
dis[]=;
for(int k=;k<=n;k++)
{
int u=-,sta=0x3f3f3f3f;
for(int i=;i<=n;i++)
if(dis[i]<sta&&!vis[i]) sta=dis[i],u=i;
if(u==-) {printf("orz\n");exit();}
ans+=dis[u];
vis[u]=;
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(vis[v]) continue;
dis[v]=min(dis[v],edge[i].val);
}
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int x=,y=,z=;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);add(y,x,z);
}
prim();
printf("%d\n",ans);
return ;
}

Prim

  • 树的直径方法一:两遍bfs/dfs【不能处理有负权边情况】【记录路径】
 int bfs(int x)
{
queue<int>q;
memset(d,0x3f,sizeof(d));
memset(pre,,sizeof(pre));
fake=d[];
q.push(x);d[x]=;
while(!q.empty())
{
int u=q.front();q.pop();
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(d[v]==fake) q.push(v),pre[v]=i,d[v]=d[u]+;
}
}
int top=x;
for(int i=;i<=n;i++)
if(d[i]>d[top]) top=i;
return top;
}
int get_d()
{
p=bfs();
p=bfs(p);
return d[p];
}

Tree's Diameter/BFS

  • 树的直径方法二:树形dp
 void Treedp(int u)
{
vis[u]=;
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(vis[v]) continue;
Treedp(v);
ans=max(ans,f[x]+f[y]+edge[i].val)
f[x]=max(f[x],f[y]+edge[i].val);
}
}

Tree's Diameter/Treedp

  • 强连通分量/缩点(in有向图)
 void tarjan(int u)
{
dfn[u]=low[u]=++dfs_clock;
st.push(u);
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(!dfn[v])
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(!scc[v]) low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u])
{
scc_cnt++;
while()
{
int x=st.top();st.pop();
scc[x]=scc_cnt;
if(x==u) break;
}
}
}
—————————————————————————————————————
for(int i=;i<=n;i++)//在主程序中
if(!dfn[i]) tarjan(i);
for(int x=;x<=n;x++)
for(int i=head[x];i;i=edge[i].next)
{
int y=edge[i].to;
if(scc[x]!=scc[y])
ADD(scc[x],scc[y]);
}

tarjan1

  • 树上倍增求LCA

 #include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#define maxn 500090 using namespace std; int n,m,s,tot,t;
int d[maxn],head[maxn],f[maxn][];
struct node{
int to,next;
}edge[maxn<<]; void add(int x,int y)
{
edge[++tot].to=y;
edge[tot].next=head[x];
head[x]=tot;
} void init()
{
queue<int>q;
q.push(s);d[s]=;
while(!q.empty())
{
int u=q.front();q.pop();
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(d[v]) continue;
d[v]=d[u]+;
f[v][]=u;
for(int j=;j<=t;j++)
f[v][j]=f[f[v][j-]][j-];
q.push(v);
}
}
} int lca(int x,int y)
{
if(d[x]<d[y]) swap(x,y);
for(int i=t;i>=;i--)
if(d[f[x][i]]>=d[y]) x=f[x][i];
if(x==y) return x;
for(int i=t;i>=;i--)
if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
return f[x][];
} int main()
{
scanf("%d%d%d",&n,&m,&s);
t=log2(n)+;
for(int i=;i<=n-;i++)
{
int x=,y=;
scanf("%d%d",&x,&y);
add(x,y),add(y,x);
}
init();
for(int i=;i<=m;i++)
{
int x=,y=;
scanf("%d%d",&x,&y);
printf("%d\n",lca(x,y));
}
return ;
}

LCA

字符串

  • $trie$树
 tot=;
void insert()
{
int p=;
int len=strlen(tmp+);
for(int i=;i<=len;i++)
{
int qwq=tmp[i]-'';
if(!trie[p][qwq]) trie[p][qwq]=++tot;
p=trie[p][qwq];
}
}

trie--insert

  • 最小表示法
 void work()
{
n=strlen(str+);ans=;
for(int i=;i<=n;i++) str[n+i]=str[i];
int i=,j=,k;
while(i<=n&&j<=n)
{
for(k=;k<=n&&str[i+k]==str[j+k];k++);
if(k>=n) break;
if(str[i+k]>str[j+k])
{i=i+k+;if(i==j) i++;}
else
{j=j+k+;if(i==j) j++;}
}
ans=min(i,j);
printf("%d\n",ans);
}
//注意数组开二倍+

Minimal Expression

其他技巧

srand(time(NULL));
  • 生成数据的批处理文件($bat$)
 @echo off
:loop rand.exe baoli.exe sol.exe fc baoli.out sol.out if not errorlevel goto loop pause goto loop

dp.bat

  • 生成数据
 int random(int lim)
{
return (unsigned long long)rand()*rand()%lim;
} 调用时:int x=random()+;

rand

看到小数据范围:暴搜 全排列 二进制枚举  状压

$O(n^3)$:考虑枚举区间?

NOIp知识集合 By cellur925的更多相关文章

  1. python易错知识集合

    本篇用于记录在写leetcode时遇到的python易错知识. 2019.8.29 1.Python range() 函数用法: range(start, stop[, step]) start: 计 ...

  2. Java基础知识➣集合整理(三)

    概述 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个层次. 实现(类) ...

  3. Java基础知识--集合

    集合类 数组和集合的比较:数组可以存储对象,也可以存储基本数据类型,但是缺点就是长度固定,不能改变:集合长度是可变的,但是集合只能存储对象,集合可以存储不同类型的对象. Java容器类库一共有两种主要 ...

  4. 面试基础知识集合(python、计算机网络、操作系统、数据结构、数据库等杂记)

    python python _.__.__xx__之间的差别 python中range.xrange和randrange的区别 python中 =.copy.deepcopy的差别 python 继承 ...

  5. python知识集合

    1.list list是一种有序的集合 例子:classmates = ['Michael', 'Bob', 'Tracy']; 方法:1. len len(classmates) //3 2.app ...

  6. python基础知识-集合,列表,元组间的相互装换

    在python中列表,元祖,集合间可以进行相互转化, def main(): set1={'hello','good','banana','zoo','Python','hello'} print(l ...

  7. cocopods 知识集合 及 一个 好的 国外iOS技术翻译站

    http://www.exiatian.com/cocoapods%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8%E5%8F%8A%E9%85%8D%E7%BD%AE%E7% ...

  8. 从壹开始 [ Id4 ] 之二║ 基础知识集合 & 项目搭建一

    前言 哈喽大家又见面啦,感觉好久没更新了,这几天看了一本书<解忧杂货铺>,嗯挺好的,推荐一下

  9. js数组相关知识集合

    一.js数组快速排序 <script type="text/javascript"> var arr = [1, 2, 3, 54, 22, 1, 2, 3]; fun ...

随机推荐

  1. Ctags快速入门

    Ctags快速入门 在vim下阅读代码,特别是阅读不熟悉的代码时,ctags是一个提高效率的强大的工具. 1. ctags是什么? ctags可以将代码中的函数.方法.类.变量和其他的标识符进行索引, ...

  2. struts2 codebehind + actionPackages 实现Action零配置

    1.jar包:struts2-codebehind-plugin-2.2.1.1.jar 2.struts.xml:<!-- codebehind中查找action的返回结果资源时的默认文件夹 ...

  3. 用python 实现录入学生作业情况的小程序

    写一个录入学生作业情况的一个程序 1.查看学生作业情况 2.录入学生作业情况 3.可以让输入3次,需要为空的情况 homeworks = { ‘张流量’: {‘2018.3.22’:”未交”,’201 ...

  4. mysql之count

    两种引擎对count的处理 CREATE TABLE `test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` char(15) D ...

  5. python二进制数据

    一直以来对python的二进制数据搞不清楚. 一.二进制显示格式与实际存储值区别 1.二进制数据在python中以字节(bytes)类型和字节数组类型(bytearray)保存着,前者数据固定,后者不 ...

  6. 1091 Acute Stroke (30)(30 分)

    One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the re ...

  7. 使用ubuntu自带的Remmina Remote Desktop Client远程登录服务器配置

    1.配置:点击new , 配置服务器ip地址.名称.密码 2.打开本机终端执行一下命令: echo xfce4-session>.session echo xfce4-session>.x ...

  8. window下的hosts

    存放在windows系统目录中的\system32\drivers\etc下面. hosts文件是用来记录主机ip地址和主机名的对应关系,建立后就可以用主机名来访问主机,而不必记ip地址了.hosts ...

  9. POJ3352(连通分量缩点)

    Road Construction Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10352   Accepted: 514 ...

  10. 分布式环境下的session管理

    一.分布式Session的几种实现方式 1.1.基于cookie 进行session共享 简单.方便,每次通过判断cookie中的用户状态信息判断用户的登录状态:但是用户信息要存在客户端,存在安全隐患 ...