潜入行动

复杂度分析题。

定义状态fi,j,0/1,0/1f_{i,j,0/1,0/1}fi,j,0/1,0/1​表示以iii为根子树放jjj个机器iii这个放不放,iii这个是否已放来进行dpdpdp

可以通过分类讨论证明做树上背包的时间复杂度是O(nk)O(nk)O(nk)的。

代码:

  1. #include<bits/stdc++.h>
  2. #define ri register int
  3. using namespace std;
  4. inline int read(){
  5. int ans=0;
  6. char ch=getchar();
  7. while(!isdigit(ch))ch=getchar();
  8. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
  9. return ans;
  10. }
  11. typedef long long ll;
  12. const int N=1e5+5,M=105,mod=1e9+7;
  13. vector<int>e[N];
  14. int n,K,f[N][M][2][2],g[M][2][2],siz[N];
  15. inline int add(const int&a,const int&b){return a+b>=mod?a+b-mod:a+b;}
  16. inline int dec(const int&a,const int&b){return a>=b?a-b:a-b+mod;}
  17. inline int mul(const int&a,const int&b){return (ll)a*b%mod;}
  18. inline void update(int&a,const int&b){a=add(a,b);}
  19. void dfs(int p,int fa){
  20. siz[p]=1;
  21. f[p][0][0][0]=f[p][1][1][0]=1;
  22. for(ri i=0,v;i<e[p].size();++i){
  23. if((v=e[p][i])==fa)continue;
  24. dfs(v,p);
  25. for(ri j=0,up=min(siz[p],K);j<=up;++j)for(ri k=0;j+k<=K&&k<=siz[v];++k){
  26. if(f[p][j][0][0]){
  27. update(g[j+k][0][0],mul(f[p][j][0][0],f[v][k][0][1]));
  28. update(g[j+k][0][1],mul(f[p][j][0][0],f[v][k][1][1]));
  29. }
  30. if(f[p][j][0][1])update(g[j+k][0][1],mul(f[p][j][0][1],add(f[v][k][0][1],f[v][k][1][1])));
  31. if(f[p][j][1][0]){
  32. update(g[j+k][1][0],mul(f[p][j][1][0],add(f[v][k][0][0],f[v][k][0][1])));
  33. update(g[j+k][1][1],mul(f[p][j][1][0],add(f[v][k][1][0],f[v][k][1][1])));
  34. }
  35. if(f[p][j][1][1])update(g[j+k][1][1],mul(f[p][j][1][1],add(add(f[v][k][0][0],f[v][k][0][1]),add(f[v][k][1][0],f[v][k][1][1]))));
  36. }
  37. siz[p]+=siz[v];
  38. for(ri j=0,up=min(siz[p],K);j<=up;++j){
  39. f[p][j][0][0]=g[j][0][0],g[j][0][0]=0;
  40. f[p][j][0][1]=g[j][0][1],g[j][0][1]=0;
  41. f[p][j][1][0]=g[j][1][0],g[j][1][0]=0;
  42. f[p][j][1][1]=g[j][1][1],g[j][1][1]=0;
  43. }
  44. }
  45. }
  46. int main(){
  47. n=read(),K=read();
  48. for(ri i=1,u,v;i<n;++i)u=read(),v=read(),e[u].push_back(v),e[v].push_back(u);
  49. dfs(1,0);
  50. cout<<add(f[1][K][1][1],f[1][K][0][1]);
  51. return 0;
  52. }

防御网络

根据期望的线性性转化为求每条边的贡献。

桥边直接根据连接的两个连通块的sizesizesize更新答案。

对于一个环把这个环提出来dpdpdp,枚举环上面的最长连续空段和选择的起点终点做dpdpdp,利用前缀和优化可以做到O(n3)O(n^3)O(n3)

