博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3090 Visible Lattice Points 法利系列||通过计
阅读量:6853 次
发布时间:2019-06-26

本文共 1655 字,大约阅读时间需要 5 分钟。

因为图像关于对角线对称。所以我们仅仅看下三角区域。

将x轴看做分母,被圈的点看成分子

依次是{1/2},{1/3,1/2},{1/4,3/4},{1/5,2/5,3/5,4/5}

写成前缀和的形式就是 {1/2},{

1/2,1/3,2/3},{
1/2,1/3,2/3,1/4,3/4},{
1/2,1/3,2/3,1/4,3/4,1/5,2/5,3/5,4/5}

发现。这就是一个法雷级数,即第k项添加的数就是phi[k]。

最后的答案*2+(0,1)+(1,0),(1,1)三个点就好了

#include 
#include
#include
using namespace std;#define N 1009int phi[N];int Farey[N]={0,0,1};void init(){ int i, j; for(i = 1; i < N; i++) phi[i] = i; for(i = 2; i < N; i++) if(i == phi[i]) for(j = i; j < N; j += i) phi[j] = (phi[j] / i) * (i - 1);}int main(){ init(); for(int i=3;i
没有发现这个规律的话,也能够递推打表做,类似矩阵和的存储,用gcd推断当前点是否被之前的点挡住。

#include 
#include
#include
#include
#include
using namespace std;int mp[1005][1005];bool vis[1005][1005];int gcd(int a,int b) {return a%b==0?b:gcd(b,a%b);}int a[1005][1005];int main(){ memset(vis,0,sizeof(vis)); int ans=0; for(int i=1;i<=1000;i++) { for(int j=1;j<=1000;j++) { int gg=gcd(i,j); if(vis[i/gg][j/gg]) { a[i][j]+=a[i-1][j]+a[i][j-1]; a[i][j]-=a[i-1][j-1]; continue; } else { vis[i][j]=1; a[i][j]+=a[i-1][j]+a[i][j-1]+1; a[i][j]-=a[i-1][j-1]; } } } int n; int ca=1; int cas; scanf("%d",&cas); while(cas--) { scanf("%d",&n); printf("%d %d %d\n",ca++,n,a[n][n]+2); } return 0;}

版权声明:本文博主原创文章,博客,未经同意不得转载。

你可能感兴趣的文章
网页布局之Div vs Table (2)
查看>>
可变参数列表
查看>>
BouncyCastle.Crypto的RSA算法调用源码
查看>>
vs2017 + Python3.6 +Django1.11 连接mysql数据库
查看>>
一张思维导图带你梳理HashMap相关知识
查看>>
MVC 从Excel导入到DataTable
查看>>
Symbol
查看>>
Selenium WebDriver + IE11 问题汇总
查看>>
Oracle数据库设置Scott登录
查看>>
IOS开发之UIScrollVIew运用
查看>>
iOS 基础-----关于UIView 的 frame 与 bounds
查看>>
ISO GPS定位,坐标转换以及如何显示
查看>>
深入理解Java:类加载机制及反射
查看>>
Use a PowerShell Module to Easily Export Excel Data to CSV
查看>>
Redis清理
查看>>
读书笔记—CLR via C#章节8-10
查看>>
洛谷 3804 【模板】后缀自动机
查看>>
LOJ 2736 「JOISC 2016 Day 3」回转寿司 ——堆+分块思路
查看>>
IE8爆出0day,影响所有版本Windows
查看>>
php: Cannot send session cache limiter
查看>>