(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;
}


目录
相关文章
2020ICPC昆明站——J.Mr. Main and Windmills(计算几何)
2020ICPC昆明站——J.Mr. Main and Windmills(计算几何)
162 0
2020ICPC昆明站——J.Mr. Main and Windmills(计算几何)
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京)L Let‘s Play Curling
本题的大体意思是,红队和蓝队在n+m的长度上,红队有n个石头,蓝队有m个,要求求红队尽可能的得分,得分规则是,确定一个c点,红队的某一个石头距离c的位置比蓝队的每一个石头都近,该石头可以得一分。
186 0
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京)L Let‘s Play Curling
|
9月前
2017ICPC沈阳区域赛 F
2017ICPC沈阳区域赛 F
46 0
|
人工智能 Go vr&ar
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海),签到题6题
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海),签到题6题
146 0
|
开发工具 git
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海),签到题5题
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海),签到题5题
216 0
|
人工智能 机器人
第10届山东省赛Wandering Robot(详细思路)
第10届山东省赛Wandering Robot(详细思路)
104 0
|
程序员 Linux 开发工具
id software创始人约翰·卡马克语录
约翰·D·卡马克(John D. Carmack),是美国的电玩游戏程序员、id Software的创始人之一,id是一家专门开发电子游戏、视频游戏的公司,成立于1991年。 卡马克成长于美国堪萨斯城中心区的一个家庭,早年就对电脑产生了浓厚的兴趣。他后来从肖尼东高中毕业,随后考入了堪萨斯城的密苏里州州立大学。但是在两个学期之后,他从学校退学了,成为了一名自由程序员。
692 0
id software创始人约翰·卡马克语录
|
机器学习/深度学习 人工智能 算法
DayDayUp:2020年全球顶尖计算机科学家1000排名正式发布!恭喜两位华人学者步入全球Top 10!
DayDayUp:2020年全球顶尖计算机科学家1000排名正式发布!恭喜两位华人学者步入全球Top 10!
DayDayUp:2020年全球顶尖计算机科学家1000排名正式发布!恭喜两位华人学者步入全球Top 10!

热门文章

最新文章