A.3132

给一个有向图,问能否从任意点出发都能进入一个环中。

深搜。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N=;
  5. vector<int>G[N];
  6. bool vis[N];
  7. int f;
  8. void dfs(int u)
  9. {
  10. if(f)return;
  11. for(int i=;i<G[u].size();i++)
  12. {
  13. int v=G[u][i];
  14. if(!vis[v])
  15. {
  16. vis[v]=;
  17. dfs(v);
  18. }
  19. else
  20. {
  21. f=;
  22. return;
  23. }
  24. }
  25. }
  26. int main()
  27. {
  28. int n,m;
  29. char s1[],s2[];
  30. while(scanf("%d%d",&n,&m)!=EOF)
  31. {
  32. for(int i=;i<=n;i++)G[i].clear();
  33. for(int i=;i<m;i++)
  34. {
  35. int u,v;
  36. scanf("%s%s",s1,s2);
  37. G[s1[]-'A'+].push_back(s2[]-'A'+);
  38. }
  39. for(int i=;i<=n;i++)
  40. {
  41. f=;
  42. memset(vis,,sizeof vis);
  43. dfs(i);
  44. if(!f)break;
  45. }
  46. printf("%s\n",f?"YES":"NO");
  47. }
  48. return ;
  49. }

A.cpp

B.4971

给一颗树,n个起点,问到1的路径权值和,一个点的权值只算一次。

深搜。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N=;
  5. vector<int>G[N];
  6. bool vis[N];
  7. int father[N],be[N],val[N];
  8. void dfs(int u,int fa)
  9. {
  10. father[u]=fa;
  11. for(int i=;i<G[u].size();i++)
  12. {
  13. int v=G[u][i];
  14. if(v==fa)continue;
  15. dfs(v,u);
  16. }
  17. }
  18. int main()
  19. {
  20. int n,m,ca=;
  21. while(scanf("%d%d",&n,&m)!=EOF)
  22. {
  23. memset(vis,,sizeof vis);
  24. for(int i=;i<=n;i++)G[i].clear();
  25. for(int i=;i<=m;i++)
  26. scanf("%d",&be[i]);
  27. for(int i=;i<=n;i++)
  28. scanf("%d",&val[i]);
  29. for(int i=;i<n;i++)
  30. {
  31. int u,v;
  32. scanf("%d%d",&u,&v);
  33. G[u].push_back(v);
  34. G[v].push_back(u);
  35. }
  36. dfs(,);
  37. int sum=;
  38. for(int i=;i<=m;i++)
  39. {
  40. int f=be[i];
  41. if(!vis[f])vis[f]=,sum+=val[f];
  42. while(f)
  43. {
  44. f=father[f];
  45. if(!vis[f])vis[f]=,sum+=val[f];
  46. }
  47. }
  48. printf("Case #%d: %d\n",ca++,sum);
  49. }
  50. return ;
  51. }

B.cpp

C.4976

给一个二进制串,其中有一堆未知数,问有几种填法使得十进制数中含6。

深搜。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. int p[];
  5.  
  6. string s;
  7. int l;
  8. int num=;
  9. void dfs(int pos,ll ans)
  10. {
  11. if(pos==l)
  12. {
  13. while(ans)
  14. {
  15. if(ans%==)
  16. {
  17. num++;
  18. break;
  19. }
  20. ans=ans/;
  21. }
  22. return;
  23. }
  24. if(s[pos]=='') dfs(pos+,ans*);
  25. else if(s[pos]=='') dfs(pos+,ans*+);
  26. else
  27. {
  28. dfs(pos+,ans*);
  29. dfs(pos+,ans*+);
  30. }
  31. }
  32. int main()
  33. {
  34. while(cin>>s)
  35. {
  36. num=;
  37. l=s.size();
  38. dfs(,);
  39. cout<<num<<endl;
  40. }
  41. return ;
  42. }

C.cpp

D.4546

M段区间每段区间只能有一张假票,问最多能有几张假票,若不合法输出-1。

