大概之后可能会重写一下,写的详细一些?

Day 1

T1 简单的背包:DP

分析

可以发现,如果选出了一些数,令这些数的\(\gcd\)为\(d\),那么这些数能且仅能组合成\(\gcd(d,P)\)的所有倍数。

然后就可以DP了,令\(f[i][j]\)表示考虑了前\(i\)个数,所有选出的数和\(P\)的\(\gcd\)为\(j\)的方案数,有状态转移方程:

\[f[i+1][j]+=f[i][j]
\]

\[f[i+1][\gcd(\gcd(V_{i+1},P),j)]+=f[i][j]
\]

(这里考虑的是从一个状态可以转移到哪些状态。)

这是一个\(O(nP)\)的DP,我们发现\(P\)的约数很少,\(f\)的第二维只要考虑\(P\)的所有约数就好了。然后我们还可以开个桶记录\(P\)的每个约数在\(\gcd(V_i,P)\)中出现了多少次,然后DP式子就变成了:

\[f[i+1][j]+=f[i][j]
\]

\[f[i+1][\gcd(D_{i+1},j)]+=f[i][j] \times (2^{cnt[i+1]}-1)
\]

这里\(f[i][j]\)的意思是考虑了\(P\)的前\(i\)个约数,所有选出的数的\(\gcd\)为\(j\)的方案数。

时间复杂度大约为\(O((n+q) \log P+P^{\frac{2}{3}})\)。

代码

  1. #include <bits/stdc++.h>
  2. #define rin(i,a,b) for(register int i=(a);i<=(b);++i)
  3. #define irin(i,a,b) for(register int i=(a);i>=(b);--i)
  4. #define trav(i,a) for(register int i=head[a];i;i=e[i].nxt)
  5. #define Size(a) (int)a.size()
  6. #define pb push_back
  7. typedef long long LL;
  8. using std::cerr;
  9. using std::endl;
  10. inline int read(){
  11. int x=0,f=1;char ch=getchar();
  12. while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
  13. while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
  14. return x*f;
  15. }
  16. const int MAXN=1e6+5;
  17. const int MOD=1e9+7;
  18. const int HMOD=3e6-1;
  19. int n,q,p,dcnt;
  20. int d[2005],cnt[2005],pw2[MAXN];
  21. int f[2005][2005],g[2005];
  22. struct hash_map{
  23. int siz,head[HMOD+5],nxt[2005];
  24. LL val[2005];int to[2005];
  25. inline void insert(LL x,int y){
  26. ++siz;
  27. nxt[siz]=head[x%HMOD];
  28. val[siz]=x;
  29. to[siz]=y;
  30. head[x%HMOD]=siz;
  31. }
  32. inline int operator [] (LL x){
  33. for(register int i=head[x%HMOD];i;i=nxt[i])
  34. if(val[i]==x)return to[i];
  35. return -1;
  36. }
  37. }mp;
  38. inline int gcd(int x,int y){
  39. if(!x||!y)return x+y;
  40. while(y){std::swap(x,y),y%=x;}
  41. return x;
  42. }
  43. int main(){
  44. n=read(),q=read(),p=read();
  45. int lim=sqrt(p)+0.5;
  46. d[++dcnt]=0;
  47. rin(i,1,lim){
  48. if(p%i)continue;
  49. d[++dcnt]=i;
  50. if(i*i==p)break;
  51. d[++dcnt]=p/i;
  52. }
  53. std::sort(d+1,d+dcnt+1);
  54. rin(i,1,dcnt)mp.insert(d[i],i);
  55. rin(i,1,n)++cnt[mp[gcd(read(),p)]];
  56. pw2[0]=1;rin(i,1,n)pw2[i]=pw2[i-1]*2%MOD;
  57. f[1][1]=1;
  58. rin(i,1,dcnt){
  59. rin(j,1,dcnt){
  60. int k=mp[gcd(d[i+1],d[j])];
  61. f[i+1][j]=(f[i+1][j]+f[i][j])%MOD;
  62. f[i+1][k]=(f[i+1][k]+1ll*f[i][j]*(pw2[cnt[i+1]]-1+MOD))%MOD;
  63. }
  64. }
  65. rin(i,2,dcnt)rin(j,2,i)if(d[i]%d[j]==0)g[i]=(g[i]+f[dcnt][j])%MOD;
  66. while(q--)printf("%d\n",g[mp[gcd(read(),p)]]);
  67. return 0;
  68. }

