1.筛\(phi\)

\(logn\)求少数\(phi\)

  1. inline int phi(R int x){
  2. R int res=x,tmp=x;
  3. for(R int i=2;i*i<=x;i++){
  4. if(tmp%i==0)res=res*(i-1)/i;
  5. while(tmp%i==0)tmp/=i;
  6. }
  7. if(tmp>1)res=res*(tmp-1)/tmp;
  8. return res;
  9. }

线性求\(phi\)

  1. inline void getphi(R int n){
  2. vis[1]=0;
  3. for(R int i=2;i<=n;i++){
  4. if(!vis[i]){
  5. prime[++tot]=i;
  6. phi[i]=i-1;
  7. }
  8. for(R int j=1;j<=tot&&i*prime[j]<=n;j++){
  9. vis[prime[j]*i]=1;
  10. if(i%prime[j]==0){
  11. phi[prime[j]*i]=phi[i]*prime[j];break;
  12. }
  13. else phi[prime[j]*i]=phi[i]*(priem[j]-1);
  14. }
  15. }
  16. }

线性筛约数个数和约数和

  1. //num[i] 表示i的最小质因子出现次数
  2. inline void get_d(){
  3. d[1]=1;num[1]=1;
  4. for(R int i=2;i<=n;i++){
  5. if(!vis[i]){
  6. prime[++tot]=i;
  7. d[i]=2;num[i]=1;
  8. }
  9. for(R int j=1;j<=tot&&i*prime[j]<=n;j++){
  10. vis[i*prime[j]]=1;
  11. if(i%prime[j]==0){
  12. num[i*prime[j]]=num[i]+1;
  13. d[i*prime[j]]=d[i]/num[i*prime[j]]*(num[i*prime[j]]+1);
  14. break;
  15. }
  16. d[prime[j]*i]=d[i]*(1+1);
  17. num[prime[j]*i]=1;
  18. }
  19. }
  20. }
  21. //sp[i] 表示i的(1+p[1]+p[1]^1+...+p[1]^a[1])
  22. inline void get_sd(){
  23. sd[1]=1;sp[1]=1;
  24. for(R int i=2;i<=n;i++){
  25. if(!vis[i]){
  26. prime[++tot]=i;
  27. sd[i]=i+1;
  28. sp[i]=i+1;
  29. }
  30. for(R int j=1;j<=tot&&prime[j]*i<=n;j++){
  31. vis[i*prime[j]]=1;
  32. if(i%prime[j]==0){
  33. sp[i*prime[j]]=sp[i]*prime[j]+1;
  34. sd[i*prime[j]]=sd[i]/sp[i]*sp[i*prime[j]];
  35. break;
  36. }
  37. sd[i*prime[j]]=sd[i]*sd[prime[j]];
  38. sp[i*prime[j]]=prime[j]+1;
  39. }
  40. }
  41. }

2.ST表

  1. inline void pre(){
  2. mn[0]=-1;
  3. for(R int i=1;i<=n;i++){
  4. mn[i]=((i&(i-1))==0)? mn[i-1]+1:mn[i-1];
  5. stmax[i][0]=a[i];
  6. }
  7. for(R int j=1;j<=mn[n];j++)
  8. for(R int i=1;i+(1<<j)-1<=n;i++)
  9. stmax[i][j]=max(stmax[i][j-1],stmax[i+(1<<(j-1))][j-1]);
  10. }
  11. inline int getmax(R int l,R int r){
  12. R int k=mn[r-l+1];
  13. return max(stmax[l][k],stmax[r-(1<<k)+1][k]);
  14. }
  15. int main(){
  16. read(n);read(m);
  17. for(R int i=1;i<=n;i++)read(a[i]);
  18. pre();
  19. for(R int i=1;i<=m;i++){
  20. read(l);read(r);
  21. printf("%d\n",getmax(l,r));
  22. }
  23. return 0;
  24. }

3.高斯消元

  1. read(n);
  2. for(R int i=1;i<=n;i++)
  3. for(R int j=1;j<=n+1;j++)
  4. scanf("%lf",&mp[i][j]);
  5. for(R int i=1;i<=n;i++){
  6. R int mx=i;
  7. for(R int j=i+1;j<=n;j++)
  8. if(fabss(mp[mx][i])<fabss(mp[j][i]))mx=i;
  9. if(mx!=i)swap(mp[mx],mp[i]);
  10. if(fabss(mp[i][i])>eps){
  11. R double div=mp[i][i];
  12. for(R int j=i;j<=n+1;j++)
  13. mp[i][j]/=div;
  14. for(R int j=1;j<=n;j++){
  15. if(i==j)continue;
  16. div=mp[j][i];
  17. for(R int k=i;k<=n+1;k++)
  18. mp[j][k]-=div*mp[i][k];
  19. }
  20. }
  21. }
  22. for(R int i=1;i<=n;i++){
  23. R int cnt=1;
  24. while(fabss(mp[i][cnt])<eps&&cnt<=n+1)cnt++;
  25. if(cnt==n+1)pd_nojie=1;
  26. if(cnt>n+1)pd_wuqiong=1;
  27. }
  28. if(pd_nojie||pd_wuqiong){
  29. printf("No Solution\n");
  30. return 0;
  31. }
  32. ans[n]=mp[n][n+1];
  33. for(R int i=n-1;i>=1;i--){
  34. ans[i]=mp[i][n+1];
  35. for(R int j=i+1;j<=n;j++)
  36. ans[i]-=mp[i][j]*ans[j];
  37. }
  38. for(R int i=1;i<=n;i++)
  39. printf("%.2lf\n",ans[i]);

4.悬线法

  1. for(R int i=1;i<=n;i++){
  2. for(R int j=1;j<=m;j++){
  3. read(mp[i][j]);
  4. up[i][j]=1;
  5. l[i][j]=r[i][j]=j;
  6. }
  7. }
  8. for(R int i=1;i<=n;i++)
  9. for(R int j=2;j<=m;j++)
  10. if(mp[i][j]!=mp[i][j-1])
  11. l[i][j]=l[i][j-1];
  12. for(R int i=1;i<=n;i++)
  13. for(R int j=m-1;j>=1;j--)
  14. if(mp[i][j]!=mp[i][j+1])
  15. r[i][j]=r[i][j+1];
  16. for(R int i=1;i<=n;i++){
  17. for(R int j=1;j<=m;j++){
  18. if(i>1&&mp[i][j]!=mp[i-1][j]){
  19. l[i][j]=max(l[i][j],l[i-1][j]);
  20. r[i][j]=min(r[i][j],r[i-1][j]);
  21. up[i][j]=up[i-1][j]+1;
  22. }
  23. R int a=r[i][j]-l[i][j]+1;
  24. R int b=min(a,up[i][j]);
  25. ans1=max(ans1,b*b);
  26. ans2=max(ans2,a*up[i][j]);
  27. }
  28. }