不会(待补)

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <vector>
  4. using namespace std;
  5. #define MAXN 200010
  6.  
  7. int DP[MAXN];
  8. int RMN[MAXN];
  9. int RMX[MAXN];
  10.  
  11. template <class T>
  12. struct max_queue
  13. {
  14. max_queue(size_t sz) : X(sz), Y(sz), a(), b(), va(), vb()
  15. {}
  16. void push(const T& v)
  17. {
  18. while(va < vb && X[vb - ] <= v)
  19. vb--;
  20. X[vb] = v;
  21. Y[vb++] = b++;
  22. }
  23.  
  24. void pop()
  25. {
  26. va += a++ == Y[va];
  27. }
  28.  
  29. T max()
  30. {
  31. return X[va];
  32. }
  33.  
  34. vector<T> X;
  35. vector<size_t> Y;
  36. size_t a, b, va, vb;
  37. };
  38.  
  39. int main() {
  40. // freopen("d:\\data1.in","r",stdin);
  41. // freopen("d:\\data1.out","w",stdout);
  42. int N, M; scanf("%d%d", &N, &M);
  43. fill(RMN, RMN + N + , N + );
  44. for(int i = ; i < M; i++)
  45. {
  46. int lft, rht; scanf("%d%d", &lft, &rht);
  47. RMN[lft] = min(RMN[lft], rht + );
  48. RMX[lft] = max(RMX[lft], rht + );
  49. }
  50. RMN[N + ] = N + ;
  51. for(int i = N - ; i >= ; i--)
  52. {
  53. RMN[i] = min(RMN[i], RMN[i + ]);
  54. }
  55. for(int i = ; i <= N; i++)
  56. {
  57. RMX[i] = max(RMX[i], RMX[i - ]);
  58. }
  59. DP[N + ] = ;
  60.  
  61. int j_lo = N;
  62. int j_hi = N;
  63. max_queue<int> mq(N);
  64. for(int i = N; i >= ; i--)
  65. {
  66. int r_least = max(i + , RMX[i]);
  67. int r_most = RMN[i + ];
  68. for(; r_least <= j_lo; j_lo--)
  69. {
  70. mq.push(DP[j_lo]);
  71. }
  72. for(; j_lo < j_hi && r_most <= j_hi; j_hi--)
  73. {
  74. mq.pop();
  75. }
  76. DP[i] = r_least < r_most ? mq.max() : -;
  77. if(i && DP[i] != -)
  78. {
  79. DP[i]++;
  80. }
  81. }
  82.  
  83. printf("%d\n", DP[]);
  84. return ;
  85. }

D.cpp by crq

E.4587

有两颗苹果树,贝西初始站在1下,每分钟掉下1个苹果,贝西最多移动W次,问T分钟贝西最多能接到多少苹果。

dp[t][w][3]表示在t分钟移动w次现在站在苹果树几下。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int dp[][][];
  4. int main()
  5. {
  6. for(int i=;i<;i++)
  7. for(int j=;j<;j++)
  8. dp[i][j][]=dp[i][j][]=-;
  9. int T,W;
  10. scanf("%d%d",&T,&W);
  11. for(int i=;i<T;i++) dp[i][W][]=;
  12. for(int i=,x;i<T;i++)
  13. {
  14. scanf("%d",&x);
  15. if(!i)
  16. {
  17. if(x==) dp[i][W][]=;
  18. else if(x==) dp[i][W-][]=;
  19. }
  20. else
  21. {
  22. for(int j=W;j>=;j--)
  23. {
  24. if(x==)
  25. {
  26. dp[i][j][]=max(dp[i][j][],dp[i-][j][]+);
  27. if(j!=W) dp[i][j][]=max(dp[i][j][],dp[i-][j+][]+);
  28. dp[i][j][]=max(dp[i][j][],dp[i-][j][]);
  29. if(j!=W) dp[i][j][]=max(dp[i][j][],dp[i-][j+][]);
  30. }
  31. else if(x==)
  32. {
  33. dp[i][j][]=max(dp[i][j][],dp[i-][j][]+);
  34. if(j!=W) dp[i][j][]=max(dp[i][j][],dp[i-][j+][]+);
  35. dp[i][j][]=max(dp[i][j][],dp[i-][j][]);
  36. if(j!=W) dp[i][j][]=max(dp[i][j][],dp[i-][j+][]);
  37. }
  38. }
  39. }
  40. }
  41. int ans=;
  42. for(int i=;i<=W;i++)
  43. ans=max(ans,max(dp[T-][i][],dp[T-][i][]));
  44. printf("%d\n",ans);
  45. return ;
  46. }

