UVALive3720
题目大意:见刘汝佳《算法竞赛入门经典——训练指南》P173。
解题思路:
问题可以转化为求共有多少条过点阵中的点的斜线。其中必定包含左斜线和右斜线,由于点阵式对称的,所以我们只需求出左右斜线中的一种的总数,乘2就可以得到答案。
我们先求出各点到其左上角的只经过两个点的左斜线的总数 cnt ,那么答案就是所有点的 cnt 的总和去掉其中重复计算的数值。设点阵上某点坐标为(i,j),则这个子问题可以转化为求 [ 1,i ] 和 [ 1,j ] 中互质的数对的个数。简单解释:对于点(i,j),若 gcd(i,j)=1,则该点到(0,0)的直线必定只经过此二点;否则你必定可以找到 x=i/gcd(i,j),y=j/gcd(i,j),(i,j)到(0,0)的直线经过(x,y)。而对于该点到左上角其他点(除了(0,0))的只经过两个点的直线,可以通过 [ 1,i ) 和 [ 1,j )中各点到(0,0)的只经过两个点的直线平移得到(如图1所示)。递推式为:cnt[i][j] = cnt[i-1][j] + cnt[i][j-1] - cnt[i-1][j-1] + (gcd(i,j)==1?1:0)。
现在来算最终答案 ans 。很自然的得出:ans[i][j] = ans[i-1][j] + ans[i][j-1] - ans[i-1][j-1] + cnt[i][j]。但这么计算会有一个重复:在 cnt[i][j] 中包含了 cnt[i/2][j/2] ,所以要再减去 cnt[i/2][j/2]。over.
AC代码:
#include <cstdio>
using namespace std;
const int maxn=;
int cnt[maxn][maxn],ans[maxn][maxn];
int gcd(int a,int b){
if (b == ) return a;
return gcd(b, a%b);
}
void init(){
for(int i=;i<maxn;i++){
for(int j=;j<maxn;j++){
cnt[i][j]=cnt[i-][j]+cnt[i][j-]-cnt[i-][j-]+(gcd(i,j)==?:);
}
}
for(int i=;i<maxn;i++){
for(int j=;j<maxn;j++){
ans[i][j]=ans[i-][j]+ans[i][j-]-ans[i-][j-]+cnt[i][j]-cnt[i/][j/];
}
}
}
int main(){
init();
int n,m;
while(scanf("%d%d",&n,&m)==&&n&&m){
printf("%d\n",ans[n-][m-]*);
}
return ;
}
UVALive3720的更多相关文章
- LA 3720 高速公路(互质判斜率)
https://vjudge.net/problem/UVALive-3720 题意: 有一个n行m列的点阵,问一共有多少条非水平非垂直的直线至少穿过其中的两个点. 思路: 没思路的题. 首先枚举矩形 ...
随机推荐
- 【JAVA基础】07 面向对象2
1. 代码块的概述和分类 面试的时候会问,开发不用或者很少用 代码块概述 在Java中,使用 {} 括起来的代码被称为代码块. 代码块分类 根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态 ...
- 写给Java程序员的Java虚拟机学习指南
大家好,我是极客时间<深入拆解Java虚拟机>作者.Oracle Labs高级研究员郑雨迪.有幸借这个专题的机会,能和大家分享为何Java工程师要学Java虚拟机?如何掌握Java虚拟机? ...
- IBM:向所有云平台开放Watson人工智能系统
据美国科技媒体TechCrunch报道,IBM今天宣布不再把沃森(Watson)品牌的人工智能服务局限于自家云计算服务,而是会允许其他企业在自己的数据中心里使用和运行这个平台."客户很难把人 ...
- Yii项目Security加密解密类提取
<?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * ...
- Linux笔记(shell基础,历史命令,命令补全/别名,通配符,输出重定向)
一.shell 基础 shell是个命令解释器,提供用户和机器之间的交互 每个用户都可以拥有自己特定的shell centos7默认Shell为bash(Bourne Agin shell) 除了ba ...
- codeforces 1287A -Angry Students(模拟)
It's a walking tour day in SIS.Winter, so t groups of students are visiting Torzhok. Streets of Torz ...
- Hadoop-wordCount实例代码编写(Hadoop学习第四天)
1.新建一个maven项目2.pom文件中引入以下jar包<dependency> <groupId>org.apache.hadoop</groupId> < ...
- c语言中的malloc函数
少壮不努力,大一的时候c语言学得不扎实,最近学数据结构的时候看到c语言中malloc函数都不知道了,这里记录一下,避免以后再忘. malloc的全称是memory allocation,中文叫动态内存 ...
- puamap是什么意思
artists map 定义格式:[puamap代号 名] 相关属性: 1.FIGHT 2.SAFE 安全区域 3.DARK 4.NEEDHOLE 配合mapinfo里 x,y -> x1,y1 ...
- Python-SHA256加密算法接口测试
前言 小伙伴们在做接口测试的时候,是否遇到一些需要加密的接口,但是不知如何进行测试呢?今天我们来学习一下SHA256加密算法接口如何进行测试的. SHA256加密算法介绍: 比特币挖矿的御用算法 SH ...