计蒜客 难题题库 035 三角形的内点
2015-08-10 09:25
204 查看
500次
6.8%
1000ms
65536K
在一个平面坐标系中,我们可以选出三个不全在一条线上的点构成一个三角形。我们称一个在三角形内(不包含三角形的边上),横纵坐标皆为整数的点位这个三角形的内点。 对于一个由(0,0)、(n,m)、(p,0)作为顶点构成的三角形,请你设计程序求出他的内点数。
输入包括一行,包括三个用空格分隔的整数,分别为n,m,p(0 ≤ n < 32000,0 < m < 32000,0 < p < 32000)。
输出仅一个数,为这个三角形的内点的个数。
输出:
6.8%
1000ms
65536K
在一个平面坐标系中,我们可以选出三个不全在一条线上的点构成一个三角形。我们称一个在三角形内(不包含三角形的边上),横纵坐标皆为整数的点位这个三角形的内点。 对于一个由(0,0)、(n,m)、(p,0)作为顶点构成的三角形,请你设计程序求出他的内点数。
输入包括一行,包括三个用空格分隔的整数,分别为n,m,p(0 ≤ n < 32000,0 < m < 32000,0 < p < 32000)。
输出仅一个数,为这个三角形的内点的个数。
样例1
输入:7 5 10
输出:
20
#include<iostream> using namespace std; const double mini = 1e-6; // WA 1e-3 -> 1e-6 bool equals(double a, double b){ a -= b; if(a < mini && a > -mini){ return 1; }else{ return 0; } } int main(){ double n, m, p, x1, x2; cin >> n >> m >> p; int a, b, y; int res = 0; for(y = 1; y < m; ++y){ x1 = n * y / m; x2 = y * (n - p) / m + p; a = x1 + 1; if(equals(x2, (int)x2)){ b = x2 - 1; }else{ b = x2; } if(a <= b){ res += b - a + 1; } } cout << res << endl; }
相关文章推荐
- 关于ExtJS4.1创建Window拖动时会出现两个相同的Window
- There Is No‘I’in Architecture
- javascript中间preventDefault与stopPropagation角色介绍
- chat
- sublime text3安装SublimeREPL--解决不能运行input()的问题
- Repeater控件的嵌套使用
- OPEN API
- Java太阳系小游戏分析和源码详解
- android ndk打印log信息
- dedecms全站URL静态化改造
- 线段树之HDU1754I Hate It
- 计蒜客 难题题库 034 灌溉
- 变形课
- Python之Window环境搭建
- Reuse Is About People and Education, Not Just Architecture
- C#与SQLite数据库
- 艰难的食物链的解题报告
- 如何不装Oracle就能连上企业内部数据库
- ios培训
- 喷水装置(一) nyoj 6 && 喷水装置(二)NYOJ_12