代码:

  1. #include<bits/stdc++.h>
  2. #define ri register int
  3. using namespace std;
  4. inline int read(){
  5. int ans=0;
  6. char ch=getchar();
  7. while(!isdigit(ch))ch=getchar();
  8. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
  9. return ans;
  10. }
  11. const int N=205,mod=1e9+7;
  12. typedef long long ll;
  13. inline int add(const int&a,const int&b){return a+b>=mod?a+b-mod:a+b;}
  14. inline int dec(const int&a,const int&b){return a>=b?a-b:a-b+mod;}
  15. inline int mul(const int&a,const int&b){return (ll)a*b%mod;}
  16. inline int ksm(int a,int p){int ret=1;for(;p;p>>=1,a=mul(a,a))if(p&1)ret=mul(ret,a);return ret;}
  17. inline void update(int&a,const int&b){a=add(a,b);}
  18. int n,m,pow2[N],siz[N],fa[N],dep[N],ans=0;
  19. bool ban[N];
  20. vector<int>e[N];
  21. inline void init(){pow2[0]=1;for(ri i=1;i<=n;++i)pow2[i]=mul(pow2[i-1],2);}
  22. inline void solve(int st,int ed){
  23. static int s1[N][N],s2[N][N],q[N],w[N],top;
  24. int p=ed;
  25. q[top=1]=p;
  26. while(p^st)ban[p]=1,q[++top]=(p=fa[p]);
  27. reverse(q+1,q+top+1);
  28. for(ri i=1;i<top;++i)w[i]=dec(pow2[siz[q[i]]-siz[q[i+1]]],1);
  29. w[top]=dec(pow2[siz[q[top]]],1);
  30. w[1]=dec(pow2[n-siz[q[2]]],1);
  31. for(ri l=1;l<top;++l){
  32. for(ri k=0;k<=top;++k)s1[l][k]=w[l];
  33. for(ri r=l+1;r<=top;++r){
  34. for(ri k=1;k<=r-l;++k){
  35. int f=mul(w[r],add(s1[r-k][k],dec(s2[r-1][k],s2[r-k][k])));
  36. update(ans,mul(f,top-max(top-r+l,k)));
  37. s1[r][k]=add(s1[r][k-1],f),s2[r][k]=add(s2[r-1][k],f);
  38. }
  39. for(ri k=r-l+1;k<=top;++k)s1[r][k]=s1[r][k-1],s2[r][k]=s2[r-1][k];
  40. }
  41. }
  42. for(ri i=0;i<=top;++i)for(ri j=0;j<=top;++j)s1[i][j]=s2[i][j]=0;
  43. }
  44. void dfs(int p){
  45. siz[p]=1;
  46. int tmp=0;
  47. for(ri i=0,v;i<e[p].size();++i){
  48. if((v=e[p][i])==fa[p])continue;
  49. if(!dep[v]){fa[v]=p,dep[v]=dep[p]+1,dfs(v),siz[p]+=siz[v];continue;}
  50. if(dep[v]>dep[p])tmp=v;
  51. }
  52. if(tmp)solve(p,tmp);
  53. }
  54. int main(){
  55. n=read(),m=read();
  56. for(ri i=1,u,v;i<=m;++i)u=read(),v=read(),e[u].push_back(v),e[v].push_back(u);
  57. init(),dep[1]=1,dfs(1);
  58. for(ri i=1;i<=n;++i)if(!ban[i])update(ans,mul(dec(pow2[siz[i]],1),dec(pow2[n-siz[i]],1)));
  59. cout<<mul(ans,ksm(pow2[n],mod-2));
  60. return 0;
  61. }

绝地反击

二分答案之后求每个点以这个二分值作为半径跟给出圆的交点,显然会出现nnn段圆弧,只需要看能不能在nnn段中各选一个点构成一个正nnn边形。

直接枚举正nnn边形的某一个起点可以做到O(n4logn)O(n^4log_n)O(n4logn​)

然后我们把所有的弧都模上2πn\frac{2\pi}nn2π​,这样来枚举起点是等价的。

但是我们发现由于起点挪动的距离不超过2πn\frac{2\pi}nn2π​,因此每次挪动最多有一个点对从不可行变成可行,最多有一个点对icon个可行变成不可行。

