HDU 6222 Heron and His Triangle

链接:http://acm.hdu.edu.cn/showproblem.php?pid=6222

思路: 打表找规律+大数运算

首先我们可以打个表暴力跑出前几个满足题意的T

打表代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. bool fun(double n) {
  4. if(abs(round(n) - n) < 0.000000000000001)
  5. return ;
  6. return ;
  7. }
  8.  
  9. int main()
  10. {
  11. for(int i = ;i <= ;i ++){
  12. double num = (i+)*sqrt(*(i-)*(i+))/;
  13. if(fun(num))
  14. cout<<i+<<endl;
  15. }
  16. }

打出表后会得到: 4,14,52,194,724等数据。。。经过推导我们会得到他们之间的公式: a[i] = a[i-1]*4-a[i-2],然后我们用大数模板去跑这串公式就好了

实现代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. /*bool fun(double n) {
  4. if(abs(round(n) - n) < 0.000000000000001)
  5. return 1;
  6. return 0;
  7. }
  8.  
  9. int main()
  10. {
  11. for(int i = 2;i <= 10000000;i ++){
  12. double num = (i+1)*sqrt(3*(i-1)*(i+3))/4;
  13. if(fun(num))
  14. cout<<i+1<<endl;
  15. }
  16. }*/
  17. string Mult(string s,int x) //大数乘以整形数
  18. {
  19. reverse(s.begin(),s.end());
  20. int cmp=;
  21. for(int i=;i<s.size();i++)
  22. {
  23. cmp=(s[i]-'')*x+cmp;
  24. s[i]=(cmp%+'');
  25. cmp/=;
  26. }
  27. while(cmp)
  28. {
  29. s+=(cmp%+'');
  30. cmp/=;
  31. }
  32. reverse(s.begin(),s.end());
  33. return s;
  34. }
  35.  
  36. string sub(string a,string b)
  37. {
  38. string c;
  39. bool ok=;
  40. int len1=a.length();
  41. int len2=b.length();
  42. int len=max(len1,len2);
  43. for(int i=len1;i<len;i++)
  44. a=""+a;
  45. for(int i=len2;i<len;i++)
  46. b=""+b;
  47. if(a<b)
  48. {
  49. string temp=a;
  50. a=b;
  51. b=temp;
  52. ok=;
  53. }
  54. for(int i=len-;i>=;i--)
  55. {
  56. if(a[i]<b[i])
  57. {
  58. a[i-]-=;
  59. a[i]+=;
  60. }
  61. char temp=a[i]-b[i]+'';
  62. c=temp+c;
  63. }
  64. int pos=;
  65. while(c[pos]=='' && pos<len) pos++;
  66. if(pos==len) return "";
  67. if(ok) return "-"+c.substr(pos);
  68. return c.substr(pos);
  69. }
  70. string s1[];
  71.  
  72. int main()
  73. {
  74. int t;
  75. cin>>t;
  76. string s;
  77. s1[] = "";s1[] = "";
  78. for(int i = ;i <= ;i ++)
  79. s1[i] = sub(Mult(s1[i-],),s1[i-]);
  80. while(t--){
  81. cin>>s;
  82. for(int i = ;i <= ;i ++)
  83. if(s1[i].size() > s.size()||(s1[i].size()==s.size()&&s1[i]>=s)){
  84. cout<<s1[i]<<endl;
  85. break;
  86. }
  87. }
  88. return ;
  89. }

HDU 6223  Infinite Fraction Path

链接:http://acm.hdu.edu.cn/showproblem.php?pid=6223

思路:bfs + 剪枝

算比较容易的bfs,一直没怎么写bfs,差点写自闭了。。。。调了半天才过。

