题解


A AND Minimum Spanning Tree

参考代码:

  1. #include<bits/stdc++.h>
  2. #define maxl 200010
  3. using namespace std;
  4.  
  5. int n,ans1;
  6. int mi[];
  7. int ans[maxl];
  8.  
  9. inline void prework()
  10. {
  11. scanf("%d",&n);
  12. }
  13.  
  14. inline int find(int x)
  15. {
  16. for(int j=;j<=;j++)
  17. if((x&mi[j])==)
  18. return mi[j];
  19. }
  20.  
  21. inline void mainwork()
  22. {
  23. ans1=;int x;
  24. for(int i=;i<=n;i++)
  25. {
  26. if(i&)
  27. {
  28. x=find(i);
  29. if(x<=n)
  30. ans[i]=x;
  31. else
  32. ans1++,ans[i]=;
  33. }
  34. else
  35. ans[i]=;
  36. }
  37. }
  38.  
  39. inline void print()
  40. {
  41. printf("%d\n",ans1);
  42. for(int i=;i<=n;i++)
  43. printf("%d%c",ans[i],(i==n)?'\n':' ');
  44. }
  45.  
  46. int main()
  47. {
  48. mi[]=;
  49. for(int i=;i<=;i++)
  50. mi[i]=mi[i-]*;
  51. int t;
  52. scanf("%d",&t);
  53. for(int i=;i<=t;i++)
  54. {
  55. prework();
  56. mainwork();
  57. print();
  58. }
  59. return ;
  60. }

B Colored Tree

unsolved.

C Divide the Stones

题解:https://blog.csdn.net/liufengwei1/article/details/97970041

  1. #include<bits/stdc++.h>
  2. #define maxl 100010
  3. using namespace std;
  4.  
  5. long long k,n,sum,t;
  6. long long dy[maxl];
  7. long long last[maxl],to[maxl];
  8. long long tmp[maxl];
  9. bool flag;
  10. vector <long long> ans[maxl];
  11.  
  12. inline void prework()
  13. {
  14. scanf("%lld%lld",&n,&k);
  15. sum=1ll*n*(n+)/;
  16. for(long long i=;i<=k;i++)
  17. ans[i].clear();
  18. }
  19.  
  20. inline void mainwork()
  21. {
  22. flag=false;
  23. if(sum%k!=)
  24. return;
  25. sum=sum/k;
  26. long long id;
  27. t=n/k;
  28. if(t%==)
  29. {
  30. long long id=;
  31. for(long long i=;i<=k;i++)
  32. {
  33. for(long long j=;j<=t/;j++)
  34. {
  35. ans[i].push_back(id);
  36. ans[i].push_back(n-id+);
  37. id++;
  38. }
  39. }
  40. flag=true;
  41. }
  42. else
  43. {
  44. if(n/k==)
  45. {
  46. if(n==)
  47. {
  48. ans[].push_back();
  49. flag=true;
  50. }
  51. return;
  52. }
  53. for(long long i=;i<=k/+;i++)
  54. {
  55. dy[i]=k/+i;
  56. to[i]=(i-)*+;
  57. }
  58. for(long long i=k/+;i<=k;i++)
  59. {
  60. dy[i]=i-(k/)-;
  61. to[i]=(i-(k/)-)*;
  62. }
  63. for(long long i=;i<=k;i++)
  64. ans[i].push_back(i),last[i]=i,tmp[i]=i;
  65. long long num;
  66. for(long long i=;i<n/k;i++)
  67. {
  68. for(long long j=;j<=k;j++)
  69. {
  70. num=dy[last[j]]+(i-)*k;
  71. ans[j].push_back(num);
  72. last[j]=to[last[j]];
  73. tmp[j]+=num;
  74. }
  75. }
  76. for(long long i=;i<=k;i++)
  77. ans[i].push_back(sum-tmp[i]);
  78. flag=true;
  79. }
  80. }
  81.  
  82. inline void print()
  83. {
  84. if(flag)
  85. {
  86. puts("yes");
  87. long long l;
  88. for(long long i=;i<=k;i++)
  89. {
  90. for(long long j=;j<n/k;j++)
  91. printf("%lld%c",ans[i][j],(j==(n/k-))?'\n':' ');
  92. }
  93. }
  94. else
  95. puts("no");
  96. }
  97.  
  98. int main()
  99. {
  100. long long t;
  101. scanf("%lld",&t);
  102. for(long long i=;i<=t;i++)
  103. {
  104. prework();
  105. mainwork();
  106. print();
  107. }
  108. return ;
  109. }

D Enveloping Convex

unsolved.

E Good Numbers

unsolved.

F Horse

unsolved.

G Just an Old Puzzle

题解:百度“15难题”