因此我们用扫描线优化这个过程可以做到O(n3logn)O(n^3log_n)O(n3logn​)

代码:

  1. #include<bits/stdc++.h>
  2. #define ri register int
  3. using namespace std;
  4. inline int read(){
  5. int ans=0;
  6. bool f=1;
  7. char ch=getchar();
  8. while(!isdigit(ch))f^=ch=='-',ch=getchar();
  9. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
  10. return f?ans:-ans;
  11. }
  12. const int N=605,M=2e6+5;
  13. const double pi=acos(-1.0),eps=1e-7;
  14. struct pot{
  15. double x,y;
  16. pot(double _x=0,double _y=0):x(_x),y(_y){}
  17. inline double mod(){return sqrt(x*x+y*y);}
  18. }a[N];
  19. int n;
  20. double R,du;
  21. namespace Dinic{
  22. int d[N],s,t,first[N],cnt,F;
  23. struct edge{int v,next,c;}e[M];
  24. struct Node{
  25. double ang;
  26. int s,t,type;
  27. Node(double _ang=0,int _s=0,int _t=0,int _type=0):ang(_ang),s(_s),t(_t),type(_type){}
  28. friend inline bool operator<(const Node&a,const Node&b){return a.ang==b.ang?a.type>b.type:a.ang<b.ang;}
  29. }seq[N];
  30. inline void init(){cnt=-1,s=0,t=n*2+1,F=0;}
  31. inline void addedge(int u,int v,int c){e[++cnt].v=v,e[cnt].c=c,e[cnt].next=first[u],first[u]=cnt;}
  32. inline void add(int u,int v,int c){addedge(u,v,c),addedge(v,u,0);}
  33. inline bool bfs(){
  34. static int q[N],hd,tl;
  35. for(ri i=s;i<=t;++i)d[i]=-1;
  36. d[q[hd=tl=1]=s]=0;
  37. while(hd<=tl){
  38. int x=q[hd++];
  39. for(ri v,i=first[x];~i;i=e[i].next){
  40. if(!e[i].c||~d[v=e[i].v])continue;
  41. d[q[++tl]=v]=d[x]+1;
  42. }
  43. }
  44. return ~d[t];
  45. }
  46. inline int dfs(int x,int f){
  47. if(!f||x==t)return f;
  48. int flow=f;
  49. for(ri tmp,i=first[x],v;~i;i=e[i].next){
  50. if(!flow)return f;
  51. if(e[i].c&&d[v=e[i].v]==d[x]+1){
  52. tmp=dfs(v,min(flow,e[i].c));
  53. if(!tmp)d[v]=-1;
  54. flow-=tmp,e[i].c-=tmp,e[i^1].c+=tmp;
  55. }
  56. }
  57. return f-flow;
  58. }
  59. inline void solve(){while(bfs())F+=dfs(s,0x3f3f3f3f);}
  60. inline void popflow(int x,int y){
  61. bool f=0;
  62. for(ri i=first[x];~i;i=e[i].next)if(e[i].v==y){e[i].c?f=1:--F,e[i].c=e[i^1].c=0;break;}
  63. if(f)return;
  64. for(ri i=first[s];~i;i=e[i].next)if(e[i].v==x){e[i].c=1,e[i^1].c=0;break;}
  65. for(ri i=first[y];~i;i=e[i].next)if(e[i].v==t){e[i].c=1,e[i^1].c=0;break;}
  66. while(bfs())F+=dfs(s,0x3f3f3f3f);
  67. }
  68. inline bool check(const double&lim){
  69. static int top;
  70. F=0,cnt=-1,top=0;
  71. for(ri i=s;i<=t;++i)first[i]=-1;
  72. double d,ang,det,bigang,smallang;
  73. for(ri tl,tr,i=1;i<=n;++i){
  74. d=a[i].mod();
  75. if(lim<=R-d||lim<=d-R)return 0;
  76. if(R+d<=lim)for(ri j=1;j<=n;++j)add(i,j+n,1);
  77. else{
  78. ang=atan2(a[i].y,a[i].x);
  79. det=acos((d*d+R*R-lim*lim)/(d*R*2));
  80. smallang=ang-det,bigang=ang+det;
  81. while(smallang<0)smallang+=pi*2;
  82. while(bigang<0)bigang+=pi*2;
  83. tl=smallang/du,tr=bigang/du;
  84. smallang-=du*tl,bigang-=du*tr;
  85. ++tl,++tr;
  86. seq[++top]=(Node){smallang,i,tl,1};
  87. seq[++top]=(Node){bigang,i,tr,-1};
  88. if(tl<=tr)for(ri j=tl+1;j<=tr;++j)add(i,j+n,1);
  89. else{
  90. for(ri j=1;j<=tr;++j)add(i,j+n,1);
  91. for(ri j=tl+1;j<=n;++j)add(i,j+n,1);
  92. }
  93. }
  94. }
  95. sort(seq+1,seq+top+1);
  96. for(ri i=1;i<=n;++i)add(s,i,1),add(i+n,t,1);
  97. solve();
  98. if(F==n)return 1;
  99. for(ri i=1;i<=top;++i){
  100. if(~seq[i].type){
  101. add(seq[i].s,seq[i].t+n,1);
  102. while(bfs())F+=dfs(s,0x3f3f3f3f);
  103. if(F==n)return 1;
  104. }
  105. else popflow(seq[i].s,seq[i].t+n);
  106. }
  107. return 0;
  108. }
  109. }
  110. int main(){
  111. n=read(),R=read(),du=pi*2/n,Dinic::init();
  112. double l=0,r=400;
  113. for(ri i=1;i<=n;++i)a[i].x=read(),a[i].y=read();
  114. while(r-l>=eps){
  115. double mid=(l+r)/2;
  116. if(Dinic::check(mid))r=mid;
  117. else l=mid;
  118. }
  119. printf("%.8lf",l);
  120. return 0;
  121. }