实现代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int M = 4e5+;
  4. #define ll long long
  5. int vis[M]; //判断当前点是否被访问过了
  6. int n,a[M],top;
  7. int cnt[M]; //储存当前层被标记点的下标
  8. int mx[M]; //每一层的最大值
  9. struct node{
  10. long long id;
  11. int val,step;
  12. };
  13. //优先排步数小的,步数相等优先值大的
  14. bool operator < (node a,node b){
  15. if(a.step == b.step) return a.val < b.val;
  16. return a.step > b.step;
  17. }
  18. priority_queue<node> q;
  19. void bfs(){
  20. int last = -;
  21. while(!q.empty()){
  22. node now = q.top();
  23. q.pop();
  24. if(now.step != last) { //已经步入下一层了清空上一层的标记
  25. last = now.step;
  26. while(top) vis[cnt[--top]] = ;
  27. }
  28. //限制条件剪枝
  29. if(now.step == n) continue;
  30. if(vis[now.id]) continue; //当前点被访问过了,跳过
  31. if(mx[now.step] > now.val) continue; //当前点小于这一层的最大值,跳过
  32. //维护标记
  33. cnt[top++] = now.id;
  34. vis[now.id] = ; mx[now.step] = now.val;
  35. //将下一个点扔进队列中
  36. node next;
  37. next.id = (now.id*now.id+)%n;;
  38. next.val = a[next.id];
  39. next.step = now.step+;
  40. q.push(next);
  41. }
  42. for(int i = ;i < n;i ++) printf("%d",mx[i]);
  43. for(int i = ;i <= n;i ++) mx[i] = ;
  44. printf("\n");
  45. }
  46. char s[M];
  47. int main()
  48. {
  49.  
  50. int maxx,t;
  51. scanf("%d",&t);
  52. int t1 = t;
  53. while(t--){
  54. top = ;
  55. scanf("%d",&n);
  56. maxx = ;
  57. scanf("%s",s);
  58. for(int i = ;i < n;i ++){
  59. a[i] = s[i]-'';
  60. maxx = max(maxx,a[i]);
  61. }
  62. mx[] = maxx;
  63. for(int i = ;i < n;i ++)
  64. if(a[i] == maxx){
  65. node now; now.id = i;now.val = a[i],now.step = ;
  66. q.push(now);
  67. }
  68. printf("Case #%d: ",t1-t);
  69. bfs();
  70. }
  71. return ;
  72. }

HDU 6225  Little Boxes

链接:http://acm.hdu.edu.cn/showproblem.php?pid=6225

大数加法

签到题

实现代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. string sum(string s1,string s2)
  5. {
  6. if(s1.length()<s2.length())
  7. {
  8. string temp=s1;
  9. s1=s2;
  10. s2=temp;
  11. }
  12. int i,j;
  13. for(i=s1.length()-,j=s2.length()-;i>=;i--,j--)
  14. {
  15. s1[i]=char(s1[i]+(j>=?s2[j]-'':));
  16. if(s1[i]-''>=)
  17. {
  18. s1[i]=char((s1[i]-'')%+'');
  19. if(i) s1[i-]++;
  20. else s1=''+s1;
  21. }
  22. }
  23. return s1;
  24. }
  25. int main()
  26. {
  27. int n;
  28. string x;
  29. cin>>n;
  30. for(int i = ;i <= n;i ++){
  31. string ans = "";
  32. for(int j = ;j <= ;j ++){
  33. cin>>x;
  34. ans = sum(ans,x);
  35. }
  36. cout<<ans<<endl;
  37. }
  38. return ;
  39. }

HDU  6227  Rabbits

链接:http://acm.hdu.edu.cn/showproblem.php?pid=6227

思路: 求兔子最多跳的次数,排个序,两种情况取最大的:

第一种: 第二小的和最大的之间距离之差减去中间已经有位置的值

第二种: 倒着跳,第二大的和最小的距离之差减去中间已经有位置的值

签到题

实现代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int a[];
  4. int main()
  5. {
  6. int t,n,x;
  7. scanf("%d",&t);
  8. while(t--){
  9. scanf("%d",&n);
  10. for(int i = ;i <= n;i ++)
  11. scanf("%d",&a[i]);
  12. sort(a+,a++n);
  13. int ans = max(a[n]-a[]-n+,a[n-]-a[]-n+);
  14. printf("%d\n",ans);
  15. }
  16. return ;
  17. }

HDU  6228 Tree

链接:http://acm.hdu.edu.cn/showproblem.php?pid=6228

思路:

要求公共子集最大,我们肯定是优先选择距离大的两点染成相同的颜色(因为要留位置给其他颜色),要达到公共边最多,那么我们可以先对边进行分析,如果一条边左边结点的子树大于k,右边结点的子树也大于k那么这条边可以成为公共子集的一条因为我们是要求最大的,根据最优策略,肯定要将他加进最大公共子集中,找到这种边+1就好了。

实现代码;

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int M = 1e5 + ;
  4. vector<int>g[M];
  5. int ans,n,k,siz[M];
  6. void dfs(int u,int fa){
  7. siz[u] = ;
  8. for(int i = ;i < g[u].size();i ++){
  9. int v = g[u][i];
  10. if(v == fa) continue;
  11. dfs(v,u);
  12. siz[u] += siz[v];
  13. if(siz[v] >= k&&(n-siz[v])>=k) ans++;
  14. }
  15. }
  16.  
  17. int main()
  18. {
  19. int t,x,y;
  20. scanf("%d",&t);
  21. while(t--){
  22. memset(siz,,sizeof(siz));
  23. scanf("%d%d",&n,&k);
  24. for(int i = ;i <= n;i ++)
  25. g[i].clear();
  26. for(int i = ;i < n;i ++){
  27. scanf("%d%d",&x,&y);
  28. g[x].push_back(y);
  29. g[y].push_back(x);
  30. }
  31. ans = ;
  32. dfs(,-);
  33. printf("%d\n",ans);
  34. }
  35. }