参考代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int ans;
  5. int a[];
  6. int x[];
  7.  
  8. inline void prework()
  9. {
  10. for(int i=;i<=;i++)
  11. {
  12. scanf("%d",&a[i]);
  13. if(a[i]==)
  14. {
  15. a[i]=;
  16. ans=x[i];
  17. }
  18. }
  19. }
  20.  
  21. inline void mainwork()
  22. {
  23. for(int i=;i<=;i++)
  24. {
  25. for(int j=i+;j<=;j++)
  26. if(a[j]<a[i])
  27. ans++;
  28. }
  29.  
  30. }
  31.  
  32. inline void print()
  33. {
  34. if(ans&)
  35. puts("No");
  36. else
  37. puts("Yes");
  38. }
  39.  
  40. int main()
  41. {
  42. x[]=;x[]=;x[]=;x[]=;
  43. x[]=;x[]=;x[]=;x[]=;
  44. int t;
  45. scanf("%d",&t);
  46. for(int cas=;cas<=t;cas++)
  47. {
  48. prework();
  49. mainwork();
  50. print();
  51. }
  52. return ;
  53. }

H K-th Closest Distance

题解:主席树+二分 https://blog.csdn.net/liufengwei1/article/details/97948584

参考代码

  1. #include<bits/stdc++.h>
  2. #define maxl 100010
  3. using namespace std;
  4.  
  5. const int nn=1e6;
  6.  
  7. int n,m,tot,ans;
  8. int rt[maxl],a[maxl];
  9. struct node
  10. {
  11. int ls,rs,sum;
  12. }tree[maxl**];
  13.  
  14. inline void insert(int num,int &x,int l,int r)
  15. {
  16. tree[++tot]=tree[x];x=tot;
  17. ++tree[x].sum;
  18. if(l==r) return;
  19. int mid=(l+r)>>;
  20. if(num<=mid)
  21. insert(num,tree[x].ls,l,mid);
  22. else
  23. insert(num,tree[x].rs,mid+,r);
  24. }
  25.  
  26. inline void prework()
  27. {
  28. scanf("%d%d",&n,&m);
  29. for(int i=;i<=n;i++)
  30. scanf("%d",&a[i]);
  31. tree[].ls=tree[].rs=tree[].sum=;
  32. rt[]=;
  33. tot=;
  34. for(int i=;i<=n;i++)
  35. {
  36. rt[i]=rt[i-];
  37. insert(a[i],rt[i],,nn);
  38. }
  39. }
  40.  
  41. inline int query(int i,int j,int l,int r,int i1,int j1)
  42. {
  43. if(i1==l && j1==r)
  44. return tree[j].sum-tree[i].sum;
  45. int mid=(i1+j1)>>,ret;
  46. if(r<=mid)
  47. ret=query(tree[i].ls,tree[j].ls,l,r,i1,mid);
  48. else if(l>mid)
  49. ret=query(tree[i].rs,tree[j].rs,l,r,mid+,j1);
  50. else
  51. {
  52. ret=query(tree[i].ls,tree[j].ls,l,mid,i1,mid);
  53. ret+=query(tree[i].rs,tree[j].rs,mid+,r,mid+,j1);
  54. }
  55. return ret;
  56. }
  57.  
  58. inline bool jug(int l,int r,int mid,int p,int k)
  59. {
  60. int up=min(p+mid,nn),lo=max(,p-mid);
  61. int sum=query(rt[l-],rt[r],lo,up,,nn);
  62. if(sum<k)
  63. return false;
  64. else
  65. return true;
  66. }
  67.  
  68. inline void mainwork()
  69. {
  70. ans=;int up,lo,p,k,l,r,mid;
  71. for(int i=;i<=m;i++)
  72. {
  73. scanf("%d%d%d%d",&lo,&up,&p,&k);
  74. lo^=ans;up^=ans;p^=ans;k^=ans;
  75. l=;r=nn;
  76. while(l+<r)
  77. {
  78. mid=(l+r)>>;
  79. if(!jug(lo,up,mid,p,k))// <k
  80. l=mid;
  81. else
  82. r=mid;
  83. }
  84. if(jug(lo,up,l,p,k))
  85. ans=l;
  86. else
  87. ans=l+;
  88. printf("%d\n",ans);
  89. }
  90. }
  91.  
  92. inline void print(){}
  93.  
  94. int main()
  95. {
  96. int t;
  97. scanf("%d",&t);
  98. for(int i=;i<=t;i++)
  99. {
  100. prework();
  101. mainwork();
  102. print();
  103. }
  104. return ;
  105. }

I Linear Functions

unsolved.

J Minimal Power of Prime

