博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 924D Contact ATC (看题解)
阅读量:5316 次
发布时间:2019-06-14

本文共 2812 字,大约阅读时间需要 9 分钟。

我跑去列方程, 然后就gg了。。。

我们计每个飞机最早到达时间为L[ i ], 最晚到达时间为R[ i ], 

对于面对面飞行的一对飞机, 只要他们的时间有交集则必定满足条件。

对于相同方向飞行的飞机, 只有其中一个的时间包含另一个的时间才满足条件。

#include
#define LL long long#define fi first#define se second#define mk make_pair#define PLL pair
#define PLI pair
#define PII pair
#define SZ(x) ((int)x.size())#define ull unsigned long longusing namespace std;const int N = 2e5 + 7;const int inf = 0x3f3f3f3f;const LL INF = 0x3f3f3f3f3f3f3f3f;const int mod = 1e9 + 7;const double eps = 1e-8;const double PI = acos(-1);struct Bit { int a[N]; void init() { memset(a, 0, sizeof(a)); } void modify(int x, int v) { for(int i = x; i < N; i += i & -i) a[i] += v; } int sum(int x) { int ans = 0; for(int i = x; i; i -= i & -i) ans += a[i]; return ans; } int query(int L, int R) { if(L > R) return 0; return sum(R) - sum(L - 1); }};struct Node { Node(LL a, LL b) : a(a), b(b) {} bool operator < (const Node& rhs) const { return a * rhs.b < rhs.a * b; } bool operator == (const Node& rhs) const { return a * rhs.b == rhs.a * b; } void print() { printf("%.5f ", 1.0 * a / b); } LL a, b;};int n, w, x[N], v[N];LL ans = 0;vector
vc[2];vector
hs;Bit bit;bool cmp(PII& a, PII& b) { if(a.fi == b.fi) return a.se < b.se; return a.fi > b.fi;}LL solve(vector
& vc) { bit.init(); LL ans = 0; sort(vc.begin(), vc.end(), cmp); for(int i = 0; i < SZ(vc); i++) { ans += bit.sum(vc[i].se); bit.modify(vc[i].se, 1); } return ans;}int main() { scanf("%d%d", &n, &w); for(int i = 1; i <= n; i++) { scanf("%d%d", &x[i], &v[i]); if(x[i] < 0) { hs.push_back(Node(-x[i], v[i] + w)); hs.push_back(Node(-x[i], v[i] - w)); } else { hs.push_back(Node(x[i], w - v[i])); hs.push_back(Node(x[i], -w - v[i])); } } sort(hs.begin(), hs.end()); hs.erase(unique(hs.begin(), hs.end()), hs.end()); for(int i = 1; i <= n; i++) { if(x[i] < 0) { int L = lower_bound(hs.begin(), hs.end(), Node(-x[i], v[i] + w)) - hs.begin() + 1; int R = lower_bound(hs.begin(), hs.end(), Node(-x[i], v[i] - w)) - hs.begin() + 1; vc[0].push_back(mk(L, R)); } else { int L = lower_bound(hs.begin(), hs.end(), Node(x[i], w - v[i])) - hs.begin() + 1; int R = lower_bound(hs.begin(), hs.end(), Node(x[i], -w - v[i])) - hs.begin() + 1; vc[1].push_back(mk(L, R)); } } ans += solve(vc[0]); ans += solve(vc[1]); ans += 1ll * SZ(vc[0]) * SZ(vc[1]); bit.init(); for(auto& t : vc[1]) bit.modify(t.se, 1); for(auto& t : vc[0]) ans -= bit.sum(t.fi - 1); bit.init(); for(auto& t : vc[1]) bit.modify(t.fi, 1); for(auto& t : vc[0]) ans -= bit.query(t.se + 1, N - 1); printf("%lld\n", ans); return 0;}/**/

 

转载于:https://www.cnblogs.com/CJLHY/p/10486254.html

你可能感兴趣的文章
TCP粘包拆包问题
查看>>
SQL Server中利用正则表达式替换字符串
查看>>
POJ 1015 Jury Compromise(双塔dp)
查看>>
论三星输入法的好坏
查看>>
Linux 终端连接工具 XShell v6.0.01 企业便携版
查看>>
JS写一个简单日历
查看>>
Python 发 邮件
查看>>
mysql忘记密码的解决办法
查看>>
全面分析Java的垃圾回收机制2
查看>>
[Code Festival 2017 qual A] C: Palindromic Matrix
查看>>
修改博客园css样式
查看>>
Python3 高阶函数
查看>>
初始面向对象
查看>>
leetcode Letter Combinations of a Phone Number
查看>>
Unity 5.4 测试版本新特性---因吹丝停
查看>>
7.5 文件操作
查看>>
MyEclipse中将普通Java项目convert(转化)为Maven项目
查看>>
node js 安装.node-gyp/8.9.4 权限 无法访问
查看>>
windows基本命令
查看>>
VMware中CentOS设置静态IP
查看>>