链接:https://ac.nowcoder.com/acm/contest/923/D
来源:牛客网

时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

输入

复制

  1. 5
  2. -1 1
  3. -1 5
  4. 1 5
  5. 0 2
  6. 2 2
  7. 5

输出

复制

  1. 4
  2. 6
  3. 8
  4. 4
  5. 0

说明

如图所示,小w所在的基站为5号基站
示例2

输入

复制

  1. 5
  2. -1 1
  3. -1 5
  4. 1 5
  5. 0 2
  6. 2 2
  7. 1

输出

复制

  1. 0
  2. -1
  3. -1
  4. -1
  5. -1

说明

如图所示,小w所在的基站为1号基站。
由于1号基站没有出边,所以除了到自己的最小代价为0,无法到达其他基站。
示例3

输入

复制

  1. 5
  2. -2 2
  3. 2 2
  4. 1 1
  5. -1 1
  6. 1 1
  7. 3

输出

复制

  1. 4
  2. -1
  3. 0
  4. 2
  5. -1

说明

如图所示,小w所在的基站为3号基站,注意3号基站与2号5号基站的特征向量的叉积为0,所以没有边相连。
同理1号基站与4号基站也无边相连。

备注:

  1. 由于输入量和输出量比较大,请勿使用cin,cout进行输入输出。
    本题不会卡常数,不用特地使用输入输出挂。

思路:

题意:

t=|x1*y2-x2*y1|;

输出基本点(第k个点)到其他各点最小的t值,因为基本点可以途经其他点最后到达目标点,如果无法到达目标点那么输出-1,自己到达自己则输出0,否则输出t值

步骤:

1.讲点按照与x正方向轴的夹角(点都在x轴的上半部分,点的y值均大于0)由小到大排个序(操作就在cmp中)

2.然后遍历到所在的点,这个点之前的点输出的dp值均为-1,因为x1*y2-x2*y1<0

3,从该点之后的点进行操作

4.如果suan(start,i)==0,那么该点对应为-1,直接下一个数

5.每当该点a可以到达的时候,就把该点存储起来,然后遍历下一个点b,从基本点到b的t值如果>基本点到a的最小t值加a与b的t,那么就动态更新基本点到b的值

6.最后输出每个点的dp值即可。


代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int maxn=1e6+;
  5. struct node
  6. {
  7. ll x,y; int pos;
  8. }s[maxn];
  9. bool cmp(const node &x,const node &y)
  10. {
  11. long long temp=x.x*y.y-x.y*y.x;
  12. if(temp)
  13. {
  14. return temp>;
  15. }
  16. else
  17. {
  18. return x.x*x.x+x.y*x.y>y.x*y.x+y.y*y.y;
  19. }
  20. }
  21. ll suan(int i,int j)
  22. {
  23. return s[i].x*s[j].y-s[j].x*s[i].y;
  24. }
  25. ll dp[maxn]; int sta[maxn];
  26. int main()
  27. {
  28. int n,pos,start,top=;
  29. scanf("%d",&n);
  30. for(int i=;i<=n;i++)
  31. {
  32. scanf("%lld %lld",&s[i].x,&s[i].y);
  33. s[i].pos=i;
  34. }
  35. memset(dp,-,sizeof(dp));
  36. sort(s+,s++n,cmp);
  37. scanf("%d",&pos);
  38. for(int i=;i<=n;i++){
  39. if(s[i].pos==pos)
  40. {
  41. start=i;
  42. break;
  43. }
  44. }
  45. sta[top=]=start; dp[pos]=;
  46. for(int i=start+;i<=n;i++)
  47. {
  48. if(suan(start,i)==) continue;
  49. while(top>&&suan(sta[top-],sta[top])==) --top;//防止经过一系列出栈后,栈顶点与栈顶的下一个元素的t值为0.
  50. while(top>&&suan(sta[top],i)+dp[s[sta[top]].pos]>=suan(sta[top-],i)+dp[s[sta[top-]].pos]) --top;
  51. dp[s[i].pos]=dp[s[sta[top]].pos]+suan(sta[top],i);//更新数值
  52. sta[++top]=i;//栈的作用
  53. }
  54. for(int i=;i<=n;i++)
  55. {
  56. printf("%lld\n",dp[i]);
  57. }
  58. return ;
  59. }