E.cpp

F.4596

n个盒子按1-n编号,m次操作,1XY把x放在y左边,2XY把x放在y右边,3XYxy互换位置,4翻转,问操作完所有奇数位置的盒子编号之和。

双向链表,L[i]=i-1,R[i]=i+1,然后4操作后1和2操作是反过来的,3操作的交换可能存在相邻两个,这时候要判断左右。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=1e5+;
  4. int L[N],R[N];
  5. int main()
  6. {
  7. int n,m,o=;
  8. while(~scanf("%d%d",&n,&m))
  9. {
  10. for(int i=;i<=n+;i++) L[i]=i-,R[i]=i+;
  11. int r=;
  12. while(m--)
  13. {
  14. int op,x,y;
  15. scanf("%d",&op);
  16. if(op==)r=!r;
  17. else
  18. {
  19. scanf("%d%d",&x,&y);
  20. if(op==&&R[y]==x)swap(x,y);
  21. if(op!=&&r)op=-op;
  22. if(op==)
  23. {
  24. if(x==L[y])continue;
  25. R[L[x]]=R[x];
  26. L[R[x]]=L[x];
  27. L[x]=L[y];
  28. R[x]=y;
  29. R[L[y]]=x;
  30. L[y]=x;
  31. }
  32. else if(op==)
  33. {
  34. if(x==R[y])continue;
  35. R[L[x]]=R[x];
  36. L[R[x]]=L[x];
  37. L[x]=y;
  38. R[x]=R[y];
  39. L[R[y]]=x;
  40. R[y]=x;
  41. }
  42. else if(op==)
  43. {
  44. if(R[x]==y||L[x]==y||R[y]==x||L[y]==x)
  45. {
  46. R[L[x]]=y;
  47. L[R[y]]=x;
  48. L[y]=L[x];
  49. R[x]=R[y];
  50. R[y]=x;
  51. L[x]=y;
  52. }
  53. else
  54. {
  55. R[L[x]]=L[R[x]]=y;
  56. R[L[y]]=L[R[y]]=x;
  57. swap(L[x],L[y]);
  58. swap(R[x],R[y]);
  59. }
  60. }
  61. }
  62. }
  63. long long sum=;
  64. for(int i=R[];i<=n;i=R[R[i]]) sum+=i;
  65. if(r&&(n&)==) sum=1LL*n*(n+)/-sum;
  66. printf("Case %d: %I64d\n",++o,sum);
  67. }
  68. return ;
  69. }

F.cpp

G.5066

n个点m条有向边,问从1出发最多经过几个点再回到1。

targin求含有1的强连通集合。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N=1e5+;
  5. int low[N],dfn[N],Stack[N],tot,cnt;
  6. bool instack[N];
  7. vector<int>G[N];
  8. void tarjan(int u)
  9. {
  10. int v;
  11. dfn[u]=low[u]=++tot;
  12. Stack[++cnt]=u;
  13. instack[u]=true;
  14. for(int i=;i<G[u].size();i++)
  15. {
  16. v=G[u][i];
  17. if(!dfn[v])
  18. {
  19. tarjan(v);
  20. low[u]=min(low[u],low[v]);
  21. }
  22. else if(instack[v])
  23. low[u]=min(low[u],dfn[v]);
  24. }
  25. if(low[u]==dfn[u])
  26. {
  27. int sz=;
  28. while(v=Stack[cnt--])
  29. {
  30. instack[v]=false;
  31. sz++;
  32. if(u==v)break;
  33. }
  34. if(u==)printf("%d\n",sz);
  35. }
  36. }
  37. int main()
  38. {
  39. int n,m;
  40. scanf("%d%d",&n,&m);
  41. for(int i=;i<m;i++)
  42. {
  43. int u,v;
  44. scanf("%d%d",&u,&v);
  45. G[u].push_back(v);
  46. }
  47. tarjan();
  48. return ;
  49. }