T2 反色游戏:Tarjan+异或方程组

分析

对于一个连通块,若有奇数个黑点,显然无解,否则显然有解,解的个数为\(2^{m-n+1}\)。

用Tarjan求割点随便搞搞就好了。

代码

  1. #include <bits/stdc++.h>
  2. #define rin(i,a,b) for(register int i=(a);i<=(b);++i)
  3. #define irin(i,a,b) for(register int i=(a);i>=(b);--i)
  4. #define trav(i,a) for(register int i=head[a];i;i=e[i].nxt)
  5. #define Size(a) (int)a.size()
  6. #define pb push_back
  7. typedef long long LL;
  8. using std::cerr;
  9. using std::endl;
  10. inline int read(){
  11. int x=0,f=1;char ch=getchar();
  12. while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
  13. while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
  14. return x*f;
  15. }
  16. const int MAXN=1e5+5;
  17. const int MOD=1e9+7;
  18. int n,m,ecnt,head[MAXN],deg[MAXN];
  19. int cnt,siz[MAXN],root[MAXN],blg[MAXN];
  20. int dcnt,totsiz,dfn[MAXN],low[MAXN],cut[MAXN];
  21. int pw2[MAXN],notzero[MAXN],pre[MAXN],suf[MAXN];
  22. char s[MAXN];
  23. bool vis[MAXN];
  24. struct Edge{
  25. int to,nxt;
  26. }e[MAXN<<1];
  27. inline void add_edge(int bg,int ed){
  28. ++ecnt;
  29. e[ecnt].to=ed;
  30. e[ecnt].nxt=head[bg];
  31. head[bg]=ecnt;
  32. }
  33. void dfs(int x){
  34. vis[x]=true;blg[x]=cnt;
  35. siz[x]=(s[x]=='1');
  36. trav(i,x){
  37. int ver=e[i].to;if(vis[ver])continue;
  38. dfs(ver);siz[x]+=siz[ver];
  39. }
  40. }
  41. void tarjan(int x){
  42. dfn[x]=low[x]=++dcnt;
  43. int sum=(s[x]=='1');
  44. trav(i,x){
  45. int ver=e[i].to;
  46. if(!dfn[ver]){
  47. tarjan(ver);
  48. low[x]=std::min(low[x],low[ver]);
  49. if(low[ver]>=dfn[x]){
  50. sum+=siz[ver];++cut[x];
  51. notzero[x]&=((siz[ver]&1)==0);
  52. }
  53. }
  54. else low[x]=std::min(low[x],dfn[ver]);
  55. }
  56. notzero[x]&=(((totsiz-sum)&1)==0);
  57. }
  58. void clear(){
  59. ecnt=cnt=dcnt=0;
  60. memset(head,0,sizeof head);
  61. memset(deg,0,sizeof deg);
  62. memset(siz,0,sizeof siz);
  63. memset(dfn,0,sizeof dfn);
  64. memset(cut,0,sizeof cut);
  65. memset(vis,false,sizeof vis);
  66. }
  67. int main(){
  68. int T=read();n=100000;
  69. pw2[0]=1;rin(i,1,n)pw2[i]=pw2[i-1]*2%MOD;
  70. while(T--){
  71. clear();
  72. n=read(),m=read();
  73. rin(i,1,n)notzero[i]=1;
  74. rin(i,1,m){
  75. int u=read(),v=read();
  76. add_edge(u,v),add_edge(v,u);
  77. ++deg[u],++deg[v];
  78. }
  79. scanf("%s",s+1);
  80. rin(i,1,n)if(!vis[i])dfs(root[++cnt]=i);
  81. rin(i,1,cnt)--cut[root[i]],totsiz=siz[root[i]],tarjan(root[i]);
  82. pre[0]=1;rin(i,1,cnt)pre[i]=(pre[i-1]&((siz[root[i]]&1)==0));
  83. suf[cnt+1]=1;irin(i,cnt,1)suf[i]=(suf[i+1]&((siz[root[i]]&1)==0));
  84. printf("%d ",pre[cnt]*pw2[m-n+cnt]);
  85. rin(i,1,n)printf("%d ",pre[blg[i]-1]*suf[blg[i]+1]*notzero[i]*pw2[(m-deg[i])-(n-1)+cnt+cut[i]]);
  86. putchar('\n');
  87. }
  88. return 0;
  89. }

