NOIp知识集合 By cellur925
基本算法
- 快速幂
- 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
其他技巧
- 编译命令:-Wshadow -Wconversion -Wextra / 打开wall警告开关
- 简单重载运算符:https://www.cnblogs.com/nopartyfoucaodong/p/9734314.html
- 更多有关$lowerbound$和$upperbound$:https://www.cnblogs.com/nopartyfoucaodong/p/9818967.html
- 生成数据前,一定要记得调用种子!!即(在挂文件后)
- 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的更多相关文章
- python易错知识集合
本篇用于记录在写leetcode时遇到的python易错知识. 2019.8.29 1.Python range() 函数用法: range(start, stop[, step]) start: 计 ...
- Java基础知识➣集合整理(三)
概述 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个层次. 实现(类) ...
- Java基础知识--集合
集合类 数组和集合的比较:数组可以存储对象,也可以存储基本数据类型,但是缺点就是长度固定,不能改变:集合长度是可变的,但是集合只能存储对象,集合可以存储不同类型的对象. Java容器类库一共有两种主要 ...
- 面试基础知识集合(python、计算机网络、操作系统、数据结构、数据库等杂记)
python python _.__.__xx__之间的差别 python中range.xrange和randrange的区别 python中 =.copy.deepcopy的差别 python 继承 ...
- python知识集合
1.list list是一种有序的集合 例子:classmates = ['Michael', 'Bob', 'Tracy']; 方法:1. len len(classmates) //3 2.app ...
- python基础知识-集合,列表,元组间的相互装换
在python中列表,元祖,集合间可以进行相互转化, def main(): set1={'hello','good','banana','zoo','Python','hello'} print(l ...
- 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% ...
- 从壹开始 [ Id4 ] 之二║ 基础知识集合 & 项目搭建一
前言 哈喽大家又见面啦,感觉好久没更新了,这几天看了一本书<解忧杂货铺>,嗯挺好的,推荐一下
- js数组相关知识集合
一.js数组快速排序 <script type="text/javascript"> var arr = [1, 2, 3, 54, 22, 1, 2, 3]; fun ...
随机推荐
- 吴恩达机器学习笔记(二) —— Logistic回归
主要内容: 一.回归与分类 二.Logistic模型即sigmoid function 三.decision boundary 决策边界 四.cost function 代价函数 五.梯度下降 六.自 ...
- Module.exports和exports的区别
原文链接: https://www.ycjcl.cc/2017/02/10/module-exportshe-exportsde-qu-bie/ 学习Seajs时,看到了exports.doSomet ...
- matlab之flipud()函数
此函数实现矩阵的上下翻转.fliplw()实现左右旋转. 举例: a =[1 2;3 4;5 6] flipud(a)的结果: 5 6 3 4 1 2 fliplr(a)的结果: 2 1 4 3 6 ...
- HDU 4652 Dice:期望dp(成环)【错位相减】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4652 题意: 给你一个有m个面的骰子. 两种询问: (1)"0 m n": “最后 ...
- laravel 在apache或nginx的配置
laravel 下载后,如何运行起来呢,根据自己的应用,记录了几个关键点: 1.apache 配置: 打开http.conf文件,将mod_rewrite前面的#去掉(启用重写模块): 2.nginx ...
- tensorflow 线性回归 iris
线性拟合
- 写个sleep玩玩
static void sig_when_weakup(int no){ printf("weakup weakup\n"); longjmp(buf, ); } void wea ...
- leetcode 304. Range Sum Query 2D - Immutable(递推)
Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...
- ZOJ1905Power Strings (KMP||后缀数组+RMQ求循环节)
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc&quo ...
- poj1050最大矩阵和——暴力枚举
题目:http://poj.org/problem?id=1050 s[i][j]数组记录以点(i,j)为右下角.(1,1)为左上角的子矩阵内部和: 枚举子矩阵左上角和右下角,取最大值即可. 代码如下 ...