部落战争

题解戳这儿,其实就是求凸包的Minkowski和。

代码:

  1. #include<bits/stdc++.h>
  2. #define int long long
  3. #define ri register int
  4. using namespace std;
  5. inline int read(){
  6. int ans=0;
  7. bool f=1;
  8. char ch=getchar();
  9. while(!isdigit(ch)){if(ch=='-')f^=1;ch=getchar();}
  10. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
  11. return f?ans:-ans;
  12. }
  13. typedef long long ll;
  14. const int N=2e5+5;
  15. struct pot{
  16. ll x,y;
  17. pot(ll _x=0,ll _y=0):x(_x),y(_y){};
  18. friend inline pot operator+(const pot&a,const pot&b){return pot(a.x+b.x,a.y+b.y);}
  19. friend inline pot operator-(const pot&a,const pot&b){return pot(a.x-b.x,a.y-b.y);}
  20. friend inline ll operator^(const pot&a,const pot&b){return a.x*b.y-a.y*b.x;}
  21. friend inline bool operator<(const pot&a,const pot&b){return a.x==b.x?a.y<b.y:a.x<b.x;}
  22. inline ll mod(){return x*x+y*y;}
  23. }A[N<<1],a1[N],a2[N];
  24. inline void graham(pot a[],int&n){
  25. static int q[N],top;
  26. static pot b[N];
  27. sort(a+1,a+n+1);
  28. q[top=1]=1;
  29. for(ri i=2;i<=n;++i){
  30. while(top>1&&((a[i]-a[q[top-1]])^(a[q[top]]-a[q[top-1]]))<=0)--top;
  31. q[++top]=i;
  32. }
  33. for(ri len=top,i=n-1;i;--i){
  34. while(top>len&&((a[i]-a[q[top-1]])^(a[q[top]]-a[q[top-1]]))<=0)--top;
  35. q[++top]=i;
  36. }
  37. n=top;
  38. for(ri i=1;i<=n;++i)b[i]=a[q[i]];
  39. for(ri i=1;i<=n;++i)a[i]=b[i];
  40. }
  41. inline void Minkowski(pot a[],int&tot,pot x[],int n,pot y[],int m){
  42. static int pa,pb;
  43. --n,--m;
  44. a[tot=1]=x[pa=1]+y[pb=1];
  45. while(pa<=n&&pb<=m){
  46. pot ta=x[pa+1]-x[pa],tb=y[pb+1]-y[pb];
  47. ++tot;
  48. ll tmp=ta^tb;
  49. if(!tmp)a[tot]=a[tot-1]+ta+tb,++pa,++pb;
  50. else if(tmp<=0)a[tot]=a[tot-1]+ta,++pa;
  51. else a[tot]=a[tot-1]+tb,++pb;
  52. }
  53. while(pa<=n)++tot,a[tot]=a[tot-1]+x[pa+1]-x[pa],++pa;
  54. while(pb<=m)++tot,a[tot]=a[tot-1]+y[pb+1]-y[pb],++pb;
  55. --tot;
  56. graham(a,tot);
  57. --tot;
  58. }
  59. int n,m,len,q;
  60. inline bool check(const pot&p){
  61. if(((p-A[1])^(A[len]-A[1]))>0)return 0;
  62. if(((p-A[1])^(A[2]-A[1]))<0)return 0;
  63. int l=2,r=len-1,ans=2;
  64. while(l<=r){
  65. int mid=l+r>>1;
  66. ll tmp=(p-A[1])^(A[mid]-A[1]);
  67. if(!tmp)return (p-A[1]).mod()<=(A[mid]-A[1]).mod();
  68. if(tmp>0)l=mid+1,ans=mid;
  69. else r=mid-1;
  70. }
  71. ll tmp=(p-A[ans])^(A[ans+1]-A[ans]);
  72. if(!tmp)return (p-A[ans]).mod()<=(A[ans+1]-A[ans]).mod();
  73. return tmp>0;
  74. }
  75. signed main(){
  76. n=read(),m=read(),q=read();
  77. for(ri i=1;i<=n;++i)a1[i].x=read(),a1[i].y=read();
  78. for(ri i=1;i<=m;++i)a2[i].x=-read(),a2[i].y=-read();
  79. graham(a1,n),graham(a2,m);
  80. Minkowski(A,len,a1,n,a2,m);
  81. for(ri x,y;q;--q)x=read(),y=read(),cout<<check(pot(x,y))<<'\n';
  82. return 0;
  83. }

