\([NOIp2014]\) 螺旋矩阵

\(Sol\)

直接模拟,一次走一整行或者一整列.复杂度\(O(n)\).

\(Code\)

  1. #include<bits/stdc++.h>
  2. #define il inline
  3. #define Ri register int
  4. #define go(i,a,b) for(Ri i=a;i<=b;++i)
  5. #define yes(i,a,b) for(Ri i=a;i>=b;--i)
  6. #define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
  7. #define mem(a,b) memset(a,b,sizeof(a))
  8. #define ll long long
  9. #define db double
  10. #define inf 2147483647
  11. using namespace std;
  12. il int read()
  13. {
  14. Ri x=0,y=1;char c=getchar();
  15. while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
  16. while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
  17. return x*y;
  18. }
  19. int n,s,x,z,y,nx,ny,tx,ty,nd,ex,ey,nw;
  20. il bool ck()
  21. {
  22. Ri x1=nx,x2=tx,y1=ny,y2=ty;
  23. if(x1>x2)swap(x1,x2);if(y1>y2)swap(y1,y2);
  24. return (ex>=x1 && ex<=x2 && ey>=y1 && ey<=y2);
  25. }
  26. il int calc(){return abs(nx-ex)+abs(ny-ey);}
  27. int main()
  28. {
  29. n=read(),ex=read(),ey=read();
  30. if(ex==1 && ey==1){printf("1\n");return 0;}
  31. nx=ny=nd=1;nw=1;
  32. while(nd<=n*n)
  33. {
  34. if(nw==1){tx=nx,ty=n-y;++s;}
  35. if(nw==2){tx=n-x,ty=ny;++y;}
  36. if(nw==3){tx=nx,ty=z+1;++x;}
  37. if(nw==4){tx=s+1,ty=ny;++z;}
  38. if(ck()){printf("%d\n",nd+calc());break;}
  39. nd+=abs(nx-tx)+abs(ny-ty);nx=tx,ny=ty;++nw;if(nw>4)nw=1;
  40. }
  41. return 0;
  42. }

\([NOIp2014]\)子矩阵

\(Sol\)

朴素地搜索可以获得\(80pts\).想想搜索的优化其实并不多(其实是我会的很少).所以这题可以直接记忆化搜索.具体来说,先把要选的行搜出来,然后搜要选的列的时候记忆化就行.

\(upd:\)似乎搜行的时候也可以记忆化.不过搜列记忆化足以通过此题.

\(Code\)

  1. #include<bits/stdc++.h>
  2. #define il inline
  3. #define Ri register int
  4. #define go(i,a,b) for(Ri i=a;i<=b;++i)
  5. #define yes(i,a,b) for(Ri i=a;i>=b;--i)
  6. #define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
  7. #define mem(a,b) memset(a,b,sizeof(a))
  8. #define ll long long
  9. #define db double
  10. #define inf 2100000000
  11. using namespace std;
  12. il int read()
  13. {
  14. Ri x=0,y=1;char c=getchar();
  15. while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
  16. while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
  17. return x*y;
  18. }
  19. const int N=20;
  20. int n,m,r,c,a[N][N],b[N],d[N],as=inf,ct,f[20][20];
  21. il void init(){mem(f,-1);}
  22. il int dfs2(Ri nw,Ri lst,Ri sum)
  23. {
  24. if(nw>r)return 0;
  25. Ri ret=inf;
  26. if(f[nw][lst]!=-1)return f[nw][lst];
  27. go(i,lst+1,n-r+nw)
  28. {
  29. d[nw]=i;Ri tmp=0;bool fl=1;
  30. go(j,2,c){tmp+=abs(a[i][b[j]]-a[i][b[j-1]]);if(tmp>=as){fl=0;break;}}
  31. if(!fl)continue;
  32. if(nw!=1)go(j,1,c){tmp+=abs(a[i][b[j]]-a[d[nw-1]][b[j]]);if(tmp>=as){fl=0;break;}}
  33. if(!fl)continue;
  34. ret=min(ret,dfs2(nw+1,i,tmp)+tmp);
  35. }
  36. return f[nw][lst]=ret;
  37. }
  38. il void dfs1(Ri nw,Ri lst)
  39. {
  40. if(nw>c){init();as=min(dfs2(1,0,0),as);return;}
  41. go(i,lst+1,m-c+nw)
  42. b[nw]=i;dfs1(nw+1,i);
  43. }
  44. int main()
  45. {
  46. n=read(),m=read(),r=read(),c=read();
  47. go(i,1,n)go(j,1,m)a[i][j]=read();
  48. dfs1(1,0);
  49. printf("%d\n",as);
  50. return 0;
  51. }

