题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4466

题意:给出一根长度为n的铁丝。将其分成若干段并将每段折成一个三角形,使得三角形都相似。有多少种分法?

思路:首先计算周长为M的三角形有多少个,设为f[M]。设三角形的三边a,b,c满足a<=b<=c,那么分两种情况:

(1)b=c,此时c的上限为(M-1)/2,下限为ceil(M/3)=(M+2)/3,所以此时的三角形个数为(M-1)/2-(M+2)/3+1;

(2)b!=c,那么b<=c-1,因为a+b>c>c-1,因此一般来说有多少个三角形(a,b,c-1)就有多少个三角形(a,b,c),但是此时要减去a+b=c的情况。三角形(a,b,c-1)的个数就是f[M-1]。此时若a+b=c,即M-1=a+b+c-1=c+c-1,即M=2c,因此M必须为偶数。a+b=c=M/2,使得a+b=M/2的有序(a<=b)二元组有M/2/2。

根据这两个可以得到计算f的递推关系。下面我们看怎么得到周长为M且三边满足Gcd(a,b,c)=1的三角形个数?这个可用于筛素数类似的方法得到。那么对于n,将其分成若干份,每份相等,那么不同的分法就是隔板法。

int f[N],Pow2[N];void init()
{int i,j;f[3]=1;for(i=4;i<N;i++){f[i]=f[i-1]+(i-1)/2-(i+2)/3+1;f[i]%=mod;if(i%2==0) (f[i]-=i/2/2)%=mod;if(f[i]<0) f[i]+=mod;}Pow2[0]=1;for(i=1;i<N;i++) Pow2[i]=Pow2[i-1]*2%mod;for(i=3;i<N;i++) for(j=2;j*i<N;j++){(f[j*i]-=f[i])%=mod;if(f[i]<0) f[i]+=mod;}
}int n;int main()
{init();int num=0;Rush(n){i64 ans=0,i;for(i=1;i*i<=n;i++) if(n%i==0){ans+=(i64)f[i]*Pow2[n/i-1];if(i*i!=n) ans+=(i64)f[n/i]*Pow2[i-1];ans%=mod;}if(ans<0) ans+=mod;printf("Case %d: %I64d\n",++num,ans);}
}

  

HDU 4466 Triangle(计数)相关推荐

  1. HDU 4466 Triangle(12年成都)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题目:给出长度为n的铁丝,将铁丝分为若干 部分,每 ...

  2. HDU - 4466 Triangle

    题目:给你一根长度为n的铁丝,将铁丝分成几部分,再把每部分都折成三角形,并且每个三角形都相似,而且三角形的边长是整数.问有多少种分法. 三角形三遍相等视为相等,三角形顺序不同视为不同 思路:设三角形3 ...

  3. HDU 4466 Triangle

    传送门 我们枚举x=a+b+cx=a+b+c,枚举aa,a<=b<=ca 把c=x−a−bc=x-a-b代入下面的不等式中,可以得到bb的范围 a+b>ca+b>c a+c&g ...

  4. hdu 4466 Triangle dp+数学

    分析 我们总共有n长的绳子,要求给绳子分段,每段都可以组成三角形,且所有三角形相似,三角形有顺序,问方案数 我们可以考虑一个F(x)F(x)F(x)为周长为x的三角形的个数 考虑三边a<=b&l ...

  5. hdu 4466 Triangle (数学)

    终于做完了这道题,发一下自己的理解,踩踩~~ 题意:给你一个长度n的铁丝,将它弯成一个三角形,或者分成m段,每段组成一个三角形,要求这些三角形相似,问有多少种不同的方案数? 题解: 设f[x] 表示 ...

  6. HDU 5914 - Triangle

    题目 HDU 5914 Triangle Problem Description Mr. Frog has n sticks, whose lengths are 1,2, 3⋯n respectiv ...

  7. hdu 4324 Triangle LOVE

    http://acm.hdu.edu.cn/showproblem.php?pid=4324 比赛的时候 脑子又短路了 "between A and B, if A don't love B ...

  8. HDU 5914 Triangle 数学找规律

    Triangle 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5914 Description Mr. Frog has n sticks, who ...

  9. HDU 4408 最小生成树计数详细解释

    一些blog看我的好迷,假解释看哭我了,这是我自己的理解,一道题看1天.菜哭 HDU 4408 无向图的最小生成树计数原理 就是在kruskal处理边的时候不断地找到联通块(由多个同长度的边组成的联通 ...

最新文章

  1. Python 炫技操作:合并字典的七种方法
  2. sublime text 3 python开发环境配置
  3. 网络安全性——IPSEC(续思科设备实现)
  4. https搭建(openssl)
  5. Struts2国际化文件乱码解决
  6. 在DNN中如何使FriendlyURL使用PageName作为页面名称
  7. LVS(2)——针对于LVS的增删改方法
  8. html 闪烁字,HTML最简单的文字闪烁代码
  9. python对文件的相关操作
  10. andriod studio在缩小图片_画图教室|有哪些办法可以有效缩小作品集的pdf文件大小?...
  11. Flask中制作博客首页的分类功能(一)
  12. 【VB6】如何用纯VB代码写个五子棋程序?(一)
  13. 高端物理学名词_物理专业名词
  14. 电脑扩展屏 HDMI转VGA
  15. Leetcode个人题解714
  16. Warshall‘s algorithm 算法的实现及优化(修改版)
  17. mac上好用的文档转换器Doxillion Plus
  18. 沃森和特朗普:一家伟大美国企业的兴与衰
  19. yaml的pip安装
  20. 匹配文件后缀名的正则表达式

热门文章

  1. 零售业将成人工智能系统支出额最高的行业
  2. 在一家公司呆了 10 年的程序员,最后都怎么了?
  3. 输入法大战,你用哪家输入法? | 每日趣闻
  4. WebShell代码分析溯源(第1题)
  5. Git基本命令 -- 别名 + 忽略 + 推送
  6. Css:背景色透明,内容不透明之终极方法!兼容所有浏览器
  7. HTML上传文件的多种方式
  8. django_2.0_请求处理
  9. Linux 第70天 mariadb transaction, log
  10. vc 6.0的安装问题