5.nim游戏

  1. tmp=0;
  2. read(n);
  3. for(R int i=1;i<=n;i++)
  4. read(x),tmp^=x;
  5. if(tmp)printf("Yes\n");
  6. else printf("No\n");

6.线段树双lazy

  1. #define ls(o) o<<1
  2. #define rs(o) o<<1|1
  3. #define up(o) t[o]=(t[ls(o)]+t[rs(o)])%mod
  4. inline void build(R int o,R int l,R int r){
  5. mul[o]=1;add[o]=0;
  6. if(l==r){
  7. t[o]=a[l]%mod;
  8. return;
  9. }
  10. R int mid=(l+r)>>1;
  11. build(ls(o),l,mid);
  12. build(rs(o),mid+1,r);
  13. up(o);
  14. }
  15. inline void push_down(R int o,R int l,R int r){
  16. if(mul[o]!=1){
  17. t[ls(o)]=(mul[o]*t[ls(o)])%mod;
  18. t[rs(o)]=(mul[o]*t[rs(o)])%mod;
  19. add[ls(o)]=(add[ls(o)]*mul[o])%mod;
  20. add[rs(o)]=(add[rs(o)]*mul[o])%mod;
  21. mul[ls(o)]=(mul[o]*mul[ls(o)])%mod;
  22. mul[rs(o)]=(mul[o]*mul[rs(o)])%mod;
  23. mul[o]=1;
  24. }
  25. R int mid=(l+r)>>1;
  26. if(add[o]){
  27. t[ls(o)]=(t[ls(o)]+add[o]*(mid-l+1))%mod;
  28. t[rs(o)]=(t[rs(o)]+add[o]*(r-mid))%mod;
  29. add[ls(o)]=(add[ls(o)]+add[o])%mod;
  30. add[rs(o)]=(add[rs(o)]+add[o])%mod;
  31. add[o]=0;
  32. }
  33. }
  34. inline void update_add(R int o,R int nl,R int nr,R int l,R int r,R ll k){
  35. if(nl<=l&&nr>=r){
  36. t[o]=(t[o]+(r-l+1)*k)%mod;
  37. add[o]=(add[o]+k)%mod;
  38. return;
  39. }
  40. push_down(o,l,r);
  41. R int mid=(l+r)>>1;
  42. if(nl<=mid)update_add(ls(o),nl,nr,l,mid,k);
  43. if(nr>mid)update_add(rs(o),nl,nr,mid+1,r,k);
  44. up(o);
  45. }
  46. inline void update_mul(R int o,R int nl,R int nr,R int l,R int r,R ll k){
  47. if(nl<=l&&nr>=r){
  48. t[o]=t[o]*k%mod;
  49. add[o]=add[o]*k%mod;
  50. mul[o]=mul[o]*k%mod;
  51. return;
  52. }
  53. push_down(o,l,r);
  54. R int mid=(l+r)>>1;
  55. if(nl<=mid)update_mul(ls(o),nl,nr,l,mid,k);
  56. if(nr>mid)update_mul(rs(o),nl,nr,mid+1,r,k);
  57. up(o);
  58. }

最大子段和

  1. struct node{
  2. int lm,rm,sm,sum;
  3. void init(int x){
  4. lm=rm=sm=sum=x;
  5. }
  6. friend node operator + (node a,node b){
  7. node ans;
  8. ans.sum=a.sum+b.sum;
  9. ans.sm=max(max(a.sm,b.sm),a.rm+b.lm);
  10. ans.lm=max(a.lm,a.sum+b.lm);
  11. ans.rm=max(b.rm,b.sum+a.rm);
  12. return ans;
  13. }
  14. }t[N];

7.有理数取余(附加快速幂)

  1. char A[N],B[N];
  2. ll a,b;
  3. inline ll ksm(R ll x,R ll y){
  4. ll res=1;
  5. while(y){
  6. if(y&1)res=res*x%mod;
  7. x=x*x%mod;
  8. y>>=1;
  9. }
  10. return res;
  11. }
  12. int main(){
  13. scanf("%s%s",A+1,B+1);
  14. R int n=strlen(A+1);
  15. R int m=strlen(B+1);
  16. for(R int i=1;i<=n;i++)
  17. a=(a*10+A[i]-'0')%mod;
  18. for(R int i=1;i<=m;i++)
  19. b=(b*10+B[i]-'0')%mod;
  20. if(!b)printf("Angry!\n");
  21. else printf("%lld\n",a*ksm(b,mod-2)%mod);
  22. return 0;
  23. }

8.割点(割顶)

  1. inline void tarjan(R int x){
  2. R int rd=0;
  3. dfn[x]=low[x]=++num;
  4. for(R int i=h[x];i;i=edge[i].nex){
  5. R int xx=edge[i].to;
  6. if(!dfn[xx]){
  7. fa[xx]=fa[x];
  8. tarjan(xx);
  9. low[x]=min(low[x],low[xx]);
  10. if(low[xx]>=dfn[x]&&x!=fa[x])cut[x]=1;
  11. if(x==fa[x])rd++;
  12. }
  13. low[x]=min(low[x],dfn[xx]);
  14. }
  15. if(x==fa[x]&&rd>=2)cut[x]=1;
  16. }
  17. int main(){
  18. read(n);read(m);
  19. for(R int i=1,u,v;i<=m;i++)
  20. read(u),read(v),add(u,v),add(v,u);
  21. for(R int i=1;i<=n;i++)fa[i]=i;
  22. for(R int i=1;i<=n;i++)
  23. if(!dfn[i])tarjan(i);
  24. R int now=0;
  25. for(R int i=1;i<=n;i++)
  26. if(cut[i])ans[++now]=i;
  27. printf("%d\n",now);
  28. for(R int i=1;i<=now;i++)printf("%d ",ans[i]);
  29. return 0;
  30. }