扫地机器人

神题,ORZORZORZ这位大佬的博客

代码:

  1. #include<bits/stdc++.h>
  2. #define ri register int
  3. using namespace std;
  4. inline int read(){
  5. int ans=0;
  6. char ch=getchar();
  7. while(!isdigit(ch))ch=getchar();
  8. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
  9. return ans;
  10. }
  11. const int N=55,mod=998244353;
  12. int n,m,G,turn,ans;
  13. int ban[N][N],f[N][N],g[N][N];
  14. char s[N][N];
  15. typedef long long ll;
  16. inline int gcd(int a,int b){while(b){int t=a;a=b,b=t-t/a*a;}return a;}
  17. inline int add(const int&a,const int&b){return a+b>=mod?a+b-mod:a+b;}
  18. inline int mul(const int&a,const int&b){return (ll)a*b%mod;}
  19. inline void update(int&a,const int&b){a=add(a,b);}
  20. int main(){
  21. for(ri tt=read();tt;--tt){
  22. n=read(),m=read(),G=gcd(n,m),turn=n*m/G,ans=0;
  23. for(ri i=0;i<n;++i)scanf("%s",s[i]);
  24. for(ri tx=0,ty=G;tx<=G;++tx,--ty)if(gcd(tx,n)==1&&gcd(ty,m)==1){
  25. memset(ban,0x3f,sizeof(ban));
  26. for(ri t=1,gx=0,gy=0;t<=turn;++t,(gx+=tx)%=n,(gy+=ty)%=m)
  27. for(ri dx=0;dx<=tx;++dx)for(ri dy=0;dy<=ty;++dy)
  28. if(s[((gx+dx)%n)][(gy+dy)%m]^48)ban[dx][dy]=min(ban[dx][dy],t);
  29. for(ri t=1;t<=turn;++t){
  30. memset(f,0,sizeof(f)),memset(g,0,sizeof(g));
  31. f[0][0]=g[tx][ty]=1;
  32. for(ri i=0;i<=tx;++i)for(ri j=0;j<=ty;++j){
  33. if(i&&ban[i-1][j]>t)update(f[i][j],f[i-1][j]);
  34. if(j&&ban[i][j-1]>t)update(f[i][j],f[i][j-1]);
  35. }
  36. for(ri i=tx;~i;--i)for(ri j=ty;~j;--j){
  37. if((i^tx)&&ban[i+1][j]>=t)update(g[i][j],g[i+1][j]);
  38. if((j^ty)&&ban[i][j+1]>=t)update(g[i][j],g[i][j+1]);
  39. }
  40. for(ri i=0;i<=tx;++i)for(ri j=0;j<=ty;++j)
  41. if(i+j&&ban[i][j]==t)update(ans,mul((t-1)*G+i+j,mul(f[i][j],g[i][j])));
  42. }
  43. }
  44. cout<<ans<<'\n';
  45. }
  46. return 0;
  47. }