G.cpp

H.5129(题面已经修正)

n个人的无向图,LJ为1和LJ已经认识的人,对于S,输出LJ可以认识的新朋友,对于Q x,输出1和x是否连通。

并查集。

坑点:

1.LJ可以认识自己。

2.n和m是相反的。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int f[];
  4. int find(int x)
  5. {
  6. return f[x]==x?x:f[x]=find(f[x]);
  7. }
  8. int main()
  9. {
  10. ios::sync_with_stdio(false),cin.tie(),cout.tie();
  11. int n,m,t,g,val,k,v;
  12. cin>>t;
  13. while(t--)
  14. {
  15. cin>>m>>n;
  16. for(int i=;i<=n;i++)f[i]=i;
  17. for(int i=;i<=n;i++)
  18. {
  19. cin>>k;
  20. if(i==)g=k;
  21. for(int j=;j<k;j++)
  22. {
  23. cin>>v;
  24. if(i==&&i==v)g--;
  25. int fu=find(i),fv=find(v);
  26. if(fu!=fv)f[fu]=fv;
  27. }
  28. }
  29. for(int i=;i<=n;i++)f[i]=find(i);
  30. string s;
  31. int ans=;
  32. for(int i=;i<=n;i++)
  33. if(f[]==f[i])
  34. ans++;
  35. while(m--)
  36. {
  37. cin>>s;
  38. if(s[]=='S')
  39. cout<<ans-g<<'\n';
  40. else
  41. {
  42. cin>>val;
  43. if(f[]==f[val])cout<<"Yes!\n";
  44. else cout<<"No!\n";
  45. }
  46. }
  47. }
  48. return ;
  49. }

H.cpp

I.5166

n个点构造一个哈夫曼树。

贪心每次取两个最小的。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. priority_queue< int,vector<int>,greater<int> >q;
  7. int n;
  8. cin>>n;
  9. for(int i=;i<=n;i++)
  10. {
  11. int a;
  12. cin>>a;
  13. q.push(a);
  14. }
  15. int sum=;
  16. while(q.size()>)
  17. {
  18. int a=q.top();q.pop();
  19. int b=q.top();q.pop();
  20. sum+=a+b;
  21. q.push(a+b);
  22. }
  23. cout<<sum;
  24. return ;
  25. }

I.cpp

J.4992

n次移动,(0,0)朝北出发,每次走ai步,走完后右转,如果路径冲突,输出移动了几次,否则输出OK。

首先几何知识判断两条线段是否相交或重叠。