9.缩点

  1. inline void tarjan(R int x){
  2. vis[x]=1;
  3. sta[++top]=x;
  4. dfn[x]=low[x]=++num;
  5. for(R int i=h[x];i;i=edge[i].nex){
  6. R int xx=edge[i].to;
  7. if(!dfn[xx]){
  8. tarjan(xx);
  9. low[x]=min(low[x],low[xx]);
  10. }
  11. else if(vis[xx])low[x]=min(low[x],dfn[xx]);
  12. }
  13. if(dfn[x]==low[x]){
  14. cnt++;
  15. R int now=-1;
  16. while(now!=x){
  17. now=sta[top];
  18. top--;
  19. col[now]=cnt;
  20. sum[cnt]+=val[now];
  21. vis[now]=0;
  22. }
  23. }
  24. }

10.裴蜀定理

  1. scanf("%d",&n);
  2. scanf("%d",&ans);
  3. ans=abs(ans);
  4. for(R int i=2;i<=n;i++){
  5. scanf("%d",&x);
  6. ans=gcd(ans,abs(x));
  7. }
  8. printf("%d",ans);

11.负环

  1. inline bool spfa(R int s){
  2. queue<int> q;
  3. for(R int i=1;i<=n;i++)dist[i]=INF,vis[i]=0;
  4. q.push(s);vis[s]=1;dist[s]=0;cnt[s]++;
  5. while(!q.empty()){
  6. R int x=q.front();q.pop();vis[x]=0;
  7. cnt[x]++;
  8. if(cnt[x]>=n)return 1;
  9. for(R int i=h[x];i;i=edge[i].nex){
  10. R int xx=edge[i].to;
  11. if(dist[xx]>dist[x]+edge[i].dis){
  12. dist[xx]=dist[x]+edge[i].dis;
  13. if(!vis[xx]){
  14. vis[xx]=1;
  15. q.push(xx);
  16. }
  17. }
  18. }
  19. }
  20. return 0;
  21. }

