HDU2841 Visible Trees (容斥原理)
主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2841
题意:
一个人在(0,0)点,然后前面有一个m*n的格子 ,每一个格子的节点上有一棵树。问这个人站在原地能看到多少棵树
假设两棵树在一条直线上那么仅仅能看到最前面的一棵树。
分析:
假设一个数的坐标为(a,b)。那么坐标为(a*k,b*k)的都不能看见。假设a,b有公因子c那么我们肯定仅仅能看到(a/c,b/c)。
因此我们得出结论,能看到的树的横纵坐标一定互质。
那么我们就能够把问题转化为,从[1,n]有多少个数与m里的数互质。
那么仅仅用把[1,n]里的数都素因子分解了,然后容斥一下就搞定了。
代码例如以下:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std; const int maxn = 100010;
typedef long long LL; int Prim[maxn],num[maxn][20];
void init()
{
int i,j;
memset(Prim,0,sizeof(Prim));
for(i=1; i<=100000; i++) num[i][0]=0;
for(i=2; i<=100000; i++)
if(Prim[i]==0)
{
num[i][1]=i;
num[i][0]++;
for(j=i*2; j<=100000; j+=i)
{
num[j][++num[j][0]]=i;
Prim[j]=1;
}
}
} LL dfs(int id,int b,int now)//求不大于b的数中,与now不互质的数的个数;
{
LL ans=0;
for(int i=id;i<=num[now][0];i++)
ans+=b/num[now][i]-dfs(i+1,b/num[now][i],now);
return ans;
} int main()
{
int m,n,t;
cin>>t;
while(t--){
cin>>m>>n;
init();
long long sum=0;
for(int i=2;i<=m;i++)
sum+=n-dfs(1,n,i);
printf("%I64d\n",sum+n);
}
return 0;
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
HDU2841 Visible Trees (容斥原理)的更多相关文章
- hdu2848 Visible Trees (容斥原理)
题意: 给n*m个点(1 ≤ m, n ≤ 1e5),左下角的点为(1,1),右上角的点(n,m),一个人站在(0,0)看这些点.在一条直线上,只能看到最前面的一个点,后面的被档住看不到,求这个人能看 ...
- Hdu2841 Visible Trees 2017-06-27 22:13 24人阅读 评论(0) 收藏
Visible Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- hdu 2841 Visible Trees 容斥原理
Visible Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Pr ...
- HDU-2841 Visible Trees(莫比乌斯反演)
Visible Trees 传送门 解题思路: 实际上的答案就是1~n与1~m之间互质的数的对数,写出式子就是 \(ans=\sum^{n}_{i=1}\sum^{m}_{j=1}[gcd(i,j)= ...
- HDU2841 Visible Trees(容斥原理)
题目..大概就是有个m*n个点的矩形从(1,1)到(m,n),问从(0,0)出发直线看过去最多能看到几个点. 如果(0,0)->(x,y)和(0,0)->(x',y')两个向量平行,那后面 ...
- HDU 2841 Visible Trees 数论+容斥原理
H - Visible Trees Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- Visible Trees(hdu2841)
Visible Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- HDU 2841 Visible Trees(数论)
标题效果:给你个m*n方格,广场格从(1,1)开始. 在树中的每个点,然后让你(0,0)点往下看,问:你能看到几棵树. 解题思路:假设你的视线被后面的树和挡住的话以后在这条线上的树你是都看不见的啊.挡 ...
- Visible Trees HDU - 2841
Visible Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
随机推荐
- linux的make install命令
tar zxvf redis-2.8.15.tar.gz cd redis-2.8.15/ make make test make install
- 启发式算法、寻路算法A*算法
原文链接: http://blog.csdn.net/b2b160/article/details/4057781
- 编程语言大牛王垠:编程的智慧,带你少走弯路 [本文转载CocoaChina]
作者:王垠 授权本站转载. 编程是一件创造性的工作,是一门艺术.精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的“智慧”,并不是号称三天瘦二十斤的减肥药,它并不能代替你自己的勤奋.然而我希望它 ...
- JavaScript 客户端JavaScript之cookie和客户端持久性
Document对象都有一个cookie属性,它使得JavaScript代码能够在用户的硬盘上持久地存储数据, 并且能够获取以这种方式存储的数据.客户端持久性是赋予WEB应用程序记忆力的一种简单方法. ...
- String的format方法
摘自:http://xiongzhenhui.iteye.com/blog/940416 http://blueram.iteye.com/blog/441683 一.常规类型.字符类型和数值类型的格 ...
- A Linear Time Majority Vote Algorithm
介绍一种算法,它可以在线性时间和常数空间内,在一个数组内找出出现次数超过一半的某个数字. 要解决这个问题并不难,可以使用排序或哈希,但是这两种算法都不能同时满足时间或空间的要求. 然而,该算法(A L ...
- java include包含指令例子
1.项目架构 2. 代码 (1)top.jsp 2.copyright.jsp 3.index.jsp 4.效果图: 5.总结 期间也碰到过很多问题,例如我刚开始不是创建的java动态项目而是java ...
- Web API的CPU占用100%
我用Web API做了一个网站,网站很简单,请求就是几个普通的参数,提交到服务器后,在Web API里做一下参数验证,然后去访问Redis里的TIME命令,最后把TIME命令返回的结果计算出yyyy- ...
- MySQL执行外部sql脚本
1:-/mysql_test/test.sql create table student( sno int not null primary key auto_increment, sname ) n ...
- ASP.NET Web.Config 读资料 (学习笔记)
refer : http://www.cnblogs.com/fish-li/archive/2011/12/18/2292037.html 上面这篇写很好了. 在做项目时,我们经常会遇到一些资料,我 ...