通过观察发现当前这条线段最多和前面8条线段存在冲突。

  1. #include <cstdio>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. const int MAX = , dx[] = { , , , - }, dy[] = { , , -, };
  6. int N, a[MAX];
  7.  
  8. struct Point
  9. {
  10. int x, y;
  11. Point(int _x = , int _y = ) :
  12. x(_x), y(_y) {}
  13. } points[MAX];
  14.  
  15. // true, if intervals [a,b] and [c,d] have non-empty intersection
  16. bool overlap(int a, int b, int c, int d)
  17. {
  18. if (a > b) swap(a, b);
  19. if (c > d) swap(c, d);
  20. return !(b < c || d < a);
  21. }
  22.  
  23. // true if line segments [a1,a2] and [b1,b2] have non-empty intersection
  24. bool intersect(Point a1, Point a2, Point b1, Point b2)
  25. {
  26. bool is_vertical_a = (a1.x == a2.x), is_vertical_b = (b1.x == b2.x);
  27. if (is_vertical_a && is_vertical_b)
  28. return a1.x == b1.x && overlap(a1.y, a2.y, b1.y, b2.y);
  29. if (!is_vertical_a && !is_vertical_b)
  30. return a1.y == b1.y && overlap(a1.x, a2.x, b1.x, b2.x);
  31. // make a horizontal and b vertical
  32. if (is_vertical_a)
  33. {
  34. swap(a1, b1);
  35. swap(a2, b2);
  36. }
  37. return !(
  38. max(a1.x, a2.x) < b1.x ||
  39. min(a1.x, a2.x) > b1.x ||
  40. max(b1.y, b2.y) < a1.y ||
  41. min(b1.y, b2.y) > a1.y);
  42. }
  43.  
  44. int solve()
  45. {
  46. int x = , y = ;
  47. for (int i = ; i < N; ++i)
  48. {
  49. x += dx[i & ] * a[i];
  50. y += dy[i & ] * a[i];
  51. points[i + ].x = x;
  52. points[i + ].y = y;
  53. for (int j = max(, i - ); j < i - ; ++j)
  54. if (intersect(points[j], points[j + ], points[i], points[i + ]))
  55. return i;
  56. }
  57. return -;
  58. }
  59.  
  60. int main()
  61. {
  62. while (scanf("%d", &N) == )
  63. {
  64. for (int i = ; i < N; ++i)
  65. scanf("%d", a + i);
  66. int result = solve();
  67. if (result == -)
  68. printf("OK\n");
  69. else
  70. printf("%d\n", result);
  71. }
  72.  
  73. return ;
  74. }

J.cpp

K.4541

n个数,求插入个数最少的整数,使其成为一个回文数列。

dp,答案是n-最长回文子序列的长度。

设字符串为s,f(i,j)表示s[i..j]的最长回文子序列。

状态转移方程如下:

当i>j时,f(i,j)=0。

当i=j时,f(i,j)=1。

当i<j并且s[i]=s[j]时,f(i,j)=f(i+1,j-1)+2。

当i<j并且s[i]≠s[j]时,f(i,j)=max( f(i,j-1), f(i+1,j) )。

由于f(i,j)依赖i+1,所以循环计算的时候,第一维必须倒过来计算,从s.length()-1到0。

最后,s的最长回文子序列长度为f(0, s.length()-1)。

可以发现计算第i行时只用到了第i+1行,所以可以滚动数组减少内存使用。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=;
  4. int a[N],n,dp[][N];
  5. int main()
  6. {
  7. int T;
  8. scanf("%d",&T);
  9. while(T--)
  10. {
  11. memset(dp,,sizeof dp);
  12. scanf("%d",&n);
  13. for(int i=;i<=n;i++)
  14. scanf("%d",&a[i]);
  15. int cnt=;
  16. for(int i=n;i>=;i--)
  17. {
  18. cnt^=;
  19. memset(dp[cnt],,sizeof dp[cnt]);
  20. dp[cnt][i]=;
  21. for(int j=i+;j<=n;j++)
  22. {
  23. if(a[i]==a[j]) dp[cnt][j]=dp[cnt^][j-]+;
  24. else dp[cnt][j]=max(dp[cnt][j-],dp[cnt^][j]);
  25. }
  26. }
  27. printf("%d\n",n-dp[cnt][n]);
  28. }
  29. return ;
  30. }

K.cpp

L.4561

n个人,1号为Sheldon,已知其余n-1个人投给了f[i]要买通需要花费c[i],1号需要投给1个人。最后1想要花最少的钱使得自己的票数>其他所有人的票数,求最少的钱。

贪心+讨论

这里每个人票数为p[i]。