参考代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long LL;
  4. const int size=1e6+;
  5. double eps=1e-;
  6. int p[size];bool prime[size];
  7. int mpri[size];
  8. int tot=;
  9. void init()
  10. {
  11. for(int i=;i<size;i++) prime[i]=true;
  12. for(int i=;i<size;i++)
  13. {
  14. if(prime[i])
  15. {
  16. p[++tot]=i;
  17. mpri[i]=i;
  18. }
  19. for(int j=;j<=tot&&p[j]*i<size;j++)
  20. {
  21. prime[i*p[j]]=false;mpri[i*p[j]]=p[j];
  22. if(i%p[j]==) break;
  23. }
  24. }
  25. }
  26. int main()
  27. {
  28. init();
  29. int t;
  30. long long x;
  31. scanf("%d",&t);
  32. while(t--)
  33. {
  34. scanf("%lld",&x);
  35. int cnt=;
  36. int ans=;
  37. if(x<size){
  38. int ps=mpri[x];
  39. while(x!=)
  40. {
  41. do x/=ps,cnt++;
  42. while(mpri[x]==ps);
  43. ps=mpri[x];
  44. ans=min(ans,cnt);
  45. }
  46. printf("%d\n",ans);
  47. continue;
  48. }
  49. bool flag=false;
  50. for(int i=;i<=tot;i++)
  51. {
  52. cnt=;
  53. if(x%p[i]==)
  54. {
  55. do x/=p[i],cnt++;
  56. while(x%p[i]==);
  57. }
  58. if(cnt==)
  59. {
  60. puts("");
  61. flag=true;
  62. break;
  63. }
  64. }
  65. if(flag) continue;
  66. LL sq=sqrt(x)+eps;
  67. if(sq*sq==x)
  68. {
  69. printf("2\n");
  70. }
  71. else
  72. {
  73. puts("");
  74. }
  75. }
  76. }

HDU 全国多校第四场 题解的更多相关文章

  1. HDU 多校第四场题解

    对于 D 题的原题意,出题人和验题人赛前都没有发现标算存在的问题,导致了许多选手的疑惑和时间的浪费,在此表示真诚的歉意! 预计难度分布: Easy - DJKL, Medium - ABCEG, Ha ...

  2. 2019HDU多校第四场题解

    1001.AND Minimum Spanning Tree 传送门:HDU6614 题意:给你一个又n个点的完全图,点编号从1~n,每条边的权值为被连接的两点编号按位与后的值.现在要你找到最小生成树 ...

  3. HDU 4635 多校第四场 1004 强联通

    我还有什么好说,还有什么好说...... 我是SBSBSBSBSBSBSBSBSBSBSBSBBSBSBSBSBSBSBSBSBS........................ 题意 思路什么的都不 ...

  4. HDU暑假多校第四场J-Let Sudoku Rotate

    一.题意 Sudoku is a logic-based, combinatorial number-placement puzzle, which is popular around the wor ...

  5. 2018 HDU多校第四场赛后补题

    2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...

  6. 牛客多校第四场sequence C (线段树+单调栈)

    牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \le ...

  7. HDU 5768Lucky7(多校第四场)容斥+中国剩余定理(扩展欧几里德求逆元的)+快速乘法

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=5768 Lucky7 Time Limit: 2000/1000 MS (Java/Others)    M ...

  8. [2019HDU多校第四场][HDU 6617][D. Enveloping Convex]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6617 题目大意:给出一凸包\(P\),求最小的与\(P\)相似且对应边平行的多边形,使得题目给出的\( ...

  9. 【HDU】4092 Nice boat(多校第四场1006) ——线段树 懒惰标记

    Nice boat Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) To ...

随机推荐

  1. jquery翻页turnjs简单实例

    jquery翻页turnjs简单实例<pre><div id="flipbook"> <div class="hard" styl ...

  2. (二十一)golang--字符串中的函数

    golang中ascii对应的字符占一个字节,而汉字占三个字节. (1)统计字符串的长度len (2)字符串遍历,同时处理有中文的问题r:=[]rune(str) (3)字符串转整数:n,err:= ...

  3. tornado的使用-参数篇

    tornado的使用-参数篇

  4. spark集群搭建(三台虚拟机)——系统环境搭建(1)

    !!!该系列使用三台虚拟机搭建一个完整的spark集群,集群环境如下: virtualBox5.2.Ubuntu14.04.securecrt7.3.6_x64英文版(连接虚拟机) jdk1.7.0. ...

  5. java编程思想第四版第十四章 类型信息习题

    fda dfa 第三题u package net.mindview.typeinfo.test4; import java.util.ArrayList; import java.util.Array ...

  6. Go 语言优秀资源整理,为项目落地加速🏃

    最后更新于2019.11.22 Go 语言优秀资源整理,为项目落地加速

  7. react-router重定向

    ① ②通过this.props重定向

  8. Redis高可用演进(一)

    原文链接:http://www.cnblogs.com/chenty/p/5152878.html 最近整理Redis,对sentinel有了更深入的理解,特地总结如下 1.主从Redis 主从red ...

  9. c# 为什么会出现死锁?多线程死锁怎么解决

    出现死锁必须满足以下几个条件: 1.互斥条件:该进程拥有的资源,其他进程只能等待其释放. 2.不剥夺条件:该进程拥有的资源只能由它自己来释放. 3.请求和保持条件:请求其他的资源,同时自己拥有的资源又 ...

  10. django ListView

    context_object_name = 'posts'. The template default name is ListView 'object_list' from .models impo ...