11+.最短路计数

  1. while(!q.empty()){
  2. int x=q.front();q.pop();vis[x]=0;
  3. for(int i=h[x];i;i=edge[i].nex){
  4. int xx=edge[i].to;
  5. if(dist[xx]==dist[x]+edge[i].dis){
  6. ans[xx]+=ans[x];ans[xx]%=mod;
  7. if(!vis[xx]){
  8. vis[xx]=1;
  9. q.push(xx);
  10. }
  11. }
  12. if(dist[xx]>dist[x]+edge[i].dis){
  13. dist[xx]=dist[x]+edge[i].dis;
  14. ans[xx]=ans[x]%mod;
  15. if(!vis[xx]){
  16. vis[xx]=1;
  17. q.push(xx);
  18. }
  19. }
  20. }

12.Dij堆优化

  1. struct HeapNode{
  2. int u;ll d;
  3. friend bool operator < (const HeapNode &a,const HeapNode &b){
  4. return a.d>b.d;
  5. }
  6. };
  7. priority_queue<HeapNode> q;
  8. inline void Dij(R int s){
  9. for(R int i=1;i<=n;i++)dist[i]=INF,vis[i]=0;
  10. q.push((HeapNode){s,0});dist[s]=0;
  11. while(!q.empty()){
  12. R int x=q.top().u;q.pop();
  13. if(vis[x])continue;vis[x]=1;
  14. for(R int i=h[x];i;i=edge[i].nex){
  15. R int xx=edge[i].to;
  16. if(dist[xx]>dist[x]+edge[i].dis){
  17. dist[xx]=dist[x]+edge[i].dis;
  18. q.push((HeapNode){xx,dist[xx]});
  19. }
  20. }
  21. }
  22. }

13.manacher

  1. scanf("%s",a);
  2. n=strlen(a);
  3. for(R int i=0;i<n;i++)s[i*2]='#',s[i*2+1]=a[i];
  4. n=2*n+1;s[n-1]='#';
  5. rl[0]=1;
  6. for(R int i=0;i<n;i++){
  7. if(i<=maxright)rl[i]=min(rl[center*2-i],maxright-i);
  8. else rl[i]=1;
  9. while(s[i+rl[i]]==s[i-rl[i]]&&i+rl[i]<n&&i-rl[i]>=0)rl[i]++;
  10. if(i+rl[i]-1>maxright)maxright=i+rl[i]-1,center=i;
  11. }
  12. for(R int i=0;i<n;i++)ans=max(ans,rl[i]-1);

14.KMP

  1. scanf("%s%s",s1+1,s2+1);
  2. l1=strlen(s1+1);
  3. l2=strlen(s2+1);
  4. R int j=0;
  5. nex[1]=0;
  6. for(R int i=2;i<=l2;i++){
  7. while(j&&s2[i]!=s2[j+1])j=nex[j];
  8. if(s2[i]==s2[j+1])j++;
  9. nex[i]=j;
  10. }
  11. j=0;
  12. for(R int i=1;i<=l1;i++){
  13. while(j&&s1[i]!=s2[j+1])j=nex[j];
  14. if(s1[i]==s2[j+1])j++;
  15. if(j==l2){
  16. printf("%d\n",i-l2+1);
  17. j=nex[j];
  18. }
  19. }

15.线性求逆元

  1. read(n);read(mod);
  2. a[1]=1;
  3. for(R int i=2;i<=n;i++)
  4. a[i]=(((-mod/i)*a[mod%i])%mod+mod)%mod;
  5. for(R int i=1;i<=n;i++)printf("%lld\n",a[i]);

阶乘及阶乘逆元

  1. fac[0]=fac[1]=1;
  2. for(R int i=2;i<=n;i++)fac[i]=(fac[i-1]*i)%mod;
  3. inv[n]=ksm(fac[n],mod-2);
  4. for(R int i=n-1;i>=0;i--)inv[i]=((i+1)*inv[i+1])%mod;

16.prim堆优化

  1. struct node{
  2. int v,w;
  3. friend bool operator < (const node &a,const node &b){
  4. return a.w>b.w;
  5. }
  6. };
  7. vector<node> t[N];
  8. bool vis[N];
  9. ll ans;
  10. inline void prim(){
  11. priority_queue<node> q;
  12. while(!q.empty())q.pop();
  13. ans=0;
  14. for(R int i=1;i<=n;i++)vis[i]=0;
  15. for(R int i=0;i<(int)t[1].size();i++)
  16. q.push(t[1][i]);
  17. vis[1]=1;
  18. R int bian=n-1;
  19. R node x;
  20. while(bian--){
  21. x=q.top();q.pop();
  22. if(vis[x.v])
  23. while(vis[x.v])
  24. x=q.top(),q.pop();
  25. ans=ans+x.w;
  26. vis[x.v]=1;
  27. for(R int i=0;i<t[x.v].size();i++)
  28. if(!vis[t[x.v][i].v])
  29. q.push(t[x.v][i]);
  30. }
  31. }
  32. int main(){
  33. read(n);read(m);node x;
  34. for(R int i=1,u,v,w;i<=m;i++){
  35. read(u);read(v);read(w);
  36. x.v=v;x.w=w;
  37. t[u].push_back(x);
  38. x.v=u;
  39. t[v].push_back(x);
  40. }
  41. prim();
  42. printf("%lld\n",ans);
  43. return 0;
  44. }

17.树上差分

  1. inline void dfs(R int x,R int f){
  2. dep[x]=dep[f]+1;fa[x][0]=f;
  3. for(R int i=1;(1<<i)<=dep[x];i++)
  4. fa[x][i]=fa[fa[x][i-1]][i-1];
  5. for(R int i=h[x];i;i=edge[i].nex){
  6. R int xx=edge[i].to;
  7. if(xx==f)continue;
  8. dfs(xx,x);
  9. }
  10. }
  11. inline int lca(R int x,R int y){
  12. if(dep[x]>dep[y])swap(x,y);
  13. for(R int i=20;i>=0;i--)
  14. if(dep[x]<=dep[y]-(1<<i))y=fa[y][i];
  15. if(x==y)return x;
  16. for(R int i=20;i>=0;i--)
  17. if(fa[x][i]!=fa[y][i])
  18. x=fa[x][i],y=fa[y][i];
  19. return fa[x][0];
  20. }
  21. inline void search(R int x){
  22. for(R int i=h[x];i;i=edge[i].nex){
  23. R int xx=edge[i].to;
  24. if(xx==fa[x][0])continue;
  25. search(xx);
  26. cnt[x]+=cnt[xx];
  27. }
  28. }
  29. //边差分
  30. cnt[x]++;cnt[y]++;
  31. cnt[LCA]-=2;
  32. //点差分
  33. cnt[x]++;cnt[y]++;
  34. cnt[LCA]--;cnt[fa[LCA][0]]--;

18.并查集

  1. inline int find(R int x){return fa[x]==x?fa[x]:fa[x]=find(fa[x]);}
  2. inline void merge(R int x,R int y){fa[find(x)]=find(y);}

19.左偏堆

  1. inline int merge(R int x,R int y){
  2. if(x==0||y==0)return x+y;
  3. if(val[x]>val[y]||(val[x]==val[y]&&x>y))swap(x,y);
  4. ch[x][1]=merge(ch[x][1],y);
  5. fa[ch[x][1]]=x;
  6. if(dep[ch[x][0]]<dep[ch[x][1]])swap(ch[x][0],ch[x][1]);
  7. dep[x]=dep[ch[x][1]]+1;
  8. return x;
  9. }
  10. inline int find(R int x){
  11. while(fa[x])x=fa[x];
  12. return x;
  13. }
  14. inline void pop(R int x){
  15. val[x]=-1;
  16. fa[ch[x][0]]=fa[ch[x][1]]=0;
  17. merge(ch[x][0],ch[x][1]);
  18. }
  19. int main(){
  20. read(n);read(m);
  21. dep[0]=-1;
  22. for(R int i=1;i<=n;i++)read(val[i]);
  23. while(m--){
  24. R int opt,x,y,xx,yy;
  25. read(opt);
  26. if(opt==1){
  27. read(x);read(y);
  28. if(val[x]==-1||val[y]==-1)continue;
  29. if(x==y)continue;
  30. xx=find(x),yy=find(y);
  31. merge(xx,yy);
  32. }
  33. else{
  34. read(x);
  35. if(val[x]==-1)puts("-1");
  36. else{
  37. y=find(x);
  38. printf("%d\n",val[y]);
  39. pop(y);
  40. }
  41. }
  42. }
  43. return 0;
  44. }

20.最小瓶颈路

  1. struct MST{
  2. int u,v,w;
  3. friend bool operator < (const MST &a,const MST &b){
  4. return a.w<b.w;
  5. }
  6. }t[N];
  7. inline void ins(R int u,R int v,R int w){
  8. t[++num].u=u;
  9. t[num].v=v;
  10. t[num].w=w;
  11. }
  12. struct node{
  13. int nex,to,dis;
  14. }edge[N<<1];
  15. inline void add(R int u,R int v,R int w){
  16. edge[++tot].nex=h[u];
  17. edge[tot].to=v;
  18. edge[tot].dis=w;
  19. h[u]=tot;
  20. }
  21. inline int find(R int x){return fat[x]==x?fat[x]:fat[x]=find(fat[x]);}
  22. inline void dfs(R int x,R int f,R int g){
  23. dep[x]=dep[f]+1;
  24. fa[x][0]=f;
  25. mx[x][0]=g;
  26. for(R int i=1;(1<<i)<=dep[x];i++)
  27. fa[x][i]=fa[fa[x][i-1]][i-1],
  28. mx[x][i]=max(mx[x][i-1],mx[fa[x][i-1]][i-1]);
  29. for(R int i=h[x];i;i=edge[i].nex){
  30. R int xx=edge[i].to;
  31. if(xx==f)continue;
  32. dfs(xx,x,edge[i].dis);
  33. }
  34. }
  35. inline int get_ans(R int x,R int y){
  36. R int res=0;
  37. if(dep[x]>dep[y])swap(x,y);
  38. for(R int i=20;i>=0;i--)
  39. if(dep[x]<=dep[y]-(1<<i))
  40. res=max(res,mx[y][i]),y=fa[y][i];
  41. if(x==y)return res;
  42. for(R int i=20;i>=0;i--)
  43. if(fa[x][i]!=fa[y][i])
  44. res=max(res,max(mx[x][i],mx[y][i])),
  45. x=fa[x][i],y=fa[y][i];
  46. res=max(res,max(mx[x][0],mx[y][0]));
  47. return res;
  48. }
  49. int main(){
  50. read(n);read(m);
  51. for(R int i=1;i<=n;i++)fat[i]=i;
  52. for(R int i=1,u,v,w;i<=m;i++)
  53. read(u),read(v),read(w),ins(u,v,w);
  54. sort(t+1,t+1+m);
  55. for(R int i=1;i<=m;i++){
  56. R int x=find(t[i].u);
  57. R int y=find(t[i].v);
  58. if(x!=y){
  59. fat[x]=y;
  60. add(x,y,t[i].w);
  61. add(y,x,t[i].w);
  62. }
  63. }
  64. dfs(1,0,0);
  65. read(q);
  66. while(q--){
  67. R int x,y;
  68. read(x);read(y);
  69. if(find(x)!=find(y))puts("impossible");
  70. else printf("%d\n",get_ans(x,y));
  71. }
  72. return 0;
  73. }

21.矩阵乘法(Fib)

  1. struct Mar{
  2. ll a[10][10];
  3. Mar(){memset(a,0,sizeof(a));}
  4. };
  5. Mar cheng(Mar a,Mar b){
  6. Mar c;
  7. for(int i=1;i<=2;i++)
  8. for(int j=1;j<=2;j++)
  9. for(int k=1;k<=2;k++)
  10. c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j]%mod)%mod;
  11. return c;
  12. }
  13. Mar ksm(Mar x,ll y){
  14. Mar res=e;
  15. while(y){
  16. if(y&1)res=cheng(res,x);
  17. x=cheng(x,x);
  18. y>>=1;
  19. }
  20. return res;
  21. }