2017ACM/ICPC亚洲区沈阳站-重现赛的更多相关文章

  1. HDU 6227.Rabbits-规律 (2017ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学))

    Rabbits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total S ...

  2. HDU 6225.Little Boxes-大数加法 (2017ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学))

    整理代码... Little Boxes Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/O ...

  3. 2017ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)

    Little Boxes Problem Description Little boxes on the hillside.Little boxes made of ticky-tacky.Littl ...

  4. 2016ACM/ICPC亚洲区沈阳站-重现赛赛题

    今天做的沈阳站重现赛,自己还是太水,只做出两道签到题,另外两道看懂题意了,但是也没能做出来. 1. Thickest Burger Time Limit: 2000/1000 MS (Java/Oth ...

  5. 2016ACM/ICPC亚洲区沈阳站-重现赛

    C.Recursive sequence 求ans(x),ans(1)=a,ans(2)=b,ans(n)=ans(n-2)*2+ans(n-1)+n^4 如果直接就去解...很难,毕竟不是那种可以直 ...

  6. hdu 5510 Bazinga (kmp+dfs剪枝) 2015ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)

    废话: 这道题很是花了我一番功夫.首先,我不会kmp算法,还专门学了一下这个算法.其次,即使会用kmp,但是如果暴力枚举的话,还是毫无疑问会爆掉.因此在dfs的基础上加上两次剪枝解决了这道题. 题意: ...

  7. 2015ACM/ICPC亚洲区沈阳站重现赛-HDU5512-Pagodas-gcd

    n pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai Mountain, l ...

  8. 2015ACM/ICPC亚洲区沈阳站-重现赛 M - Meeting (特殊建边,最短路)

    题意:有\(n\)个点,\(m\)个集合,集合\(E_i\)中的点都与集合中的其它点有一条边权为\(t_i\)的边,现在问第\(1\)个点和第\(n\)个点到某个点的路径最短,输出最短路径和目标点,如 ...

  9. 2015ACM/ICPC亚洲区沈阳站-重现赛 B - Bazinga (KMP)

    题意:给你\(n\)个字符串,\(s_1,s_2,...,s_n\),对于\(i(1\le i\le n)\),找到最大的\(i\),并且满足\(s_j(1\le j<i)\)不是\(s_i\) ...

随机推荐

  1. 常见camera测试卡

    常见camera测试卡     版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/luckywang1103/article/details/87166 ...

  2. 01-Mirrorgate简介

    1.项目信息 MirrorGate是一款WallBoard应用程序,旨在为团队提供与软件开发相关的所有不同领域的快速反馈.       项目地址:https://github.com/BBVA/mir ...

  3. RocketMQ环境搭建

    1 源码下载 wget http://mirror.bit.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip unzip ...

  4. NOI.ac #8 小w、小j和小z LIS

    传送门 题意:在一个数轴上,给出$N$个人的初始位置与速度(速度有方向),求最大的时间使得存在$N-K$个人在这一段时间内两两没有相遇.$1 \leq K \leq N \leq 10^5$ 显然有二 ...

  5. vue 中使用iconfont Unicode编码线上字体图标的流程

    1.打开http://www.iconfont.cn官网,搜索你想要的图标.添加字体图标到购物车,点击购物车然后添加至项目,点击确定 2.点击图标管理/我的项目,找到对应的文件,点击Unicode,然 ...

  6. core_cm4_simd.h文件是干嘛的?

    core_cm4_simd.h文件用于simd指令,即单指令多数据流,这个只有ARMv7架构才有,Cortex m3 m4 m7是ARMv7架构,而Cortex m0 m1是没有的. 所以,在新建Co ...

  7. KMeans算法分析以及实现

    KMeans KMeans是一种无监督学习聚类方法, 目的是发现数据中数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好. 无监督学习,也就是没有对应的标签,只有数据 ...

  8. Python高阶函数--map

    map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把list 的每个元素依次作用在函数 f 上,得到一个新的 list 并返回. 例如,对于lis ...

  9. Http指南(1)

    网关:是一种特殊的服务器,作为其他服务器的中间实体使用; Agent代理:所有发布web请求的应用程序都是HTTP Agent代理.Web浏览器其实就是一种代理; HTTP报文是在HTTP应用程序之间 ...

  10. tomcat内存溢出问题记录

    问题说明:公司内网环境中部署的jenkins代码发版平台突然不能访问了,查看tomcat的catalina.out日志发现报错如下: [root@redmine logs]# tail -f /srv ...