CF957E Contact ATC
二维偏序(逆序对)
因为风速vf,-w<=vf<=w,因此我们可以算出每一艘船到达原点的时间的取值范围
即取vf=w和vf=-w时,记ai为当vf=w时的用时,记bi为当vf=-w时的用时
所以现在问题转化:为每一元素有两个值ai和bi,求有多少对下标i,j满足a[i]<=a[j]且b[i]>=b[j]
这就是求二维偏序
将每一个元素以a升序为第一关键字,b降序为第二关键字,然后求b的逆序对即可
求逆序对用归并排序
#include <bits/stdc++.h>
using namespace std;
int n,w;
long long ans;
double a[100010],b[100010];
struct node
{
int f,x,v;
double a,b;
}sh[100010];
double m_abs(double x)
{
if (x<0)
return -x;
else
return x;
}
bool cmp(node x,node y)
{
return (x.a<y.a || (x.a==y.a && x.b>y.b));//先排序
}
void m_sort(int l,int r)//归并排序
{
if (l==r)
return;
int mid;
mid=(l+r)/2;
m_sort(l,mid);
m_sort(mid+1,r);
int ll,rr,now;
now=0;
ll=l;
rr=mid+1;
while (ll<=mid && rr<=r)
{
if (a[ll]<a[rr])
{
now++;
b[now]=a[ll];
ll++;
}
else
{
now++;
b[now]=a[rr];
rr++;
ans+=(long long)mid-ll+1;//统计逆序对
}
}
for (int i=ll;i<=mid;i++)
{
now++;
b[now]=a[i];
}
for (int i=rr;i<=r;i++)
{
now++;
b[now]=a[i];
}
for (int i=1;i<=now;i++)
{
a[l+i-1]=b[i];
}
}
int main()
{
scanf("%d%d",&n,&w);
for (int i=1;i<=n;i++)
{
scanf("%d%d",&sh[i].x,&sh[i].v);
if (sh[i].x>0)
sh[i].f=1;
}
for (int i=1;i<=n;i++)//a表示当vf=w时的用时,b表示当vf=-w时的用时
{
if (sh[i].f==0)
{
sh[i].a=m_abs((sh[i].x*1.0)/((sh[i].v+w)*1.0));
sh[i].b=m_abs((sh[i].x*1.0)/((sh[i].v-w)*1.0));
}
else
{
sh[i].b=m_abs((sh[i].x*1.0)/((sh[i].v-w)*1.0));
sh[i].a=m_abs((sh[i].x*1.0)/((sh[i].v+w)*1.0));
}
}
sort(sh+1,sh+1+n,cmp);
for (int i=1;i<=n;i++)
a[i]=sh[i].b;//求b的逆序对
m_sort(1,n);
printf("%lld\n",ans);
}
CF957E Contact ATC的更多相关文章
- Codeforces 924D Contact ATC (看题解)
Contact ATC 我跑去列方程, 然后就gg了... 我们计每个飞机最早到达时间为L[ i ], 最晚到达时间为R[ i ], 对于面对面飞行的一对飞机, 只要他们的时间有交集则必定满足条件. ...
- CF 472 div1 D. Contact ATC
#include <algorithm> #include <cmath> #include <cstdio> #include <cstring> # ...
- Codeforces956D. Contact ATC
$n \leq 100000$个飞机在坐标轴上,给坐标给速度,坐标速度异号,还有一个风速在$[-w,w]$区间,$w$比最小的速度绝对值要小.由于风速不知道,所以问有多少对飞机可能在原点相遇. 思维定 ...
- 2014 Visual Studio Contact(); 直播笔记
昨天微软干了几件了不起的事:.NET开发环境将开源.跨平台支持(Mac OS X和Linux).多设备支持(WP.Android和iOS)和Visual Studio免费(Visual Studio ...
- GConf error:Failed to contact configuration server
Linux系统运行一直正常,但是图形界面使用root账号登录时遇到下面错误,第一次遇到这么怪异的状况 具体错误信息如下所示: GConf error:Failed to contact configu ...
- 【USACO 3.1】Contact(01子串按出现次数排序)
题意:给你一个01字符串,将长度为a到b之间(包含a.b)的子串按照出现次数排序.注意输入输出格式 题解:01子串对应一个二进制,为了区别11和011这样的不同子串,我们把长度也记录下来,官方题解是在 ...
- Contact项目梳理
1. 共三张表:user用户表 group分组表 contact联系人表 entity 分模块,三个实体类,三个模块 2. 先注册再登录 DAO:UserDAOImpl public User g ...
- ATC空管系统的实时控制软件系统分析
什么是ATC空管系统? 空中交通管制的目的是对航空器的空中活动进行有效的管理,维护空中交通秩序,保障空中交通畅通,保证飞行安全和提高飞行效率,防止航空器相撞,防止机场及其附近空域的航空器同障碍物相撞. ...
- Facebook 网络模拟工具 ATC部署及使用
废话引用: Facebook此前开源了增强网络流量控制工具 ATC,能利用WiFi网络模拟各种移动网络,测试智能手机和APP在不同国家地区和应用环境下的性能表现.ATC能够模拟2G.2.5G(Edge ...
随机推荐
- ASP。NET MVC的部分视图和部分模型
下载source - 1.7 MB 介绍 本文解决了返回视图内容包含表单元素的部分视图的问题. 代码重用是一种非常有用的节省时间的特性,任何优秀的工程师都会在他们的工作过程中构建许多有用的函数.对于W ...
- 磁盘 IOPS(每秒读写次数) 的计算方法
一.磁盘 I/O 的概念 I/O 的概念,从字义来理解就是输入输出.操作系统从上层到底层,各个层次之间均存在 I/O.比如,CPU 有 I/O,内存有 I/O, VMM 有 I/O, 底层磁盘上也有 ...
- 【Zabbix】在CentOS 7上搭建Zabbix服务,收集Windows客户端计数器性能数据(含过程中遇到的问题解决方法)
1.环境 1.1.关闭防火墙 命令:systemctl stop firewalld 或者 systemctl stop firewalld.service (备注:相应的,若要开启防火墙,将对应的& ...
- linux c 多线程开发
在开发多线程程序时,当创建的线程数量特别多的时候,就会遇到线程数量的瓶颈. 多线程设置 设置内核参数 kernel.threads-max kernel.threads-max 是 linux 系统允 ...
- ng2 父子组件传值 - 状态管理
一. 父子组件之间进行直接通话 //父组件html <ul> <app-li [value] = "value" (liClick) = "liClic ...
- Vim最强调试插件:vimspector
最近看到了韦大在知乎的回答后,想去试用一下vimspector,却发现vimspector诞生两年了却没有介绍它的中文资料.我查阅官方文档遇到不少困难,在这里记录折腾出来的结果,与大家分享. vims ...
- docker overlay原理
周末两天研究了一下docker overlay网络的原理,因为我本身对go语言不太熟悉,直接看docker官方的libnetwork库看不太懂,看linux内核的vxlan代码又粗心大意,导致有一个环 ...
- 多测师讲解自动化测试 _RF自定义关键字_高级讲师肖sir
RF自定义关键字 在rf中叫关键字 在python中就叫做函数 或实例方法 我们自己可以写自定义关键字 自己创建一个库===库里面去创建模块===模块里面创建类和实例方法==>rf导入和引用 库 ...
- day31 Pyhton 总结
# 什么是封装? # 广义上(大家认为的) : # 把一类事务的相同的行为和属性归到一个类中 # class Dog: # def bite(self):pass ...
- ES6的7个实用技巧
Hack #1 交换元素 利用数组解构来实现值的互换 let a = 'world', b = 'hello' [a, b] = [b, a] console.log(a) // -> hell ...