今天比赛做的一个题目,不过今天终于感受到了复旦题目有多坑了。

题目的意思是给你一段长为n个单位长度的直线,你可以选择任意连续单位长度的线段组成三角形,可以组成任意你可以组成任意多个三角形,且要求其中所有的三角形相似。现在要你求出,总共有多少种三角形的情况。 详情见题目。

题目的意思明白了以后就可以开始思考具体怎么解题了。

比赛开始的时候我也很费解,到底怎么求出所有的排列组合的情况。

一开始我是这样考虑的,要使得最终的每一个三角形都相似,那么其中所有的三角形必须有一个不小于3的公约数,但是对于三角形的边长怎么不重复地搞出来还是没有办法。

其实是这样来搞的。我们用一个函数f(i)来表示周长为i的独特的三角形的数目有多少。我这里所谓的“独特”,其实是其不会与任何一个周长小于i的三角形相似。但是后来仔细一想就知道是gcd(a,b,c)=1,也就是说三角形的三边互质。同时f[i]表示的只是a不大于b,b不大于c的种类数量。

对于某一个i,其独特的种类数可以用类似容斥原理的方法求得。

什么意思呢?

另某一个中间变量tot=[sigama]f(x),(x为A的所有的约数),那么f(A)=count(x)-tot。这里count(x)表示周长为x的三角形的总数。

这样就可以得到所有的独特数了。

题目剩下的就比较简单了,枚举独特的三角形的时候对于后面的每一个独立的独特单元,它都有两种组合情况,要么与前面的组合,要么不组合,这样就可以快速幂解决了。

 #include <iostream>
#include <cstring>
#include <cstdio>
#define maxn 5000500
#define M 1000000007
#define ll long long
using namespace std; ll f[maxn]; ll count(ll x)
{
ll tot=;
for (int i=; i<=x/; i++)
{
int tep=x-i;
if (tep/>=max(i,(tep-i)/+))
{
tot=(tot+tep/-max(i,(tep-i)/+)+);
if (tot>=M) tot-=M;
}
}
return tot;
} ll get(ll x)
{
if (f[x]!=) return f[x];
ll tot=;
for (int i=; i<=x/; i++)
if (x%i==)
{
tot=(tot+get(i));
if (tot>=M) tot-=M;
}
f[x]=count(x)-tot;
if (f[x]<) f[x]+=M;
return f[x];
} ll power(ll x,ll y)
{
ll tot=;
while (y)
{
if (y&) tot=(tot*x)%M;
x=(x*x)%M;
y>>=;
}
return tot;
} int main()
{
ll n,ans,tep,cas=;
while (scanf("%I64d",&n)!=EOF)
{
ans=;
for (int i=; i*i<=n; i++)
{
if (n%i==)
{
tep=get(i);
tep=(tep*power(,n/i-))%M;
ans+=tep;
if (ans>=M) ans-=M; if (i*i!=n)
{
tep=get(n/i);
tep=(tep*power(,i-))%M;
ans+=tep;
if (ans>=M) ans-=M;
}
}
} printf("Case %I64d: %I64d\n",++cas,ans);
}
return ;
}

HDU4466_Triangle的更多相关文章

随机推荐

  1. 20155234 2006-2007-2 《Java程序设计》第4周学习总结

    20155234 2006-2007-2 <Java程序设计>第4周学习总结 教材学习内容总结 为了避免重复的行为定义使用继承. 要学会如何正确判断使用继承的时机以及继承之后如何活用多态. ...

  2. 客户端与服务器端同步Evernote

    原文地址:http://www.zhihu.com/question/20238731 Evernote的同步方式是 以本地为基准同步到网络 还是 以网络为基准同步到本地 的? 若客户端从未与服务器端 ...

  3. 【LG4091】[HEOI2016/TJOI2016]求和

    [LG4091][HEOI2016/TJOI2016]求和 题面 要你求: \[ \sum_{i=0}^n\sum_{j=0}^iS(i,j)*2^j*j! \] 其中\(S\)表示第二类斯特林数,\ ...

  4. WPF 如何自定义一个弹框

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 简述: 手工以原生Grid的方式,自定义了一个仿弹窗效果,优点可以自定义,缺点需要自己实现以及维护整个弹窗的效 ...

  5. 读懂UML类图

    平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...

  6. 【mysql优化】mysql count(*)、count(1)、count(主键字段)、count(非主键字段)哪个性能最佳

    测试结果为:count(*)和count(1)基本相等,count(非主键字段)最耗性能 -- 数据量 708254select count(*) from tmp_test1;-- avg 0.22 ...

  7. 区块链技术:每位CEO都应了解

    区块链技术有可能成为一项广泛应用的突破性技术,像蒸汽机.电力或因特网那 样,改变整个社会和经济的运行方式. 对企业而言,信任至关重要.今天,我们基于信任,将钱存放在银行,通过电商企业 网购产品,并且依 ...

  8. 内网集群准同步shell脚本

    在公司的内网中配置集群同步,可能是代理问题,ntpd和chrony都没有用,所以只好写shell脚本解决 前提条件集群中各台机器已经配置好了免密登录 一.免密登录配置 1. 用 root 用户登录.每 ...

  9. cmake-cmake.1-3.11.4机翻

    指数 下一个 | 上一个 | CMake » git的阶段 git的主 最新发布的 3.13 3.12 3.11.4 3.10 3.9 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 ...

  10. 梯度消失&&梯度爆炸

    转载自: https://blog.csdn.net/qq_25737169/article/details/78847691 前言 本文主要深入介绍深度学习中的梯度消失和梯度爆炸的问题以及解决方案. ...