22.中国剩余定理

  1. void exgcd(ll a,ll b,ll &x,ll &y){
  2. if(!b){
  3. x=1;y=0;return;
  4. }
  5. exgcd(b,a%b,y,x);
  6. y-=a/b*x;
  7. }
  8. ll msc(ll x,ll y,ll mod){
  9. ll ans=0;
  10. while(y){
  11. if(y&1)ans=(ans+x)%mod;
  12. x=x*2%mod;
  13. y>>=1;
  14. }
  15. return ans;
  16. }
  17. void China(){
  18. for(int i=1;i<=n;i++)N*=b[i];
  19. ll x,y;//所求的X是N/b[i]*y
  20. for(int i=1;i<=n;i++){
  21. ll m=N/b[i];
  22. exgcd(b[i],m,x,y);
  23. y=(y+b[i])%b[i];
  24. X=(X+msc(msc(a[i],m,N),y,N))%N;
  25. }
  26. }
  27. int main()
  28. {
  29. n=read();
  30. for(int i=1;i<=n;i++) a[i]=read();
  31. for(int i=1;i<=n;i++) b[i]=read();
  32. China();
  33. printf("%lld",(X+N)%N);
  34. return 0;
  35. }

23数列分块(余数求和)

  1. int main(){
  2. read(n);read(k);
  3. ans=n*k;
  4. for(R ll l=1,r;l<=n;l=r+1){
  5. ll s=k/l;
  6. if(s!=0)r=min(k/s,n);
  7. else r=n;
  8. ans-=s*(r-l+1)*(l+r)/2;
  9. }
  10. printf("%lld",ans);
  11. return 0;
  12. }

24.线性基

  1. void insert(long long x){
  2. for(int i=63;i>=0;i--){
  3. if(x&(1LL<<i)){
  4. if(!p[i]){
  5. p[i]=x;break;
  6. }
  7. else x^=p[i];
  8. }
  9. }
  10. }
  11. int main(){
  12. scanf("%lld",&n);
  13. for(int i=1;i<=n;i++){
  14. scanf("%lld",&a[i]);
  15. insert(a[i]);
  16. }
  17. for(int i=63;i>=0;i--){
  18. if((ans^p[i])>ans)ans^=p[i];
  19. }
  20. printf("%lld\n",ans);
  21. return 0;
  22. }

25.逆序对

  1. inline void msort(R int l,R int r){
  2. if(l==r)return;
  3. R int mid=(l+r)>>1;
  4. msort(l,mid);msort(mid+1,r);
  5. R int i=l,j=mid+1,k=l;
  6. while(i<=mid&&j<=r)
  7. if(a[i]<=a[j])
  8. b[k]=a[i],k++,i++;
  9. else
  10. b[k]=a[j],k++,j++,ans+=(mid-i+1);
  11. while(i<=mid)
  12. b[k]=a[i],i++,k++;
  13. while(j<=r)
  14. b[k]=a[j],j++,k++;
  15. for(R int i=l;i<=r;i++)
  16. a[i]=b[i];
  17. }

26.高精

  1. struct big{
  2. int a[N];
  3. }x,y,ed,one;
  4. big operator + (big a,big b){
  5. big c;
  6. memset(c.a,0,sizeof(c.a));
  7. int len=max(a.a[0],b.a[0]);
  8. for(int i=1;i<=len;i++)c.a[i]=a.a[i]+b.a[i];
  9. for(int i=1;i<=len;i++)
  10. if(c.a[i]>=10){
  11. c.a[i+1]+=c.a[i]/10;
  12. c.a[i]%=10;
  13. }
  14. if(c.a[len+1])len++;
  15. c.a[0]=len;
  16. return c;
  17. }
  18. big operator - (big a,big b){
  19. big c;
  20. memset(c.a,0,sizeof(c.a));
  21. int len=max(a.a[0],b.a[0]);
  22. for(R int i=1;i<=len;i++)c.a[i]=a.a[i]-b.a[i];
  23. for(R int i=1;i<=len;i++){
  24. if(c.a[i]<0){
  25. c.a[i+1]--;
  26. c.a[i]+=10;
  27. }
  28. }
  29. while(!c.a[len])len--;
  30. c.a[0]=len;
  31. return c;
  32. }
  33. big operator / (big a,int x){
  34. big c;
  35. memset(c.a,0,sizeof(c.a));
  36. int len=0,tmp=0;
  37. for(R int i=a.a[0];i>=1;i--){
  38. tmp=tmp*10+a.a[i];
  39. if(tmp>=x){
  40. c.a[++len]=tmp/x;
  41. tmp%=x;
  42. }
  43. else c.a[++len]=0;
  44. }
  45. for(R int i=1;i<=len;i++)w[i]=c.a[len-i+1];
  46. for(R int i=1;i<=len;i++)c.a[i]=w[i];
  47. c.a[0]=len;
  48. return c;
  49. }
  50. inline void print(big x){
  51. if(x.a[0]==0)printf("0");
  52. for(int i=x.a[0];i>=1;i--)
  53. printf("%d",x.a[i]);
  54. }

27.二分图

  1. inline int find(R int x){
  2. for(R int i=1;i<=n;i++){
  3. if(!vis[i]&&mp[x][i]){
  4. vis[i]=1;
  5. if(!to[i]||find(to[i])){
  6. to[i]=x;
  7. return 1;
  8. }
  9. }
  10. }
  11. return 0;
  12. }
  13. for(R int i=1;i<=m;i++){
  14. memset(vis,0,sizeof(vis));
  15. if(find(i))ans++;
  16. }