T3 字串覆盖:后缀自动机+启发式合并+倍增+数据分治

分析

使用set+启发式合并,维护right集合,把所有询问离线挂在parent树上。

对于\(r-l \geq 51\)的询问暴力找下一个出现的位置,\(r-l < 51\)的预处理倍增数组后快速查询就好了。

代码

  1. #include <bits/stdc++.h>
  2. #define rin(i,a,b) for(int i=(a);i<=(b);++i)
  3. #define irin(i,a,b) for(int i=(a);i>=(b);--i)
  4. #define trav(i,a) for(int i=head[a];i;i=e[i].nxt)
  5. #define Size(a) (int)a.size()
  6. #define pb push_back
  7. #define mkpr std::make_pair
  8. typedef long long LL;
  9. using std::cerr;
  10. using std::endl;
  11. inline int read(){
  12. int x=0,f=1;char ch=getchar();
  13. while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
  14. while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
  15. return x*f;
  16. }
  17. const int MAXN=100005;
  18. int n,K,m,las,tot;
  19. int ecnt,head[MAXN<<1];
  20. LL ans[MAXN];
  21. char A[MAXN],B[MAXN];
  22. std::set<int> right[MAXN<<1];
  23. struct sam{
  24. int fa,to[26],len;
  25. }a[MAXN<<1];
  26. void extend(int c,int posi){
  27. int p=las,np=++tot;las=np;right[np].insert(posi);
  28. a[np].len=a[p].len+1;
  29. while(p&&!a[p].to[c])a[p].to[c]=np,p=a[p].fa;
  30. if(!p){a[np].fa=1;return;}
  31. int q=a[p].to[c];
  32. if(a[p].len+1==a[q].len){a[np].fa=q;return;}
  33. int nq=++tot;a[nq]=a[q];
  34. a[nq].len=a[p].len+1,a[np].fa=a[q].fa=nq;
  35. while(p&&a[p].to[c]==q)a[p].to[c]=nq,p=a[p].fa;
  36. }
  37. struct Edge{
  38. int to,nxt;
  39. }e[MAXN<<1];
  40. inline void add_edge(int bg,int ed){
  41. ++ecnt;
  42. e[ecnt].to=ed;
  43. e[ecnt].nxt=head[bg];
  44. head[bg]=ecnt;
  45. }
  46. int anc[MAXN<<1][20];
  47. void calc_anc(){
  48. rin(i,1,tot)anc[i][0]=a[i].fa;
  49. rin(i,1,18)rin(j,1,tot)anc[j][i]=anc[anc[j][i-1]][i-1];
  50. }
  51. inline int climb(int x,int lent){
  52. irin(i,18,0)if(anc[x][i]&&a[anc[x][i]].len>=lent)x=anc[x][i];
  53. return x;
  54. }
  55. int pos[MAXN],len[MAXN];
  56. void run_sam(){
  57. int now=1,nowlen=0;
  58. rin(i,1,n){
  59. while(now&&!a[now].to[B[i]]){
  60. now=a[now].fa;
  61. nowlen=a[now].len;
  62. }
  63. if(!now)now=1,nowlen=0;
  64. else{
  65. now=a[now].to[B[i]];
  66. ++nowlen;
  67. }
  68. pos[i]=now,len[i]=nowlen;
  69. }
  70. }
  71. struct quest{
  72. int s,t,len,id;
  73. };
  74. std::vector<quest> qst[MAXN<<1];
  75. typedef std::set<int>::iterator iter;
  76. int qtot;
  77. struct quest2{
  78. int s,t,len,pos,id;
  79. inline friend bool operator < (quest2 x,quest2 y){
  80. return x.pos==y.pos?x.len<y.len:x.pos<y.pos;
  81. }
  82. }q2[MAXN];
  83. int ptot,begpos[MAXN],nxt[MAXN][20];
  84. LL sum[MAXN][20];
  85. void calc_nxt(int posi,int lent){
  86. rin(i,1,ptot)memset(nxt[i],0,sizeof nxt[i]),memset(sum[i],0,sizeof sum[i]);
  87. ptot=0;
  88. for(iter it=right[posi].begin();it!=right[posi].end();++it)begpos[++ptot]=*it-lent+1;
  89. rin(i,1,ptot)nxt[i][0]=std::lower_bound(begpos+1,begpos+ptot+1,begpos[i]+lent)-begpos,sum[i][0]=K-begpos[i];
  90. rin(i,1,18)rin(j,1,ptot)nxt[j][i]=nxt[nxt[j][i-1]][i-1],sum[j][i]=sum[j][i-1]+sum[nxt[j][i-1]][i-1];
  91. }
  92. inline LL calc_ans(int s,int t,int lent){
  93. int now=std::lower_bound(begpos+1,begpos+ptot+1,s)-begpos;LL ret=0;
  94. irin(i,18,0)if(nxt[now][i]>=1&&nxt[now][i]<=ptot&&begpos[nxt[now][i]]+lent-1<=t)ret+=sum[now][i],now=nxt[now][i];
  95. if(begpos[now]+lent-1<=t)ret+=sum[now][0];
  96. return ret;
  97. }
  98. inline void merge(std::set<int> &x,std::set<int> &y){
  99. if(Size(x)<Size(y)){
  100. for(iter it=x.begin();it!=x.end();++it)y.insert(*it);
  101. x.swap(y);
  102. }
  103. else for(iter it=y.begin();it!=y.end();++it)x.insert(*it);
  104. }
  105. void dfs(int x){
  106. trav(i,x){
  107. int ver=e[i].to;dfs(ver);
  108. merge(right[x],right[ver]);
  109. }
  110. rin(i,0,Size(qst[x])-1){
  111. int now=qst[x][i].s+qst[x][i].len-1;
  112. while(1){
  113. iter it=right[x].lower_bound(now);
  114. if(it==right[x].end()||*it>qst[x][i].t)break;
  115. ans[qst[x][i].id]+=K-(*it-qst[x][i].len+1);
  116. now=*it+qst[x][i].len;
  117. }
  118. }
  119. int bg=std::lower_bound(q2+1,q2+qtot+1,(quest2){0,0,0,x,0})-q2;
  120. rin(i,bg,qtot){
  121. if(q2[i].pos!=x)break;
  122. if(q2[i].pos!=q2[i-1].pos||q2[i].len!=q2[i-1].len)calc_nxt(q2[i].pos,q2[i].len);
  123. ans[q2[i].id]=calc_ans(q2[i].s,q2[i].t,q2[i].len);
  124. }
  125. }
  126. int main(){
  127. n=read(),K=read();las=tot=1;
  128. scanf("%s",A+1);getchar();
  129. scanf("%s",B+1);
  130. rin(i,1,n){
  131. A[i]-='a',B[i]-='a';
  132. extend(A[i],i);
  133. }
  134. rin(i,2,tot)add_edge(a[i].fa,i);
  135. calc_anc();run_sam();
  136. m=read();
  137. rin(i,1,m){
  138. int s=read(),t=read(),l=read(),r=read();
  139. if(r-l+1>len[r]){ans[i]=0;continue;}
  140. else if(r-l+1>=52){
  141. int ret=climb(pos[r],r-l+1);
  142. qst[ret].pb((quest){s,t,r-l+1,i});
  143. }
  144. else{
  145. int ret=climb(pos[r],r-l+1);
  146. q2[++qtot]=(quest2){s,t,r-l+1,ret,i};
  147. }
  148. }
  149. std::sort(q2+1,q2+qtot+1);
  150. dfs(1);
  151. rin(i,1,m)printf("%lld\n",ans[i]);
  152. return 0;
  153. }

