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


蔡珏
+关注
目录
打赏
0
0
0
0
2
分享
相关文章
|
11月前
2017ICPC沈阳区域赛 F
2017ICPC沈阳区域赛 F
52 0
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京),签到题4题
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京),签到题4题
145 0
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京),签到题5题
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京),签到题5题
302 0
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海),签到题6题
第 46 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海),签到题6题
155 0
2020ICPC昆明站——J.Mr. Main and Windmills(计算几何)
2020ICPC昆明站——J.Mr. Main and Windmills(计算几何)
170 0
2020ICPC昆明站——J.Mr. Main and Windmills(计算几何)
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海),签到题5题
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海),签到题5题
241 0
每日一题冲刺大厂第十三天提高组 第46届ICPC 东亚区域赛 A题
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题提高组是为了有余力的同学准备的,让大家练到各种各样的题目,一年以后,蜕变成为一个不一样的自己!
144 0
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京)L Let‘s Play Curling
本题的大体意思是,红队和蓝队在n+m的长度上,红队有n个石头,蓝队有m个,要求求红队尽可能的得分,得分规则是,确定一个c点,红队的某一个石头距离c的位置比蓝队的每一个石头都近,该石头可以得一分。
196 0
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京)L Let‘s Play Curling
互联网创业之父Paul Graham卸任YC总裁后的首次访谈
Paul Graham 是美国创业界的一个符号,他创办的创业孵化器 Y Combinator,颠覆了创业孵化器的概念,塑造了技术创业的新范式。从 2005 年成立至今,YC 孵化的估值超过 4000 万美元的创业项目达到 42 个,平均每年超过了 4 个,其中不乏 Dropbox、Airbnb、Heroku、Reddit、Justin.tv等明星公司。2014年,Paul Graham宣布卸任YC总裁。
366 0
互联网创业之父Paul Graham卸任YC总裁后的首次访谈
id software创始人约翰·卡马克语录
约翰·D·卡马克(John D. Carmack),是美国的电玩游戏程序员、id Software的创始人之一,id是一家专门开发电子游戏、视频游戏的公司,成立于1991年。 卡马克成长于美国堪萨斯城中心区的一个家庭,早年就对电脑产生了浓厚的兴趣。他后来从肖尼东高中毕业,随后考入了堪萨斯城的密苏里州州立大学。但是在两个学期之后,他从学校退学了,成为了一名自由程序员。
714 0
id software创始人约翰·卡马克语录
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等