28.模拟退火

  1. void SA(){
  2. double T = 2333.0;
  3. double xx = x,yy = y;
  4. while(T > 1e-16){
  5. double vx = xx + T * (rand() * 2 - RAND_MAX),vy = yy + T * (rand() * 2 - RAND_MAX);
  6. double res = calc(vx,vy) - calc(xx,yy);
  7. if(res < 0){
  8. x = xx = vx,y = yy = vy;
  9. }
  10. else if(exp(-res/ T) * RAND_MAX > rand())xx = x,yy = y;
  11. T = T * 0.9982;
  12. }
  13. }

29.Trie树

  1. void insert(char *s,int rt){
  2. for(int i=0;s[i];i++){
  3. int v=s[i]-'a';
  4. if(!trie[rt][v]) trie[rt][v]=++tot;
  5. rt=trie[rt][v];
  6. }
  7. }
  8. int find(char *s,int rt){
  9. for(int i=0;s[i];i++){
  10. int v=s[i]-'a';
  11. if(!trie[rt][v])return 0;
  12. rt=trie[rt][v];
  13. }
  14. sum[rt]++;
  15. return sum[rt];
  16. }

01 Trie树

  1. inline void insert(R int x,R int rt){
  2. for(R int i=1<<30;i;i>>=1){
  3. bool c=x&i;
  4. if(!trie[rt][c])trie[rt][c]=++num;
  5. rt=trie[rt][c];
  6. }
  7. }
  8. inline int query(R int x,R int rt){
  9. R int ans=0;
  10. for(R int i=1<<30;i;i>>=1){
  11. bool c=x&i;
  12. if(trie[rt][c^1])ans+=i,rt=trie[rt][c^1];
  13. else rt=trie[rt][c];
  14. }
  15. return ans;
  16. }

30.LCS && LIS

  1. //LCS
  2. for(R int i=1;i<=n;i++)
  3. for(R int j=1;j<=m;j++)
  4. dp[i][j]=max(dp[i-1][j],max(dp[i][j-1],dp[i-1][j-1]+(a[i]==b[j])));
  5. printf("%d\n",dp[n][m]);
  6. //LIS
  7. read(n);read(k);
  8. for(R int i=1;i<=n;i++)read(b[i]);
  9. for(R int i=1;i<=k-1;i++)
  10. if(b[i]<b[k])a[++tot]=b[i];
  11. a[++tot]=b[k];
  12. for(R int i=k+1;i<=n;i++)
  13. if(b[i]>b[k])a[++tot]=b[i];
  14. low[1]=a[1];ans=1;
  15. for(R int i=2;i<=tot;i++){
  16. if(a[i]>=low[ans])low[++ans]=a[i];
  17. else low[lower_bound(low+1,low+1+ans,a[i])-low]=a[i];
  18. }
  19. printf("%d\n",ans);
  20. //统计方案数
  21. for(R int i=1;i<=n;i++){
  22. dp[i]=1;
  23. for(R int j=1;j<i;j++)
  24. if(a[j]>a[i])dp[i]=max(dp[i],dp[j]+1);
  25. ans=max(ans,dp[i]);
  26. }
  27. for(R int i=1;i<=n;i++){
  28. if(dp[i]==1)cnt[i]=1;
  29. for(R int j=1;j<i;j++){
  30. if(a[j]==a[i]&&dp[i]==dp[j])cnt[j]=0;
  31. if(a[j]>a[i]&&dp[i]==dp[j]+1)cnt[i]+=cnt[j];
  32. }
  33. }
  34. for(R int i=1;i<=n;i++)pos+=cnt[i]*(dp[i]==ans);
  35. printf("%d %d\n",ans,pos);

31.对顶堆

  1. priority_queue<int> q1;
  2. priority_queue<int,vector<int>,greater<int> > q2;
  3. inline void ins(R int x){
  4. if(x>q1.top())q2.push(x);
  5. else q1.push(x);
  6. }
  7. inline void query(){
  8. int pos=q1.size()+q2.size();
  9. while(abss(q1.size()-q2.size())>1){
  10. if(q1.size()>q2.size())q2.push(q1.top()),q1.pop();
  11. else q1.push(q2.top()),q2.pop();
  12. }
  13. if(pos&1){
  14. if(q1.size()>q2.size())printf("%d\n",q1.top());
  15. else printf("%d\n",q2.top());
  16. }
  17. else {
  18. printf("%d\n",min(q1.top(),q2.top()));
  19. }
  20. }

32.康拓展开

  1. inline ll contor(ll c[]){
  2. ll ans=0;
  3. for(R int i=1;i<=n;i++){
  4. ll sum=0;
  5. for(R int j=i+1;j<=n;j++)
  6. if(c[i]>c[j])sum++;
  7. ans+=sum*fac[n-i];
  8. }
  9. return ans+1;
  10. }
  11. inline ll revcontor(ll x){
  12. memset(vis,0,sizeof(vis));
  13. x--;ll j;
  14. for(R int i=1;i<=n;i++){
  15. ll t=x/fac[n-i];
  16. for(j=1;j<=n;j++){
  17. if(!vis[j]){
  18. if(!t)break;
  19. t--;
  20. }
  21. }
  22. printf("%lld ",j);
  23. vis[j]=1;
  24. x%=fac[n-i];
  25. }
  26. printf("\n");
  27. }