1投给目前票数最少的人(好好思考思考),然后考虑1需要x票能赢,那么其余人i只要p[i]>=x就需要买通p[i]-x+1个人,肯定买最便宜的,最后如果1还差k票,那么把所有没买通的人按c[i]排序再取k个最小。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. vector<int>vec[];
  4. int f[],c[],t,a;
  5. int main()
  6. {
  7. cin>>t;
  8. while(t--)
  9. {
  10. int n;
  11. cin>>n;
  12. for(int i=;i<=n;i++)vec[i].clear();
  13. for(int i=;i<=n;i++)cin>>f[i];
  14. for(int i=;i<=n;i++)cin>>c[i];
  15. for(int i=;i<=n;i++)vec[f[i]].push_back(c[i]);
  16. for(int i=;i<=n;i++)sort(vec[i].begin(),vec[i].end());
  17. int M_P=1e9,M_POS=;
  18. for(int i=;i<=n;i++)
  19. {
  20. if((int)vec[i].size()<M_P)
  21. {
  22. M_P=(int)vec[i].size();
  23. M_POS=i;
  24. }
  25. }
  26. int sl=;
  27. for(int i=;i<=n;i++)if((int)vec[i].size()==M_P)sl++;
  28. if(sl==n)
  29. {
  30. int Minn=1e9,Minnp=;
  31. for(int i=;i<=n;i++)if((int)vec[i].size()>&&vec[i][]<Minn)Minn=vec[i][],Minnp=i;
  32. vec[Minnp].push_back(0x3f3f3f3f);
  33. }
  34. else vec[M_POS].push_back(0x3f3f3f3f);
  35. int Min=1e9;
  36. for(int i=(int)vec[].size();i<n;i++)
  37. {
  38. vector<int>prem[],prr;
  39. int NEED=i-(int)vec[].size();
  40. for(int j=;j<=n;j++)prem[j]=vec[j];
  41. int sum=;
  42. for(int j=;j<=n;j++)
  43. {
  44. if((int)prem[j].size()>=i)
  45. {
  46. int need=(int)prem[j].size()-i+;
  47. NEED-=need;
  48. if(NEED<)goto e;
  49. for(int k=;k<need;k++)sum+=prem[j][k];
  50. for(int k=need;k<(int)prem[j].size();k++)prr.push_back(prem[j][k]);
  51. }
  52. else
  53. {
  54. for(int k=;k<(int)prem[j].size();k++)
  55. prr.push_back(prem[j][k]);
  56. }
  57. }
  58. if(NEED>)
  59. {
  60. sort(prr.begin(),prr.end());
  61. for(int j=;j<NEED;j++)sum+=prr[j];
  62. }
  63. Min=min(Min,sum);
  64. e:;
  65. }
  66. cout<<Min<<endl;
  67. }
  68. return ;
  69. }

L.cpp

M.2337

已知Dick12岁,janepuff和spot相差s岁,yertle和puff相差p岁,yertle和spot相差y岁,Spot, Puff, Yertle和等于Dick,jane和,求Spot, Puff, Yertle的岁数。

那么由确定关系,设yertle为x岁,那么spot为x + y, puff为x + p然后与s进行比较。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. int n,s,p,y,t;
  7. cin>>n;
  8. while(n--)
  9. {
  10. cin>>s>>p>>y>>t;
  11. int sum=+t;
  12. int temp=sum-y-p;
  13. int x=temp/;
  14. if(temp%==)
  15. cout<<x+y<<" "<<x+p<<" "<<x<<endl;
  16. else if(temp%==)
  17. {
  18. if(s+p==y)
  19. cout<<x+y+<<" "<<x+p<<" "<<x<<endl;
  20. else
  21. cout<<x+y<<" "<<x+p+<<" "<<x<<endl;
  22. }
  23. else
  24. cout<<x+y+<<" "<<x+p+<<" "<<x<<endl;
  25. }
  26. return ;
  27. }

M.cpp

