日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mr. Main and Windmills 模拟,计算几何(昆明)

發布時間:2025/3/19 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mr. Main and Windmills 模拟,计算几何(昆明) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • O(nmlogn)O(nmlogn)O(nmlogn),這么一算都1e8了
  • long double,但好像double也可以過
#include <iostream> #include <algorithm> #include <cstring> #include <queue> #include <vector> #define debug(a) cout << #a << " = " << a << endl; //#define x first //#define y second #define LD long double using namespace std; typedef long long ll;const int N = 1005; const double INF = 1e9 + 7;struct point {LD x, y; }A[N], stk[N];LD slope(point s, point t) {if (s.x == t.x)return INF;return (t.y - s.y) / (t.x - s.x); }struct line {LD k, b;point fromP, endP;line(){}line(point s, point t){fromP = s, endP = t;k = slope(s, t);if (k == INF) b = INF;else b = s.y - k * s.x;} };point findPoint(line a, line b) {if (a.k == b.k)return point{INF, INF};LD xpos, ypos;if (a.k == INF)xpos = a.fromP.x;else if (b.k == INF)xpos = b.fromP.x;elsexpos = (b.b - a.b) / (a.k - b.k);if (a.k == 0)ypos = a.fromP.y;else if (b.k == 0)ypos = b.fromP.y;elseypos = xpos * a.k + a.b;return point{xpos, ypos}; }int getAllPoint(int n, int h, line city) {int cnt = 0;point s = city.fromP, t = city.endP;for (int i = 1; i <= n; i ++ ){if (i == h) continue;line now = line(A[i], A[h]);if (now.k == city.k)continue;point get = findPoint(now, city);if (get.x < min(s.x, t.x) || get.x > max(s.x, t.x) || get.y < min(s.y, t.y) || get.y > max(s.y, t.y))continue;stk[ ++ cnt] = get;}return cnt; }int main() {int n, m;scanf("%d%d", &n, &m);point s, t;scanf("%LF%LF%LF%LF", &s.x, &s.y, &t.x, &t.y);line city = line(s, t);for (int i = 1; i <= n; i ++ ){scanf("%LF%LF", &A[i].x, &A[i].y);}for (int i = 1; i <= m; i ++ ){int h, k;scanf("%d%d", &h, &k);int len = getAllPoint(n, h, city);if (k > len){printf("-1\n");}else{if (city.k == 0)sort(stk + 1, stk + 1 + len, [](point a, point b){return a.x < b.x;});elsesort(stk + 1, stk + 1 + len, [](point a, point b){return a.y < b.y;});if (s.y > t.y)reverse(stk + 1, stk + 1 + len);if (city.k == 0 && s.x > t.x)reverse(stk + 1, stk + 1 + len);printf("%.10LF %.10LF\n", stk[k].x, stk[k].y);}}return 0; }

總結

以上是生活随笔為你收集整理的Mr. Main and Windmills 模拟,计算几何(昆明)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。