HDU4466_Triangle
今天比赛做的一个题目,不过今天终于感受到了复旦题目有多坑了。
题目的意思是给你一段长为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的更多相关文章
随机推荐
- 20155232 2016-2017-2 《Java程序设计》第2周学习总结
20155232 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 类型 基本类型 整数(short.int.long) 字节(byte) -128~127 字 ...
- # 20155327 2016-20017-3 《Java程序设计》第3周学习总结
教材学习内容总结 第四章 认识对象 区分基本类型与类类型 基本类型: 1.整数:包括int,short,byte,long ,初始值为0 2.浮点型:float,double ,初始值为0.0 3.字 ...
- 2.Rest Server提供数据库的Json字符串
Delphi最大的特点是数据库操作便捷.为了能够给App提供数据,这里采用Rest Server后台,然后在用Json文件发送到APP前台. 1.后台的dataset转换为json. 这里百度后就可以 ...
- 2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 https://lydsy.com/JudgeOnline/problem.php?id=2288 分析: 贪心+堆+链表. 首先把序列变一下,把相 ...
- Configure,Makefile.am, Makefile.in, Makefile文件
一 软件安装关于 makefile文件问题 如果拿到的工程文件中,没有Makefile文件,而只有configure.in和Makefile.am文件,我们是不能够直接进行编译的,必须根据config ...
- axios封装(一)基础配置
axios 是目前流行的Promise网络请求库,在浏览器端他通过 xhr方式创建ajax请求.在node环境下,通过 http 库创建网络请求. axios 提供了丰富的配置,这里讲一讲我在工作中通 ...
- Java EE JSP编程基础
一.JSP编程介绍 JSP是实现普通静态HTML和动态HTML混合编码的技术,可以说是Servlet的一种变形,相比Servlet它更像普通的Web页面.JSP在第一次运行时会花费很长时间,原因在与其 ...
- Unity Lighting - Light Types 灯光类型(八)
Light Types 灯光类型 We have now covered some of the project settings which need to be considered befo ...
- [leetcode]三数之和
三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复 ...
- CSP201512-2:消除类游戏
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...