牛客练习赛48 D 小w的基站网络的更多相关文章

  1. 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)

    牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...

  2. 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)

    牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...

  3. 牛客练习赛48 E 小w的矩阵前k大元素

    E 思路: 优先队列,将迭代器变量作为结构体的变量. 迭代器走的时候只能像一个方向走,另外一个方向只有最开始才走.如下图所示: 如果两个方向同时走,同一个值会被遍历多次,像上图那样就能保证每个位置都走 ...

  4. 牛客练习赛44 C 小y的质数 (数论,容斥定理)

    链接:https://ac.nowcoder.com/acm/contest/634/C 来源:牛客网 题目描述 给出一个区间[L,R],求出[L,R]中孪生质数有多少对. 由于这是一个区间筛质数的模 ...

  5. 牛客练习赛44 B 小y的线段 (思维)

    链接:https://ac.nowcoder.com/acm/contest/634/B 来源:牛客网 题目描述 给出n条线段,第i条线段的长度为a_ia i ​ ,每次可以从第i条线段的j位置跳到第 ...

  6. 牛客练习赛44 A 小y的序列 (模拟,细节)

    链接:https://ac.nowcoder.com/acm/contest/634/A 来源:牛客网 小y的序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...

  7. 牛客练习赛48 C,D,E

    C 小w的糖果 题意:3种操作,第一种是使pos右边的数全部+1,第二种是pos右边的数依次+k(k从1开始递增),第三种是pos右边的数依次+k^2(k从1开始递增). 解法:第一种我们很容易想到差 ...

  8. 牛客练习赛40 A 小D的剧场 (思维dp)

    链接:https://ac.nowcoder.com/acm/contest/369/A 题目描述 若你摘得小的星星 你将得到小的幸福  若你摘得大的星星 你将得到大的财富  若两者都能摘得 你将得到 ...

  9. 牛客练习赛40 C 小A与欧拉路(树的直径)

    链接:https://ac.nowcoder.com/acm/contest/369/C 题目描述 小A给你了一棵树,对于这棵树上的每一条边,你都可以将它复制任意(可以为0)次(即在这条边连接的两个点 ...

随机推荐

  1. this与super的语法比较

    this 代表当前对象 可以代表当前属性,当前方法,当前对象(整个自己). 作用:解决同名变量的同名问题,同明变量可能来源于父类,局部变量和成员变量... 语法使用:this( 实参... ); 调用 ...

  2. DB2连接

    ibm_db.connect 创建非持久连接. ibm_db.pconnect 创建持久连接. 在最初的Python脚本请求之后,持久的连接保持打开状态,这允许后续的Python请求重新使用连接. 后 ...

  3. Python运维-获取当前操作系统的各种信息

    #通过Python的psutil模块,获取当前系统的各种信息(比如内存,cpu,磁盘,登录用户等),并将信息进行备份 # coding=utf-8 # 获取系统基本信息 import sys impo ...

  4. 清除浮动最有效的css写法

    说起来呢,基本上只要你给容器div加了float的属性,就需要清除浮动来使页面显示正常,那么,到底有什么方法可以让浮动轻松清除呢? 可以用display:flex;替代,但是它对IE8,9支持不是很好 ...

  5. CSS 中的各种居中 (水平、垂直)

    导读: CSS 的居中有水平居中和垂直居中,这两种居中又分为行内元素居中和块级元素居中.根据父.子元素的高度是否清楚,又会使得不同的居中用不同方法.本文就其中一些情况做下简单说明,以作笔记之用,仅供大 ...

  6. React的性能优化 - 代码拆分之lazy的使用方法

    我们在某些网站上肯定看到过这样一种现象,页面上图片只有你滚动到那个位置附近的时候才会加载,否则就只占了个位,这就是延迟加载最普遍的应用场景. 我们react框架进行开发的时候也是一样,没有使用的组件是 ...

  7. Cannot proxy target class because CGLIB2 is not available .Add CGLIB to the class path or specify proxy interfaces…..

    报错:Cannot proxy target class because CGLIB2 is not available .Add CGLIB to the class path or specify ...

  8. 单核cpu实现多任务原理

  9. Galaxy

    Galaxy 在一维坐标轴上给出n个点,第i个点坐标为\(x_i\),现在你可以任意移动k个点的,最小化它们的方差,\(n\leq 50000\). 解 感觉以前写的太乱了,补一篇可以供快速阅读的题解 ...

  10. MySQL中可能遇到的问题及解决方法

    一.在创建存储函数时,出现错误: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQLDA ...