(2021 ICPC)亚洲区域赛(昆明)I.Mr. Main and Windmills

简介: (2021 ICPC)亚洲区域赛(昆明)I.Mr. Main and Windmills

题目

思路:选择每个点与其他点的连线与路线的交点(注意是否在线段上),然后sort排序。

#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
typedef pair<double, double> PDD;
int n, m;
double sx, sy, tx, ty;
double x[N], y[N];
PDD intersect(double x1, double y1, double x2, double y2)
{
  double k1, k2;
  if (x1 - x2 == 0)
  {
    k1 = 1e18;
  } else
  {
    k1 = (y1 - y2) / (x1 - x2);
  }
  if (tx - sx == 0)
  {
    k2 = 1e18;
  } else
  {
    k2 = (ty - sy) / (tx - sx);
  }
  double b1 = y1 - (double)x1 * k1;
  double b2 = ty - (double)tx * k2;
  if (k1 != 1e18 && k2 != 1e18)
  {
    double x = (b2 - b1) / (k1 - k2);
    double y = k1 * x + b1;
    return {x, y};
  } else
  {
    if (k1 == 1e18)
    {
      return {x1, k2 *x1 + b2};
    } else
    {
      return {sx, k1 *sx + b1};
    }
  }
}
int main()
{
  cin >> n >> m;
  cin >> sx >> sy >> tx >> ty;
  vector<vector<PDD>>p(n + 1);
  for (int i = 1; i <= n; i++)
  {
    cin >> x[i] >> y[i];
  }
  for (int i = 1; i <= n; i++)
  {
    for (int j = 1; j <= n; j++)
    {
      if (i == j) continue;
      auto t = intersect(x[i], y[i], x[j], y[j]);
      if (t.first != 1e18)
      {
        if (t.first >= min(sx, tx) && t.first <= max(sx, tx) && t.second >= min(sy, ty) && t.second <= max(sy, ty))
          p[i].push_back(t);
      }
    }
    if (sx < tx)
      sort(p[i].begin(), p[i].end());
    else
      sort(p[i].rbegin(), p[i].rend());
  }
  while (m--)
  {
    int idx, k;
    cin >> idx >> k;
    if (p[idx].size() < k)
    {
      cout << -1 << endl;
    } else
    {
      cout << fixed << setprecision(10);
      cout << p[idx][k - 1].first << ' ' << p[idx][k - 1].second << endl;
      //cout << p[idx][k - 1].first << ' ' << p[idx][k - 1].second << endl;
    }
  }
  return 0;
}


目录
相关文章
|
4月前
2017ICPC沈阳区域赛 F
2017ICPC沈阳区域赛 F
17 0
|
7月前
|
定位技术 Go
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(银川),签到题5题
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(银川),签到题5题
51 0
|
8月前
|
机器学习/深度学习 人工智能 BI
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南),签到题5题
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南),签到题5题
51 0
|
4月前
|
人工智能 NoSQL 机器人
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京),签到题4题
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京),签到题4题
64 0
|
10月前
|
机器学习/深度学习 人工智能
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(澳门),签到题4题
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(澳门),签到题4题
108 1
|
5月前
|
机器学习/深度学习 人工智能
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明),签到题4题
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明),签到题4题
32 0
|
6月前
|
人工智能 BI
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南),签到题2题
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南),签到题2题
40 2
|
9月前
|
人工智能 移动开发 分布式计算
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京),签到题5题
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京),签到题5题
176 0
|
11月前
|
机器学习/深度学习 物联网 BI
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明),签到题3题
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明),签到题3题
104 0
|
人工智能 Go vr&ar
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海),签到题6题
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海),签到题6题
94 0