33.树链剖分

  1. //---------------------线段树---------------------------
  2. void build(int o,int l,int r){
  3. if(l==r){
  4. t[o]=a[tid[l]]; //guo
  5. tag[o]=0;
  6. return;
  7. }
  8. int mid=(l+r)>>1;
  9. build(ls(o),l,mid);
  10. build(rs(o),mid+1,r);
  11. up(o);
  12. }
  13. void chuan(int o,int l,int r,int k){
  14. tag[o]+=k;
  15. t[o]+=k*(r-l+1);
  16. t[o]%=mod;
  17. }
  18. void push_down(int o,int l,int r){
  19. int mid=(l+r)>>1;
  20. chuan(ls(o),l,mid,tag[o]);
  21. chuan(rs(o),mid+1,r,tag[o]);
  22. tag[o]=0;
  23. up(o);
  24. }
  25. void change(int o,int nl,int nr,int l,int r,int k){
  26. if(nl<=l&&nr>=r){
  27. t[o]+=k*(r-l+1);
  28. t[o]%=mod;
  29. tag[o]+=k;
  30. tag[o]%=mod;
  31. return;
  32. }
  33. push_down(o,l,r);
  34. int mid=(l+r)>>1;
  35. if(nl<=mid)change(ls(o),nl,nr,l,mid,k);
  36. if(nr>mid)change(rs(o),nl,nr,mid+1,r,k);
  37. up(o);
  38. }
  39. int query(int o,int nl,int nr,int l,int r){
  40. int ans=0;
  41. if(nl<=l&&nr>=r)return t[o]%mod;
  42. int mid=(l+r)>>1;
  43. push_down(o,l,r);
  44. if(nl<=mid)ans=(ans+query(ls(o),nl,nr,l,mid))%mod;
  45. if(nr>mid) ans=(ans+query(rs(o),nl,nr,mid+1,r))%mod;
  46. return ans%mod;
  47. }
  48. //---------------------线段树---------------------------
  49. struct node{
  50. int nex,to;
  51. }edge[N<<1];
  52. void add(int u,int v){
  53. edge[++tot].nex=h[u];
  54. edge[tot].to=v;
  55. h[u]=tot;
  56. }
  57. //求 fa,dep,size,son(重儿子)
  58. void dfs1(int x,int f,int depth){
  59. fa[x]=f;dep[x]=depth;siz[x]=1;
  60. for(int i=h[x];i;i=edge[i].nex){
  61. int xx=edge[i].to;
  62. if(dep[xx])continue;
  63. dfs1(xx,x,depth+1);
  64. siz[x]+=siz[xx];
  65. if(son[x]==-1||siz[xx]>siz[son[x]])son[x]=xx;
  66. }
  67. }
  68. //求 dfn,tid,top;
  69. void dfs2(int x,int tp){
  70. dfn[x]=++num;tid[num]=x;top[x]=tp;
  71. if(son[x]==-1)return;
  72. dfs2(son[x],tp);
  73. for(int i=h[x];i;i=edge[i].nex){
  74. int xx=edge[i].to;
  75. if(dfn[xx])continue;
  76. dfs2(xx,xx);
  77. }
  78. }
  79. int ask_path(int x,int y){
  80. int ans=0;
  81. int fx=top[x],fy=top[y];
  82. while(fx!=fy){
  83. if(dep[fx]>dep[fy]){
  84. ans+=query(1,dfn[fx],dfn[x],1,n);
  85. ans%=mod;
  86. x=fa[fx];
  87. }
  88. else {
  89. ans+=query(1,dfn[fy],dfn[y],1,n);
  90. ans%=mod;
  91. y=fa[fy];
  92. }
  93. fx=top[x];fy=top[y];
  94. }
  95. if(dfn[x]>dfn[y])swap(x,y);
  96. ans+=query(1,dfn[x],dfn[y],1,n);
  97. ans%=mod;
  98. return ans%mod;
  99. }
  100. void update(int x,int y,int z){
  101. int fx=top[x],fy=top[y];
  102. while(fx!=fy){
  103. if(dep[fx]>dep[fy]){
  104. change(1,dfn[fx],dfn[x],1,n,z);
  105. x=fa[fx];
  106. }
  107. else {
  108. change(1,dfn[fy],dfn[y],1,n,z);
  109. y=fa[fy];
  110. }
  111. fx=top[x];fy=top[y];
  112. }
  113. if(dfn[x]>dfn[y])swap(x,y);
  114. change(1,dfn[x],dfn[y],1,n,z);
  115. }
  116. //query(1,dfn[x],dfn[x]+siz[x]-1,1,n)子树操作

34.倍增Floyed

  1. struct Mar{
  2. ll a[N][N];
  3. Mar(){memset(a,0x3f,sizeof(a));}
  4. };
  5. Mar e,ans;
  6. Mar cheng(R Mar a,R Mar b){
  7. Mar c;
  8. for(R int k=1;k<=tot;k++)
  9. for(R int i=1;i<=tot;i++)
  10. for(R int j=1;j<=tot;j++)
  11. c.a[i][j]=min(c.a[i][j],a.a[i][k]+b.a[k][j]);
  12. return c;
  13. }
  14. Mar ksm(R Mar x,ll y){
  15. ans=x;
  16. while(y){
  17. if(y&1)ans=cheng(ans,x);
  18. x=cheng(x,x);
  19. y>>=1;
  20. }
  21. }
  22. int main(){
  23. read(n);read(m);read(s);read(t);
  24. for(R int i=1,w,u,v;i<=m;i++){
  25. read(w);read(u);read(v);
  26. if(!vis[u])vis[u]=++tot;
  27. if(!vis[v])vis[v]=++tot;
  28. e.a[vis[u]][vis[v]]=e.a[vis[v]][vis[u]]=w;
  29. }
  30. ksm(e,n-1);
  31. printf("%lld\n",ans.a[vis[s]][vis[t]]);
  32. return 0;
  33. }