军训列队

最沙雕的一道题。

直接主席树维护就完了。

代码:

  1. #include<bits/stdc++.h>
  2. #define ri register int
  3. using namespace std;
  4. inline char get_char(){
  5. static char buf[1000001],*p1=buf,*p2=buf;
  6. return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++;
  7. }
  8. inline int read(){
  9. int ans=0;
  10. char ch=get_char();
  11. while(!isdigit(ch))ch=get_char();
  12. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=get_char();
  13. return ans;
  14. }
  15. typedef long long ll;
  16. const int N=1e6+5;
  17. int n,m,rt[N];
  18. namespace SGT{
  19. #define lc (son[p][0])
  20. #define rc (son[p][1])
  21. int siz[N*25],son[N*25][2],tot=0;
  22. ll sum[N*25];
  23. inline void update(int&p,int o,int l,int r,int k){
  24. sum[p=++tot]=sum[o]+k,siz[p]=siz[o]+1,lc=son[o][0],rc=son[o][1];
  25. if(l==r)return;
  26. int mid=l+r>>1;
  27. k<=mid?update(lc,son[o][0],l,mid,k):update(rc,son[o][1],mid+1,r,k);
  28. }
  29. inline ll query(int pl,int pr,int l,int r,int ql,int qr){
  30. if(sum[pl]==sum[pr])return 0ll;
  31. if(r<=qr)return (ll)(qr+ql)*(qr-ql+1)/2-(sum[pr]-sum[pl]);
  32. if(l>=qr)return sum[pr]-sum[pl]-(ll)(qr+ql)*(qr-ql+1)/2;
  33. int mid=l+r>>1,tmp=siz[son[pr][0]]-siz[son[pl][0]];
  34. return query(son[pl][0],son[pr][0],l,mid,ql,ql+tmp-1)+query(son[pl][1],son[pr][1],mid+1,r,ql+tmp,qr);
  35. }
  36. #undef lc
  37. #undef rc
  38. }
  39. int main(){
  40. n=read(),m=read();
  41. for(ri i=1;i<=n;++i)SGT::update(rt[i],rt[i-1],1,1000000,read());
  42. for(ri i=1,l,r,k;i<=m;++i)l=read(),r=read(),k=read(),cout<<SGT::query(rt[l-1],rt[r],1,1000000,k,k+r-l)<<'\n';
  43. return 0;
  44. }