Day 2

T1 苹果树:组合数学

分析

https://blog.csdn.net/Icefox_zhx/article/details/80709753

代码

  1. #include <bits/stdc++.h>
  2. #define rin(i,a,b) for(register int i=(a);i<=(b);++i)
  3. #define irin(i,a,b) for(register int i=(a);i>=(b);--i)
  4. #define trav(i,a) for(register int i=head[a];i;i=e[i].nxt)
  5. #define Size(a) (int)a.size()
  6. #define pb push_back
  7. typedef long long LL;
  8. using std::cerr;
  9. using std::endl;
  10. inline int read(){
  11. int x=0,f=1;char ch=getchar();
  12. while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
  13. while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
  14. return x*f;
  15. }
  16. const int MAXN=2005;
  17. int n;
  18. LL p,fac[MAXN],c[MAXN][MAXN];
  19. int main(){
  20. n=read(),p=read();
  21. fac[0]=1;rin(i,1,n)fac[i]=fac[i-1]*i%p;
  22. c[0][0]=1;
  23. rin(i,1,n){
  24. rin(j,0,i){
  25. c[i][j]=c[i-1][j];
  26. if(j)c[i][j]=(c[i][j]+c[i-1][j-1])%p;
  27. }
  28. }
  29. LL ans=0;
  30. rin(i,2,n)rin(j,1,n-i+1)ans=(ans+1ll*j*(n-j)%p*fac[n-i]%p*j%p*c[n-j-1][i-2]%p*fac[i])%p;
  31. printf("%lld\n",ans);
  32. return 0;
  33. }

