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列的点阵,问一共有多少条非水平非垂直的直线至少穿过其中的两个点. 思路: 没思路的题. 首先枚举矩形 ...
随机推荐
- HTML模版组件
1.介绍 BootStrap (最好看的) css js [x] 学习 BootStrap 规则 jQueryUI (美观一般,偏后台.*) css js [x] 学习 jQueryUI 规则 Eas ...
- Clustered和Nonclustered Indexes 各自得特点和区别及长短处
1 簇索引 簇索引对表的物理数据页中的数据按列进行排序然后再重新存储到磁盘上即簇索 引与数据是混为一体的它的叶节点中存储的是实际的数据由于簇索引对表中的数据一 一进行了排序因此用簇索引查找数据很快但由 ...
- Spring Developer Tools 源码分析:三、重启自动配置'
接上文 Spring Developer Tools 源码分析:二.类路径监控,接下来看看前面提到的这些类是如何配置,如何启动的. spring-boot-devtools 使用了 Spring Bo ...
- Airtest常见的素定位不到
一.为什么发这博客 前几天业务需要需要操作云手机进行爬取没办法只有混进airtest官方群边学习边进行开发,蛮简单的东西(可能是我之前会selenium,appuim关系吧),但是群里会有很多问题,关 ...
- CF思维联系–CodeForces - 222 C Reducing Fractions(数学+有技巧的枚举)
ACM思维题训练集合 To confuse the opponents, the Galactic Empire represents fractions in an unusual format. ...
- ACM周记
放假一周了,虽然知识都学完了,但是使用和会用还是很难,不能在按着这个情形发展下去,这样的话肯定完成不了自己的任务,所以必须要改变自己的学习方法和学习态度,学习态度,一个星期也睡够放松够了,也玩够了,该 ...
- POJ 2136 Vertical Histogram(当时写的比较恶心,优化一下)
Vertical Histogram Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21223 Accepted: 10048 ...
- 题解 bzoj 4398福慧双修(二进制分组)
二进制分组,算个小技巧 bzoj 4398福慧双修 给一张图,同一条边不同方向权值不同,一条边只能走一次,求从1号点出发再回到1号点的最短路 一开始没注意一条边只能走一次这个限制,打了个从一号点相邻节 ...
- UML笔记之类图
1.类与类之间关系在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合( ...
- dp D. Caesar's Legions
https://codeforces.com/problemset/problem/118/D 这个题目有点思路,转移方程写错了. 这个题目看到数据范围之后发现很好dp, dp[i][j][k1][k ...