Time Limits: 1000 ms Memory Limits: 131072 KB
Description
Output
1 2 3 4 5 6 7
| 6 15698 17433 112412868 636515040 122123982 526131695 58758943 343718480 447544052 640491230 162809501 315494932 870543506 895723090
|
Sample Output
Data Constraint
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #include <bits/stdc++.h> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 200005 int n; ll P, Q, p, q; double k = 1000000000, lastk; struct Point { ll x, y; int num; }s[N],t[N]; ll gcd(ll a, ll b) {return !b ? a : gcd(b, a % b);} bool cmp(Point a, Point b) {return a.y < b.y;} double Abs(double x) {return x < 0 ? -x : x;} double getk(Point a, Point b) { return (double)(b.y - a.y) / (double)(b.x - a.x); } int main() { freopen("slope.in", "r", stdin); freopen("slope.out", "w", stdout); scanf("%d%d%d", &n, &P, &Q); for (int i = 1; i <= n; i++) { scanf("%lld%lld", &s[i].x, &s[i].y); t[i].x = Q * s[i].x; t[i].y = Q * s[i].y - P * s[i].x; t[i].num = i; } sort(t + 1, t + n + 1, cmp); for (int i = 1; i < n; i++) { double nowk = Abs(getk(t[i], t[i + 1])); if (nowk < k) { k = nowk; p = s[t[i + 1].num].y - s[t[i].num].y; q = s[t[i + 1].num].x - s[t[i].num].x; lastk = getk(s[t[i].num], s[t[i + 1].num]); } else if (nowk == k) { nowk = getk(s[t[i].num], s[t[i + 1].num]); if (nowk < lastk) { lastk = nowk; p = s[t[i + 1].num].y - s[t[i].num].y; q = s[t[i + 1].num].x - s[t[i].num].x; } } } p = Abs(p); q = Abs(q); ll g = gcd(p, q); printf("%lld/%lld\n", p / g, q / g); return 0; }
|
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 暗影小站! 注: 本博客暂不开设评论区,请使用邮件119548583@qq.com联系