T2 染色:组合数学+二项式反演+NTT

分析

设\(f(i)\)表示恰好有\(i\)种颜色出现了\(S\)次的方案数,\(g(i)\)表示至少有\(i\)种颜色出现了\(S\)次的方案数,有:

\[g(i)=\binom{M}{i}\binom{N}{iS}\frac{(iS)!}{(S!)^i}(M-i)^{N-iS}
\]

\[f(i)=\sum_{j=i}^{M}\binom{j}{i}g(j)
\]

\[ans=\sum_{i=0}^{M}W_if(i)
\]

二项式反演后化一下式子再NTT就好了。

代码

  1. #include <bits/stdc++.h>
  2. #define rin(i,a,b) for(register int i=(a);i<=(b);++i)
  3. #define irin(i,a,b) for(register int i=(a);i>=(b);--i)
  4. #define trav(i,a) for(register int i=head[a];i;i=e[i].nxt)
  5. #define Size(a) (int)a.size()
  6. #define pb push_back
  7. typedef long long LL;
  8. using std::cerr;
  9. using std::endl;
  10. inline int read(){
  11. int x=0,f=1;char ch=getchar();
  12. while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
  13. while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
  14. return x*f;
  15. }
  16. const int MAXN=1e7+5;
  17. const int MAXM=1e5+5;
  18. const int MOD=1004535809;
  19. const int G=3;
  20. int NTT,INVG,N,M,S,n,m,len,rev[MAXM<<2];
  21. int w[MAXM<<2],iw[MAXM<<2];
  22. int A[MAXM<<2],B[MAXM<<2];
  23. int fac[MAXN],invf[MAXN],W[MAXM];
  24. inline int qpow(int x,int y){
  25. if(y<0)return 0;
  26. int ret=1,tt=x%MOD;
  27. while(y){
  28. if(y&1)ret=1ll*ret*tt%MOD;
  29. tt=1ll*tt*tt%MOD;
  30. y>>=1;
  31. }
  32. return ret;
  33. }
  34. void prepare(){
  35. for(n=1,len=0;n<=m;n<<=1,++len);
  36. rin(i,1,n-1)rev[i]=((rev[i>>1]>>1)|((i&1)<<(len-1)));
  37. }
  38. void ntt(int *c,int dft){
  39. rin(i,0,n-1)if(i<rev[i])std::swap(c[i],c[rev[i]]);
  40. for(register int mid=1;mid<n;mid<<=1){
  41. int r=(mid<<1),u=NTT/r;
  42. for(register int l=0;l<n;l+=r){
  43. int v=0;
  44. for(register int i=0;i<mid;++i,v+=u){
  45. int x=c[l+i],y=1ll*c[l+mid+i]*(dft>0?w[v]:iw[v])%MOD;
  46. c[l+i]=x+y<MOD?x+y:x+y-MOD;
  47. c[l+mid+i]=x-y>=0?x-y:x-y+MOD;
  48. }
  49. }
  50. }
  51. if(dft<0){
  52. int invn=qpow(n,MOD-2);
  53. rin(i,0,n-1)c[i]=1ll*c[i]*invn%MOD;
  54. }
  55. }
  56. inline int c(int n,int m){
  57. if(n<0||m<0||n<m)return 0;
  58. return 1ll*fac[n]*invf[n-m]%MOD*invf[m]%MOD;
  59. }
  60. void init(int N,int M){
  61. fac[0]=1;rin(i,1,std::max(N,M))fac[i]=1ll*fac[i-1]*i%MOD;
  62. invf[std::max(N,M)]=qpow(fac[std::max(N,M)],MOD-2);irin(i,std::max(N,M)-1,0)invf[i]=1ll*invf[i+1]*(i+1)%MOD;
  63. for(NTT=1;NTT<=(M<<1);NTT<<=1);
  64. INVG=qpow(G,MOD-2);w[0]=iw[0]=1;int v=qpow(G,(MOD-1)/NTT),iv=qpow(INVG,(MOD-1)/NTT);
  65. rin(i,1,NTT-1)w[i]=1ll*w[i-1]*v%MOD,iw[i]=1ll*iw[i-1]*iv%MOD;
  66. }
  67. int main(){
  68. N=read(),M=read(),S=read();init(N,M);
  69. rin(i,0,M)W[i]=read();
  70. m=(M<<1);prepare();
  71. int sgn=MOD-1;
  72. rin(i,0,M)sgn=MOD-sgn,A[i]=1ll*sgn*invf[i]%MOD,B[i]=1ll*W[i]*invf[i]%MOD;
  73. ntt(A,1);ntt(B,1);rin(i,0,n-1)A[i]=1ll*A[i]*B[i]%MOD;ntt(A,-1);
  74. int ans=0;
  75. rin(i,0,M)ans=(ans+1ll*c(M,i)*c(N,i*S)%MOD*fac[i*S]%MOD*qpow(qpow(fac[S],i),MOD-2)%MOD*qpow(M-i,N-i*S)%MOD*fac[i]%MOD*A[i])%MOD;
  76. printf("%d\n",ans);
  77. return 0;
  78. }

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

  1. HAOI2018 简要题解

    这套题是 dy, wearry 出的.学长好强啊,可惜都 \(wc\) 退役了.. 话说 wearry 真的是一个计数神仙..就没看到他计不出来的题...每次考他模拟赛总有一两道毒瘤计数TAT 上午的 ...

  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. CodeFoeces GYM 101466A Gaby And Addition (字典树)

    gym 101466A Gaby And Addition 题目分析 题意: 给出n个数,找任意两个数 “相加”,求这个结果的最大值和最小值,注意此处的加法为不进位加法. 思路: 由于给出的数最多有 ...

  2. Mysql之SQL随笔

    1.创建数据库 create database if not exists shop default character set utf8mb4 default collate utf8mb4_uni ...

  3. rabbitmq中关于exchange模式type报错

    channel.exchange_declare(exchange='logs', type='fanout') 报错: Traceback (most recent call last):  Fil ...

  4. Two strings CodeForces - 762C (字符串,双指针)

    大意: 给定字符串$a$,$b$, $b$可以任选一段连续的区间删除, 要求最后$b$是$a$的子序列, 求最少删除区间长度. 删除一段连续区间, 那么剩余的一定是一段前缀和后缀. 判断是否是子序列可 ...

  5. leetcode题库

    leetcode题库 #题名题解通过率难度出现频率  1 两数之和     46.5%简单2 两数相加     35.5%中等3 无重复字符的最长子串     31.1%中等4 寻找两个有序数组的中位 ...

  6. 自定义ResultMap查询,这里的关联写法只能用于不分页

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  7. Clang编译选项和Pass构建

    编译选项相关: 想要添加的选项,以我添加的-fdpu为例子 能通过clang --help得到的选项,整体需要一个解析文件(好像在LLVM项目中都是通过后缀名为xxx.td和xxx.def的文件来进行 ...

  8. mysql 命令行登录详解

    mysql -?或者是mysql --help或者是mysql -I显示mysql命令的选项. #最全的mysql登录方式: mysql -hIP -uUSENME -pPWD -PPORT DBNA ...

  9. Ubuntu中用sudo apt-get install makeinfo时,出错:Unable to locate package

    背景: 在准备ARM交叉编译环境时,执行命令: DISTRO=fsl-imx-x11 MACHINE=imx6qsabresd source fsl-setup-release.sh -b build ...

  10. deep_learning_Function_LSTM_dynamic_rnn

    一. tf.nn.dynamic_rnn的输出 tf.nn.dynamic_rnn的输入参数如下 tf.nn.dynamic_rnn(    cell,    inputs,    sequence_ ...