\([NOIp2015]\) 推销员

\(Sol\)

一个比较直接的想法是对于每个询问,枚举走得最远的位置,然后其他的直接选(这里可以用线段树维护一下)....这样做的复杂度大约是\(O(n^2logn)\),获得\(60pts\)问题不大.

这样考虑:先直接选择\(A_i\)前\(X\)大的.然后尝试舍去第\(X\)大的\(A_i\)来选择一个更远的.设选\(A_i\)前\(X\)大的贡献是\(\sum A+D*2\),现在要舍弃\(x\)来换取\(y\),那么这样做可以使得贡献增加\((D_y-D)*2-A_x+A_y\).选取一个贡献最大的即可.实际上只要选取\(D_y*2+A_y\)最大的即可,这样可以直接用一个数组维护.

\(Code\)

  1. #include<bits/stdc++.h>
  2. #define il inline
  3. #define Ri register int
  4. #define go(i,a,b) for(Ri i=a;i<=b;++i)
  5. #define yes(i,a,b) for(Ri i=a;i>=b;--i)
  6. #define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
  7. #define mem(a,b) memset(a,b,sizeof(a))
  8. #define ll long long
  9. #define db double
  10. #define inf 2147483647
  11. using namespace std;
  12. il int read()
  13. {
  14. Ri x=0,y=1;char c=getchar();
  15. while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
  16. while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
  17. return x*y;
  18. }
  19. const int N=100010;
  20. int n,ct,sa[N],maxd[N],maxf[N];
  21. struct nd{int a,d;}t[N];
  22. il bool cmp1(nd x,nd y){return x.d<y.d;}
  23. il bool cmp(nd x,nd y){return x.a>y.a;}
  24. int main()
  25. {
  26. n=read();
  27. go(i,1,n)t[i].d=read();
  28. go(i,1,n)t[i].a=read();
  29. sort(t+1,t+n+1,cmp);
  30. go(i,1,n)if(t[i].a==0){n=i-1;break;}
  31. go(i,1,n)sa[i]=sa[i-1]+t[i].a,maxd[i]=max(maxd[i-1],t[i].d);
  32. yes(i,n,1)maxf[i]=max(maxf[i+1],t[i].d*2+t[i].a);
  33. go(i,1,n)printf("%lld\n",max(sa[i]+maxd[i]*2,sa[i-1]+maxf[i+1]));
  34. return 0;
  35. }

\([NOIp2015]\)求和

\(Sol\)

简化下题意,纸带的分数是:\(\sum_{i<j,(j-i)\&1=0}(i+j)(num_i+num_j)\).

直接枚举相同颜色的\(i,j\),\(check\ (j-i)\)是否为偶数累加答案,可以获得\(80pts\).如果可以省去\(check()\)这一步就好了.其实可以按照奇偶分组,同一组内,只要颜色相同就可以对答案产生贡献.

假设\([l,r]\)区间都是一种颜色,答案累加:

\(\sum_{i=l}^{r}\sum _{j=i+1}^r(i+j)(num_i+num_j)\)

\(=\sum_{i=l}^r i*num_i*(r-l-1)+\sum_{i=l}^{r}\sum _{j=i}^r i*num_j\)

\(=\sum_{i=l}^r i*num_i*(r-l-1)+\sum_{i=l}^{r}i *\sum_{i=l}^r num_i\)

注意特判\(l=r\)的情况.

