1. #include <algorithm>
  2. #include <cmath>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <iostream>
  6. #include <map>
  7. #include <queue>
  8. #include <set>
  9. #include <stack>
  10. #include <vector>
  11. const int N = 1e5 + 5;
  12. struct fraction {
  13. long long num, deno;
  14. template <typename T>
  15. static inline T gcd(const T a, const T b) {
  16. return (b == 0) ? a : gcd(b, a % b);
  17. }
  18. fraction() {}
  19. inline void simplify() {
  20. if (deno < 0) {
  21. num *= -1;
  22. deno *= -1;
  23. }
  24. long long g = gcd(num < 0 ? -num : num, deno);
  25. num /= g;
  26. deno /= g;
  27. }
  28. fraction(long long _num, long long _deno) : num(_num), deno(_deno) { simplify(); }
  29. inline bool operator<(const fraction& rhs) const { return num * rhs.deno < deno * rhs.num; }
  30. inline bool operator!=(const fraction& rhs) const { return num * rhs.deno != deno * rhs.num; }
  31. };
  32. std::pair<fraction, fraction> T[N];
  33. std::pair<fraction, int> D[N];
  34. int p[N];
  35. int X[N], V[N];
  36. int bitTree[N];
  37. void add(int pos, int num) {
  38. for (int i = ++pos; i < N; i += (i & -i)) {
  39. bitTree[i] += num;
  40. }
  41. }
  42. int sum(int pos) {
  43. int result = 0;
  44. for (int i = ++pos; i; i -= (i & -i)) {
  45. result += bitTree[i];
  46. }
  47. return result;
  48. }
  49. int main() {
  50. int n, w;
  51. while (~scanf("%d %d", &n, &w)) {
  52. for (int i = 0; i < n; ++i) {
  53. scanf("%d %d", &X[i], &V[i]);
  54. }
  55. for (int i = 0; i < n; ++i) {
  56. long long v1 = V[i] - w;
  57. long long v2 = V[i] + w;
  58. T[i] = {fraction(-X[i], v1), fraction(-X[i], v2)};
  59. }
  60. for (int i = 0; i < n; ++i) {
  61. T[i].second.num *= -1;
  62. }
  63. std::sort(T, T + n); //-w increase and w descend
  64. for (int i = 0; i < n; ++i) {
  65. T[i].second.num *= -1;
  66. }
  67. for (int i = 0; i < n; ++i) {
  68. D[i] = {T[i].second, i};
  69. }
  70. std::sort(D, D + n);
  71. for (int i = 0, rk = -1; i < n; ++i) {
  72. if ((i == 0) || D[i].first != D[i - 1].first)
  73. ++rk;
  74. p[D[i].second] = rk;
  75. }
  76. long long ans = 0;
  77. for (int i = 0; i < n; ++i) {
  78. ans += sum(N - 1) - sum(p[i] - 1);
  79. add(p[i], 1);
  80. }
  81. printf("%lld\n", ans);
  82. }
  83. return 0;
  84. }

CF 472 div1 D. Contact ATC的更多相关文章

  1. CF#462 div1 D:A Creative Cutout

    CF#462 div1 D:A Creative Cutout 题目大意: 原网址戳我! 题目大意: 在网格上任选一个点作为圆中心,然后以其为圆心画\(m\)个圆. 其中第\(k\)个圆的半径为\(\ ...

  2. Codeforces 924D Contact ATC (看题解)

    Contact ATC 我跑去列方程, 然后就gg了... 我们计每个飞机最早到达时间为L[ i ], 最晚到达时间为R[ i ], 对于面对面飞行的一对飞机, 只要他们的时间有交集则必定满足条件. ...

  3. CF#345 (Div1)

    论蒟蒻如何被cf虐 以下是身败名裂后的题解菌=========== Div1 A.Watchmen 有n个点,每个点有一个坐标.求曼哈顿距离=欧几里得距离的点对数量. 只需要统计x或y一样的点对数量. ...

  4. CF #356 div1 A. Bear and Prime 100

    题目链接:http://codeforces.com/contest/679/problem/A CF有史以来第一次出现交互式的题目,大致意思为选择2到100中某一个数字作为隐藏数,你可以询问最多20 ...

  5. CF #228 div1 B. Fox and Minimal path

    题目链接:http://codeforces.com/problemset/problem/388/B 大意是用不超过1000个点构造一张边权为1的无向图,使得点1到点2的最短路的个数为给定值k,其中 ...

  6. CF #349 div1 B. World Tour

    题目链接:http://codeforces.com/problemset/problem/666/B 大意是给一张有向图,选取四个点,使得走这四个点,任意两个点之间走最短路,总距离最长. 3000个 ...

  7. CF #335 div1 A. Sorting Railway Cars

    题目链接:http://codeforces.com/contest/605/problem/A 大意是对一个排列进行排序,每一次操作可以将一个数字从原来位置抽出放到开头或结尾,问最少需要操作多少次可 ...

  8. CF #345 Div1 D Zip-line

    题目链接:http://codeforces.com/contest/650/problem/D 大意是给一个数组,若干询问,每一次把一个数字改为另一个数字,问当前数组最长上升子序列,询问之间是独立的 ...

  9. CF #299 div1 B. Tavas and Malekas KMP-next数组

    题目链接:http://codeforces.com/contest/536/problem/B 一个原始字符串,一个未知字符串,每一次从pos[i]开始覆盖未知字符串,问最后字符串的形式,以及判断过 ...

随机推荐

  1. node命令curl

    一.打开另一个命令行窗口,运行下面的命令. curl -X POST --data "name=Jack" 127.0.0.1:3000 上面代码使用 POST 方法向服务器发送一 ...

  2. poj-3660-cows contest(不懂待定)

    Description N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming con ...

  3. http,socks4,socks5代理的区别

    HTTP代理 能够代理客户机的HTTP访问,主要是代理浏览器访问网页,它的端口一般为80.8080.3128等: SOCKS代理 SOCKS代理与其他类型的代理不同,它只是简单地传递数据包,而并不关心 ...

  4. 网络通信 --> socket通信

    socket通信 socket是应用层与TCP/IP协议族通信的中间软件抽象层,是一组接口.工作原理如下: 具体过程:服务器端先初始化socket,然后与端口绑定(bind),对端口进行监听(list ...

  5. 测试对bug如何分析和定位

    如何去区分一个功能测试工程师的水平高和低? 可以从很多个方面去检查,比如测试的思路, 比如测试用例的覆盖度?,比如测试出bug是否能够定位到根因? 上面说的各个方面都很合理,那我们平常如何如更深的定位 ...

  6. java中的IO 的示例

    字符流 package jd_1; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNot ...

  7. drbd(三):drbd的状态说明

    本文目录:1.drbd配置文件2.状态 2.1 连接状态(connect state,cs)和复制状态 2.2 角色状态(roles,ro) 2.3 磁盘状态(disk state,ds) 2.4 I ...

  8. swift textview禁止用户使用复制粘贴

    //自定义一个TextView class Own_TextView: UITextView { override func caretRect(for position: UITextPositio ...

  9. C语言博客作业--函数嵌套调用

    一.实验作业(6分) 本周作业要求: 选一题PTA题目介绍. 学习工程文件应用,设计实现学生成绩管理系统. 学生成绩管理系统要求 设计一个菜单驱动的学生成绩管理程序,管理n个学生m门考试科目成绩,实现 ...

  10. java 二维码解析和生成

    package ykxw.web.qrcode.utils; import java.awt.Color; import java.awt.Graphics2D; import java.awt.im ...