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

题目的意思是给你一段长为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. 20155306 实验一《Java开发环境的熟悉》实验报告

    实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 1. ...

  2. Linux 用C语言实现简单的shell(1)

    发一波福利,操作系统的实验内容,大家可以借鉴一下,不过我的代码可能也存在一定的问题. 因为在一开始老师是一节一节课教的,当时并不知道后面还会用输入输出重定向,管道等一系列问题,我的兴趣也不在这个方面也 ...

  3. linux IPC机制学习博客

    要求 研究Linux下IPC机制:原理,优缺点,每种机制至少给一个示例,提交研究博客的链接 - 共享内存 - 管道 - FIFO - 信号 - 消息队列 研究博客 管道(PIPE) 管道(PIPE): ...

  4. Cache-Aside模式

    Cache-Aside 该模式是从数据仓库中将数据加载到缓存中,从而提高访问速度的一种模式.该模式可以有效的提高性能,同时也能一定程度上保证缓存中的数据和数据仓库中的数据的一致性,和同步数据到数据仓库 ...

  5. day3 RHCE

    10.配置NFS服务 在server0配置NFS服务,要求如下: 以只读的形式共享目录/public同时只能被example.com域中的系统访问. 以读写的形式共享目录/protected同时只能被 ...

  6. dsp6657的helloworld例程测试-第一篇

    环境搭建可以参考http://blog.sina.com.cn/s/blog_ed2e19900102xi2j.html 1. 先从mcsdk导入工程,helloworld例程 2. 提示有错误,估计 ...

  7. 【linux报错】-bash: xhost: command not found

    参考自:http://blog.csdn.net/csdnones/article/details/51513163,感谢原作者解决了我的问题. 执行xhost +,报以下错误,原因是因未没有安装相关 ...

  8. MQ配置安装

    一,MQ安装 ./mqlicense.sh -accept rpm -ivh MQSeries*.rpm --  rpm -qa|grep MQSeries 二,MQ配置 环境变量配置(MQM)实际安 ...

  9. Jmeter直连postgresql数据库进行压测

    关于Jmeter直连数据库进行压测,网上有好多教程了,pg数据库的相对少一些,今天自己测试了下,还是挺简单的,有个别需要注意的地方.相较于Loadrunner这么全面庞大的压测工具,Jmeter在数据 ...

  10. 算法与AI的暗黑面:3星|《算法的陷阱:超级平台、算法垄断与场景欺骗》

    算法的陷阱:超级平台.算法垄断与场景欺骗 全书讲算法与AI的暗黑面:价格歧视.导致算法军备竞赛.导致商家降价冲动降低.平台作恶(向劣质商家收费导致品质下降.与开发商一起分析用户隐私)等. 作者从商业. ...