\(Code\)

  1. #include<bits/stdc++.h>
  2. #define il inline
  3. #define Ri register int
  4. #define go(i,a,b) for(Ri i=a;i<=b;++i)
  5. #define ll long long if(ct>1)as+=1LL*s3*(ct-2)%mod+1LL*s1*s2%mod;as%=mod;s1=s2=s3=ct=0;
  6. using namespace std;
  7. il int read()
  8. {
  9. Ri x=0,y=1;char c=getchar();
  10. while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
  11. while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
  12. return x*y;
  13. }
  14. const int N=100010,mod=10007;
  15. int n,m,as,n1,n2;
  16. struct nd{int num,col,pos;}a[N],b[N];
  17. il bool cmp(nd x,nd y){return x.col<y.col;}
  18. int main()
  19. {
  20. freopen("1.in","r",stdin);
  21. n=read(),m=read();
  22. go(i,1,n)if(i&1)a[++n1].num=read(),a[n1].pos=i;else b[++n2].num=read(),b[n2].pos=i;
  23. n1=n2=0;
  24. go(i,1,n)if(i&1)a[++n1].col=read();else b[++n2].col=read();
  25. sort(a+1,a+n1+1,cmp);sort(b+1,b+n2+1,cmp);
  26. Ri s1=0,s2=0,s3=0,ct=0;
  27. go(i,1,n1)
  28. {
  29. s1+=a[i].num,s2+=a[i].pos,s3+=1LL*a[i].num*a[i].pos%mod,++ct;
  30. s1%=mod,s2%=mod,s3%=mod;
  31. if(a[i].col==a[i+1].col)continue;
  32. if(ct>1)as+=1LL*s3*(ct-2)%mod+1LL*s1*s2%mod;as%=mod;s1=s2=s3=ct=0;
  33. }
  34. s1=s2=s3=ct=0;
  35. go(i,1,n2)
  36. {
  37. s1+=b[i].num,s2+=b[i].pos,s3+=1LL*b[i].num*b[i].pos%mod,++ct;
  38. s1%=mod,s2%=mod,s3%=mod;
  39. if(b[i].col==b[i+1].col)continue;
  40. if(ct>1)as+=1LL*s3*(ct-2)%mod+1LL*s1*s2%mod;as%=mod;s1=s2=s3=ct=0;
  41. }
  42. printf("%d\n",as);
  43. return 0;
  44. }

\([NOIp2016]\)海港

\(Sol\)

开一个队列存以当前时间为结束的\(24\)小时内到达的游客(包括时间和国际).一个数组\(s[i]\)表示当前队列中国籍为\(i\)的游客有多少.一个变量\(nw\)记录当前队列中有多少不同国籍的游客.因为保证输入时间是递增的可以在线做,没必要离线做.每次来了一条新船,就把队首时间不合法的游客移除,顺便维护下\(s[i]\),如果有\(s[i]\)因此变为\(0\)了,那么就\(--nw\).然后在队尾加入这条船的游客,维护$s[i] \(,若有\)s[i]$因此变为\(1\),那么\(++nw\).最后直接输出\(nw\),进入下一次循环即可.

\(Code\)

  1. #include<bits/stdc++.h>
  2. #define il inline
  3. #define Ri register int
  4. #define go(i,a,b) for(Ri i=a;i<=b;++i)
  5. using namespace std;
  6. il int read()
  7. {
  8. Ri x=0,y=1;char c=getchar();
  9. while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
  10. while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
  11. return x*y;
  12. }
  13. const int N=100010;
  14. int n,ct,q[N*3],l=1,r,s[N*3],nw;
  15. struct nd{int t,k;}a[N*3];
  16. int main()
  17. {
  18. n=read();
  19. go(i,1,n)
  20. {
  21. Ri t=read(),k=read();
  22. go(i,1,k)
  23. {
  24. Ri kk=read();
  25. a[++ct]=(nd){t,kk};q[++r]=ct;
  26. ++s[kk];if(s[kk]==1)++nw;
  27. }
  28. while(a[q[l]].t<=t-86400){if(!(--s[a[q[l]].k]))--nw;++l;}
  29. printf("%d\n",nw);
  30. }
  31. return 0;
  32. }