集训队日常训练20180513-DIV1的更多相关文章

  1. 集训队日常训练20181117 DIV2

    大佬们一顿操作猛如虎,拼命AC强啊 4262: 区间异或  Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal ...

  2. 集训队日常训练20181201 C 1003 : 种类数

    时间限制(普通/Java):2000MS/6000MS     内存限制:65536KByte总提交: 8            测试通过:5 描述 一共有 n个数,第 i 个数是 xi ,其中xi  ...

  3. 集训队日常训练20181201 E 1005 : 小蝌蚪

    时间限制(普通/Java):500MS/1500MS     内存限制:65536KByte总提交: 25            测试通过:5 描述 有 n 个装着小蝌蚪的水缸排成一排,你拥有一个无限 ...

  4. 集训队日常训练20181124 DIV2

    急急忙忙要出去比赛就拉了一场有点sb的题目 5202: 网络寻路  时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte总提交: 15            ...

  5. 集训队日常训练20181110 DIV2 题解及AC代码

    4375: 孪生素数  Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal Submit: 324       ...

  6. 集训队日常训练20180525-DIV2

    A.2295 求有多少素数对和等于n. 暴力. #include <bits/stdc++.h> using namespace std; int ss(int n) { ,a=sqrt( ...

  7. 集训队日常训练20180525-DIV1

    A.2805 N*M的图,每次浇水(X1,Y1)-(X2,Y2)围成的矩形,问最后有多少点被浇水了. 暴力. #include<bits/stdc++.h> using namespace ...

  8. 集训队日常训练20180518-DIV2

    A.3232 n个物品,换取要花积分,问刚好花完积分能换最大多少价值的物品. 多重背包. #include <bits/stdc++.h> using namespace std; ]; ...

  9. 集训队日常训练20180518-DIV1

    A.3583 n根木棍是否能分成相等两堆. 背包dp,首先求和sum,如果为偶数就说明不行,否则考虑做一个sum/2大小的背包. #include<bits/stdc++.h> using ...

随机推荐

  1. VS2010-MFC(对话框:模态对话框及其弹出过程)

    转自:http://www.jizhuomi.com/software/160.html 一.模态对话框和非模态对话框 Windows对话框分为两类:模态对话框和非模态对话框. 模态对话框是这样的对话 ...

  2. SPSS科普 | 统计描述

    SPSS科普 | 统计描述 统计描述的目的就是了解数据的基本特征和分布规律,为进一步合理地选择统计方法提供依据.常用的有Frequencies.Descriptives 和Explore过程. 一.F ...

  3. WhaleCTF之隐写-Find

    WhaleCTF之隐写-Find 前往题目 图片保存到本地,用Stegsolve打开图片 找到二维码 用微信或qq扫描,得到flag~

  4. java代码优化写法1(转摘)

    源文地址:https://blog.csdn.net/qq_15766297/article/details/70503222 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修 ...

  5. [原创]mysql 5.6安装配置,主从分离,读写分离简单教程

    文章中参考使用了多个博客的资料,汇总而成!其流程准确性被人亦本人实践! https://blog.csdn.net/qq_35206261/article/details/81321201 https ...

  6. fwt优化+树形DP HDU 5909

    //fwt优化+树形DP HDU 5909 //见官方题解 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ #include <bits/ ...

  7. CentOS使用rpm离线安装mariadb

    本文不再更新,可能存在内容过时的情况,实时更新请移步原文地址:CentOS使用rpm离线安装mariadb: 环境: CentOS Linux release 7.6.1810 (Core) mari ...

  8. React学习整理

    React介绍 React设计思想及其独特,属于革命性创新,性能出众,代码逻辑却非常简单. 库(library):小而巧,库只提供了特定的api.优点是船小好调头,可以很方便的从一个库切换到另外的库, ...

  9. Gym-102141E

    https://vjudge.net/problem/Gym-102141E 用set乱搞 #include<iostream> #include<cstdio> #inclu ...

  10. hdu1527

    hdu1527两堆博弈模型,威佐夫博弈 #include<iostream> #include<cstdio> #include<queue> #include&l ...