JSOI2018 简要题解的更多相关文章

  1. JSOI2018简要题解

    来自FallDream的博客,未经允许,请勿转载,谢谢. 有幸拜读到贵省的题目,题的质量还不错,而且相比zjoi可做多了,简单发一下题解吧. 还有就是,怎么markdown在博客园上的代码这么丑啊 「 ...

  2. Noip 2014酱油记+简要题解

    好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...

  3. Tsinghua 2018 DSA PA2简要题解

    反正没时间写,先把简要题解(嘴巴A题)都给他写了记录一下. upd:任务倒是完成了,我也自闭了. CST2018 2-1 Meteorites: 乘法版的石子合并,堆 + 高精度. 写起来有点烦貌似. ...

  4. Codeforces 863 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 简要题解?因为最后一题太毒不想写了所以其实是部分题解... A题 传送门 题意简述:给你一个数,问你能不能通过加前导000使其成为一个回文数 ...

  5. HNOI2018简要题解

    HNOI2018简要题解 D1T1 寻宝游戏 题意 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为 ...

  6. JXOI2018简要题解

    JXOI2018简要题解 T1 排序问题 题意 九条可怜是一个热爱思考的女孩子. 九条可怜最近正在研究各种排序的性质,她发现了一种很有趣的排序方法: Gobo sort ! Gobo sort 的算法 ...

  7. BJOI2018简要题解

    BJOI2018简要题解 D1T1 二进制 题意 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数.他想研究对于二进制,是否也有类似的性质. 于是他生 ...

  8. CQOI2018简要题解

    CQOI2018简要题解 D1T1 破解 D-H 协议 题意 Diffie-Hellman 密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码)的情况下,通过不安全的信 ...

  9. AtCoder ExaWizards 2019 简要题解

    AtCoder ExaWizards 2019 简要题解 Tags:题解 link:https://atcoder.jp/contests/exawizards2019 很水的一场ARC啊,随随便便就 ...

随机推荐

  1. Redis 数据类型归纳

    Redis的数据类型从整体上看,都是Key-Value键值对的模型,数据类型更确切地说,应该是Value的数据类型,比如string,set,list等,都是key值对应的Value的数据集合格式.不 ...

  2. 【转】如何使用离线博客发布工具发布CSDN的博客文章

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  3. ES6 Promise 用法转载

    Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 var p = new Promise( ...

  4. python经典案例

    前言:初学者对python的流程语句有一定的了解,但是运用起来总会磕磕碰碰.本文总结了一些初学者在学习python时做的经典案例 一.名片管理系统(限单个名片) info = {'name':'jam ...

  5. 一些常用的 std 类型

    [std::allocator] 标准库中包含一个名为allocator的类,允许我们将分配和初始化分离.使用allocator通常会提供更好的性能和更灵活的内存管理能力. 标准库allocator类 ...

  6. TCP协议和UDP协议基础介绍

    TCP协议和UDP协议区别 标签(空格分隔): TCP,udp TCP的三次握手 TCP被称为可靠的数据传输协议,主要是通过许多机制来实现的其中最主要的就是三次握手的功能,当然,TCP传送数据的机制非 ...

  7. centos7 安装mongodb

    1. 创建mongodb数据,日志,配置文件存放目录# mkdir  /data# tar xzf mongodb-linux-x86_64-rhel70-4.0.8.tgz# mv mongodb- ...

  8. os库新建文件夹

    file.write()可以自动生成文件但不能生成文件夹. os库生成文件夹 # 判断文件夹是否存在(./xxx/xxx) if not isExists: os.makedirs(path) pri ...

  9. Linux - 其他命令

    其他命令 目标 查找文件 find 软链接 ln 打包和压缩 tar 软件安装 apt-get 01. 查找文件 find 命令功能非常强大,通常用来在 特定的目录下 搜索 符合条件的文件 序号 命令 ...

  10. FortiGate 服务License注册步骤

    1. 产品服务license文档 购买服务后,用户会收到一份PDF文档<Service Registration Document>,内有如下内容: 2. 登陆 https://suppo ...