\([NOIp2017]\) 棋盘 ​

$Sol $

看起来十分像一道搜索题.需要记录地状态:当前在哪一个格子,已经花费多少金币,当前可不可以使用魔法.还要标记走过的格子.这样没有任何剪枝地搜就可以获得\(55pts\)的好成绩.

加一个最优性剪枝就可以多获得\(10pts\).

记一个\(rem[i][j]\)表示从\((1,1)\)到\((i,j)\)这个点花的最小代价,如果再搜到这里的时候代价大于它,那么就\(return\).这样做不仅可以剪枝,而且还可以少记一个\(vis\),于是少维护\(vis\)又可以加快速度.

\(upd\):这样做当且仅当再走到这里的时候代价一定大于原来的情况,可是这题不一定叭?假如有一个同颜色的环,这样还是会死循环下去.

\(再upd\),其实这里是可以按上面的做法的,只是一定是代价大于等于的时候\(return\),而且这样的话一定不可以记\(vis\).

另外一个要注意的点(特别是如果要维护$vis \(的话):不优的情况与其\)dfs\(下去再判掉不如**在\)dfs$之前就判掉.**

\(Code\)

  1. #define il inline
  2. #define Ri register int
  3. #define go(i,a,b) for(Ri i=a;i<=b;++i)
  4. #define yes(i,a,b) for(Ri i=a;i>=b;--i)
  5. #define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
  6. #define mem(a,b) memset(a,b,sizeof(a))
  7. #define ll long long
  8. #define db double
  9. #define inf 2147483647
  10. using namespace std;
  11. il int read()
  12. {
  13. Ri x=0,y=1;char c=getchar();
  14. while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
  15. while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
  16. return x*y;
  17. }
  18. const int N=110;
  19. int m,n,col[N][N],dx[4]={1,0,-1,0},dy[4]={0,1,0,-1},as=inf,rem[N][N];
  20. il void dfs(Ri nx,Ri ny,Ri color,Ri sum,bool mag)
  21. {
  22. if(sum>=as)return;
  23. if(nx==ny && nx==m){as=min(as,sum);return;}
  24. rem[nx][ny]=sum;
  25. go(i,0,3)
  26. {
  27. Ri tx=nx+dx[i],ty=ny+dy[i];
  28. if(tx<1 || tx>m || ty<1 || ty>m)continue;
  29. if(col[tx][ty])
  30. {
  31. if(col[tx][ty]==color && (rem[tx][ty]==-1 || sum<rem[tx][ty]))
  32. {dfs(tx,ty,col[tx][ty],sum,1);}
  33. else if(rem[tx][ty]==-1 || sum+1<rem[tx][ty])
  34. {dfs(tx,ty,col[tx][ty],sum+1,1);}
  35. }
  36. else if(mag && (rem[tx][ty]==-1 || sum<rem[tx][ty]))
  37. {dfs(tx,ty,color,sum+2,0);}
  38. }
  39. }
  40. int main()
  41. {
  42. m=read(),n=read();mem(rem,-1);
  43. go(i,1,n){Ri x=read(),y=read(),c=read();col[x][y]=c+1;}
  44. dfs(1,1,col[1][1],0,1);
  45. if(as==inf)as=-1;
  46. printf("%d\n",as);
  47. return 0;
  48. }

\([NOIp2017]\) 跳房子 ​

\(Sol\)

首先判断有无解就是把所有的分数加起来与\(k\)比较.

部分分是可以搜索的,就搜索出依次跳到哪些格子可以至少获得\(k\)分,然后统计一下答案就可以了.这样就获得了\(20pts\).

觉得可以\(dp.jpg\).

\(f[i][j]\)表示前\(i\)个格子,且选了第\(i\)个格子,花费\(j\)改进,可以获得的最大价值.

\(f[i][j]=max (f[k][g])+a[i],k<i\ 且\ abs(x[i]-x[k]-d)<=j且g<=j\).

然后\(max(f[k][g])\)这里可以用单调队列优化一下?

