方格问题
来源:互联网 发布:改良圈算法 matlab 编辑:程序博客网 时间:2024/04/27 12:46
【题目描述】
一个n*m的网格,由n*m个正方形构成。
求其一条对角线穿过的正方形个数。
注意,对角线经过正方形的边角,不算穿过。
【输入格式】
两个正整数n,m(1<=n,m<=1000000000)
【输出格式】
穿过的方格数。
【样例输入】
4 6
【样例输出】
8
【分析】
看到这题,第一反应就是空白。
然后百无聊赖的在几何画板里随意涂鸦,结果还真找到规律了233。
上面就是样例。
这条线很明显穿过了8个方格。
细心的人会发现,这条线中间打了一个点。
仔细观察,这个点正是这条线段上唯一(其他的图可能不唯一,甚至可能没有)的格点!
然后可以发现,这个点位于线段的中点(中点是在特殊情况下才发生的,但是不论对于哪个图,原点与这个点组成的线段的长度一定可以被原线段的长度整除)。
构造算法:求出与原点最近的格点,算出这条小线段经过了多少个格子(规律很简单,长+宽-1),然后乘上小线段在原线段中的个数即可。
下面的代码比较有技巧性,合并了不少同类项,得慢慢来喔~
#include<cstdio>int gcd(int x,int y){ if (!y) return x; else return gcd(y,x%y);}int main(){ int x,y; scanf("%d%d",&x,&y); int n=gcd(x,y); printf("%d",(x/n+y/n-1)*n);}
3 0
- 方格问题
- 方格遍历问题
- 方格取数问题
- 方格取数问题
- 方格取数问题
- 方格取点问题--题解
- swust1744: 方格取数问题
- [SMOJ2207]方格取数问题
- 走两次的方格取数问题
- 蓝桥杯BFS 移动方格的问题
- 南邮 OJ 1356 方格取数问题
- 方格取数问题(最大流)
- NKOI 1944 方格取数问题
- 方格取数问题:双线动态规划
- (动态规划问题)机器人走方格
- 方格路径问题升级之路
- 哈理工oj 1612 方格问题
- 动态规划中的方格问题 Please help me!!
- 布莱恩学院Graduation 布莱恩学院CertifiCate
- Pentester Lab学习计划之Web for Pentester II
- Jacobi Gauss-Seidel迭代法
- 卡森纽曼学院Graduation 卡森纽曼学院CertifiCate
- CSS中那些px、em、pt、rem、%、dp(android)单位
- 方格问题
- 结构体 共用体 枚举
- 【JVM】配置jvm内存
- Spring-boot介绍
- 基督兄弟大学Graduation 基督兄弟大学CertifiCate
- Linux内核文件系统 inode.c中_bmap函数理解
- (原创)Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)
- 克利夫兰州社区学院Graduation 克利夫兰州社区学院CertifiCate
- 数据结构