35.A*(K短路)

  1. int n,m,s,t,k,tot,ans;
  2. int h1[M],h2[M];
  3. struct bian{
  4. int nex,to,val;
  5. }edge[M],E[M];
  6. struct node{
  7. int f;//f=g+dist 估价函数
  8. int g;//到当前点的路径长度
  9. int from;
  10. bool operator < (node a)const {
  11. if(a.f==f)return g>a.g;
  12. return f>a.f;
  13. }
  14. };
  15. void add(int u,int v,int w){
  16. edge[++tot].nex=h1[u];
  17. edge[tot].to=v;
  18. edge[tot].val=w;
  19. h1[u]=tot;
  20. E[tot].nex=h2[v];
  21. E[tot].to=u;
  22. E[tot].val=w;
  23. h2[v]=tot;
  24. }
  25. struct HeapNode{
  26. int u,d;
  27. bool operator < (const HeapNode & b) const {return d>b.d;}
  28. };
  29. int dist[M];
  30. bool vis[M];
  31. priority_queue<HeapNode> Q;
  32. void dij(int s){
  33. for(int i=1;i<=n;i++)dist[i]=INF;
  34. dist[s]=0; Q.push((HeapNode){s,0});
  35. while(Q.size()){
  36. int x=Q.top().u;Q.pop();
  37. if(vis[x])continue; vis[x]=1;
  38. for(int i=h2[x];i;i=E[i].nex){
  39. int xx=E[i].to;
  40. if(dist[xx]>dist[x]+E[i].val){
  41. dist[xx]=dist[x]+E[i].val;
  42. Q.push( (HeapNode){xx,dist[xx]});
  43. }
  44. }
  45. }
  46. }
  47. int A_star(int s,int t,int k){
  48. if(s==t) return 0; //起点即为终点
  49. if(dist[s]==INF)return -1; //起点无联通
  50. priority_queue<node> q; //优先队列搜索
  51. int cnt=0; //记录第X短路
  52. node tmp={0,0,0},to={0,0,0};
  53. tmp.from=s;
  54. tmp.f=tmp.g+dist[tmp.from];//估价函数
  55. q.push(tmp);
  56. while(!q.empty()){
  57. tmp=q.top();
  58. q.pop();
  59. if(tmp.from==t) cnt++; //到达终点
  60. if(cnt==k)return tmp.g;//现在已经是第K短路
  61. for(int i=h1[tmp.from];i;i=edge[i].nex){
  62. to.from=edge[i].to;
  63. to.g=tmp.g+edge[i].val;
  64. to.f=to.g+dist[to.from];
  65. q.push(to);
  66. }
  67. }
  68. return -1;
  69. }
  70. int main()
  71. {
  72. n=read();m=read();
  73. for(int i=1;i<=m;i++){
  74. int u,v,w;
  75. u=read();v=read();w=read();
  76. add(u,v,w);
  77. }
  78. s=read();t=read();k=read();
  79. dij(t); //反向边跑最短路
  80. ans=A_star(s,t,k);
  81. printf("%d",ans);
  82. return 0;
  83. }

end.对拍

  1. @echo off
  2. :loop
  3. echo noip2018 rp++
  4. data.exe>data.txt
  5. a.exe<data.txt>a.txt
  6. b.exe<data.txt>b.txt
  7. fc a.txt b.txt
  8. if not errorlevel 1 goto loop
  9. pause
  10. goto loop

ex

  1. next_permutation(a+1,a+1+n);

NOIP前的模板的更多相关文章

  1. NOIP前的模板复习和注意事项

    联赛除去今天刚好只有一个星期了,最后一个星期也很关键,要吃好睡好保持心情愉悦.当然也免不了最后的复习计划. 首先是模板,之前还有很多模板没有复习到,这些东西是一定要落实到位的. 每天往后面写一点... ...

  2. Noip前的大抱佛脚----Noip真题复习

    Noip前的大抱佛脚----Noip真题复习 Tags: Noip前的大抱佛脚 Noip2010 题目不难,但是三个半小时的话要写四道题还是需要码力,不过按照现在的实力应该不出意外可以AK的. 机器翻 ...

  3. Noip前的大抱佛脚----字符串

    目录 字符串 经验 用FFT求解字符串匹配问题 两(多)串DP时状态合并 最长公共子序列转LIS 位运算最大值 挂链哈希 哈希处理回文串 树哈希 字符串模板库 KMP 最小循环表示 Mancher A ...

  4. Noip前的大抱佛脚----数论

    目录 数论 知识点 Exgcd 逆元 gcd 欧拉函数\(\varphi(x)\) CRT&EXCRT BSGS&EXBSGS FFT/NTT/MTT/FWT 组合公式 斯特林数 卡塔 ...

  5. Noip前的大抱佛脚----图论

    目录 图论 知识点 二分图相关 DFS找环 并查集维护二分图 二分图匹配的不可行边 最小生成树相关 最短路树 最短路相关 负环 多源最短路 差分约束系统 01最短路 k短路 网络流 zkw费用流 做题 ...

  6. Noip前的大抱佛脚----数据结构

    目录 数据结构 知识点及其应用 线段树 神奇标记 标记不下放 并查集 维护二分图 维护后继位置 堆 可并堆的可持久化 dsu on tree 方式&原理 适用范围 单调队列 尺取合法区间 模板 ...

  7. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  8. NOIP前的一些计划

    一些想法 距离NOIP2018只剩下一个星期的时间了,通过这几天在长郡的考试,渐渐感觉还有好多东西自己还不够熟练,也有些东西到现在还不会,现将NOIP前的一些计划列在这里,希望能在考前把他们全部完成吧 ...

  9. Noip前的大抱佛脚----文章索引

    Noip前的大抱佛脚----赛前任务 Noip前的大抱佛脚----考场配置 Noip前的大抱佛脚----数论 Noip前的大抱佛脚----图论 Noip前的大抱佛脚----动态规划 Noip前的大抱佛 ...

随机推荐

  1. OceanBase

    OceanBase 编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! OceanBase是一个支持海量数据的高性能分布式数据库系统,实现了 数千亿条记录.数百TB数据上的 ...

  2. 543. Diameter of Binary Tree 二叉树的最大直径

    [抄题]: Given a binary tree, you need to compute the length of the diameter of the tree. The diameter ...

  3. 19-字符切割函数c++模板

    https://www.cnblogs.com/stonebloom-yu/p/6542756.html #include <cstring> #include <cstdio> ...

  4. freemaker 优缺点 及 应用配置

    通俗的讲,freemaker其实就是一个模板引擎.什么意思呢?——Java可以基于依赖库,然后在模板上进行数据更改(显示). 在模板中,您专注于如何呈现数据,而在模板外(后台业务代码),您将专注于呈现 ...

  5. Texstudio

    Texstudio快捷键:Ctrl+T,选中之后按这个可以快速注释

  6. 2 Python之编程语言介绍及变量

    一: 编程语言介绍 1.机器语言 直接用二进制编程,直接控制硬件,需要掌握硬件的操作细节 优点:执行效率高 缺点:开发效率低 2 汇编语言: 用英文标签取代二级制指令去编写程序,直接控制硬件,需要掌握 ...

  7. [GO]通过结构体生成json

    package main import ( "encoding/json" "fmt" ) type IT struct { //一定要注意这里的成员变量的名字 ...

  8. 快捷生成getter和setter方法

    选中要生成的名称 shift+alt快捷弹出选款,然后箭头下,然后Alt+A,点击ok

  9. javascript总结44: DOM对象的dataset属性方式

    1 DOM设置属性的特殊方式: DOM对象的dataset属性方式获取data-xxx方式定义的属性 由于我们经常需要在标签上自定义属性来存储数据或状态,但是如果用传统的方式操作起来比较繁琐,而且不熟 ...

  10. javascrip总结42:属性操作案例: 点击盒子,改变盒子的位置和背景颜色

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...