然而这样并不足以\(AC\),时间空间上都有问题.如果能在\(f\)上省去一维就好了.真的不会,于是去看了题解.

理解题解之后的:其实上述\(dp\)的第二维相当于在枚举最小花费,又应为最小花费显然可以二分.所以简单来说:首先二分最小花费,然后对这个最小花费\(dp\),最后统计答案.\(over\).

\(QwQ\)

写代码自闭了,真的要仔仔细细认认真真地思考一遍再写代码吖.几乎每次对代码掉以轻心,觉得直接写就好了的时候就会卡很久,到处出错,实际花的时间多得多.别忘了你是个菜鸡啊!写代码要沉着,冷静,放慢速度.

\(Code\)

  1. #include<bits/stdc++.h>
  2. #define il inline
  3. #define Ri register int
  4. #define go(i,a,b) for(Ri i=a;i<=b;++i)
  5. #define yes(i,a,b) for(Ri i=a;i>=b;--i)
  6. #define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
  7. #define mem(a,b) memset(a,b,sizeof(a))
  8. #define ll long long
  9. #define inf 2147483647
  10. using namespace std;
  11. il int read()
  12. {
  13. Ri x=0,y=1;char c=getchar();
  14. while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
  15. while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
  16. return x*y;
  17. }
  18. const int N=500010;
  19. int n,d,k,x[N],s[N],f[N],as=inf,L,R,mid,q[N];
  20. il bool Ck()
  21. {
  22. ll sum=0;Ri las=0;
  23. yes(i,n,1)if(s[i]>0){sum+=s[i];R=max(R,abs(x[i]-x[las]-d));las=i;};
  24. return (sum>=k);
  25. }
  26. il bool ck(Ri g)
  27. {
  28. go(i,1,n)f[i]=-inf;f[0]=0;
  29. Ri l=1,r=0,las=0;
  30. go(i,1,n)
  31. {
  32. while(l<=r && x[q[l]]<x[i]-d-g)l++;
  33. while(las<=n && x[las]<x[i]-d-g)las++;
  34. while(las<i && x[las]<=x[i]-d+g )
  35. {
  36. if(f[las]==-inf){++las;continue;}
  37. while(l<=r && f[q[r]]<=f[las])r--;
  38. q[++r]=las;++las;
  39. }
  40. if(l<=r)f[i]=f[q[l]]+s[i];
  41. if(f[i]>=k)return 1;
  42. }
  43. return 0;
  44. }
  45. int main()
  46. {
  47. n=read(),d=read(),k=read();
  48. go(i,1,n)x[i]=read(),s[i]=read();
  49. if(!Ck()){printf("-1\n");return 0;}
  50. while(L<=R)
  51. {
  52. mid=(L+R)>>1;
  53. if(ck(mid))as=mid,R=mid-1;
  54. }
  55. printf("%d\n",as);
  56. return 0;
  57. }

\([NOIp2018]\)对称二叉树

\(Sol\)

最初以为只要中序遍历是回文串就是对称二叉树,于是写了下只有\(64pts\).其实上面那个结论错得挺显然的.应该是这样的:首先是根的左孩子和右孩子相等,然后左孩子的左孩子和右孩子的右孩子相等,左孩子的右孩子和右孩子的左孩子相等.....这个可以以每个结点作为根\(check\)一次.本来打算先写个暴力,结果就\(AC\)辣.感觉复杂度似乎是\(O(nlogn)\).

还有个\(O(n)\)的\(hash\)做法,其实我感觉就是我最开始那个回文串做法的改进.可以直接\(hash\)树的形态,举个栗子:一棵三个结点的二叉树\(root,lson,rson\),那么其\(hash\)值为\(lson*bas1+rson*bas2+root*bas3\).要计算两个\(hash\)值,一个是先走左儿子的中序遍历值\(hash1\),一个是先走右儿子的\(hash2\),对于\(root\),若\(hash1[lson]=hash2[rson]\)那么就是对称二叉树.另外,记一下\(TJ\)中用的\(bas\),\(b1=999999751,b2=299999827,b3=100000007,m1=89999794200117649,m2=999999786000011449\).

\(Code\)

  1. #include<bits/stdc++.h>
  2. #define il inline
  3. #define Ri register int
  4. #define go(i,a,b) for(Ri i=a;i<=b;++i)
  5. #define yes(i,a,b) for(Ri i=a;i>=b;--i)
  6. #define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
  7. #define mem(a,b) memset(a,b,sizeof(a))
  8. #define ll long long
  9. #define db double
  10. #define inf 2147483647
  11. using namespace std;
  12. il int read()
  13. {
  14. Ri x=0,y=1;char c=getchar();
  15. while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
  16. while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
  17. return x*y;
  18. }
  19. const int N=1000010;
  20. int n,l[N],r[N],w[N],ct,sz[N],as;
  21. il void dfs(Ri nw)
  22. {
  23. sz[nw]=1;
  24. if(l[nw]>-1)dfs(l[nw]),sz[nw]+=sz[l[nw]];
  25. if(r[nw]>-1)dfs(r[nw]),sz[nw]+=sz[r[nw]];
  26. }
  27. il int ck(Ri x,Ri y)
  28. {
  29. if(x==-1 && y==-1)return 1;
  30. if(x==-1 || y==-1)return 0;
  31. if(w[x]!=w[y])return 0;
  32. if(ck(l[x],r[y]) && ck(r[x],l[y]))return 1;
  33. return 0;
  34. }
  35. int main()
  36. {
  37. n=read();
  38. go(i,1,n)w[i]=read();
  39. go(i,1,n)l[i]=read(),r[i]=read();
  40. dfs(1);
  41. go(i,1,n)if(ck(l[i],r[i]))as=max(as,sz[i]);
  42. printf("%d\n",as);
  43. return 0;
  44. }

\([NOIp2018]\) 摆渡车

随机推荐

  1. git 本地仓库操作

    一.git对象模型和存储 二.常用命令 1)git checkout branch 切换分支 假设现在有两个分支,master和dev分支 i dev分支上没有readme.txt 在master分支 ...

  2. python如何自动发送邮件

    #coding=utf-8 import smtplib from email.mime.text import MIMEText from email.mime.application import ...

  3. iptables 累计(Accounting)

    对於每一条规则,核心各自设置两个专属的计数器,用于累计符合该条件的封包数,以及这些封包的总位元组数.这两项资讯可用於统计网路用量. 举例来說,假设有一台Internet闸道器路,eth0接内部网络,e ...

  4. axios用headers传参,设置请求头token

    新建一个配置文件http.js // 导入axios import axios from 'axios'; // 全局配置默认路由 axios.defaults.baseURL = 'http://1 ...

  5. 从 SGD 到 Adam —— 深度学习优化算法概览(一) 重点

    https://zhuanlan.zhihu.com/p/32626442 骆梁宸 paper插画师:poster设计师:oral slides制作人 445 人赞同了该文章 楔子 前些日在写计算数学 ...

  6. activiti工作流引擎之uel表达式

    qq讨论群:313032825本人做了一个微信公众号,用于分享各类视频学习资源和我多年学习经验,喜欢的可以关注哦! 有了前面几章,我们肯定有一定的困惑,activiti如何与实际业务整合,比如一条采购 ...

  7. oracle用UNION替换OR (适用于索引列)

    通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果. 对索引列使用OR将造成全表扫描. 注意, 以上规则只针对多个索引列有效. 如果有column没有被索引, 查询效率可能会因为你 ...

  8. css技巧 1200px居中容器中某个div增加横屏背景

    <div class='container' style='width:1200px;margin:0 auto;'> <div style='width:200px;margin: ...

  9. 2018-8-10-C#-判断文件编码

    title author date CreateTime categories C# 判断文件编码 lindexi 2018-08-10 19:16:52 +0800 2018-2-13 17:23: ...

  10. 写一个js配合rem

    rem.js 目前笔者解决移动端的尺寸带来的样式问题,都是通过viewport + rem的.viewport 相信大家都用过了,而rem需要用js动态设置html的字体大小. 动态设置rem的根字体 ...