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 ...
随机推荐
- CF600E Lomsat gelral 树上启发式合并
题目描述 有一棵 \(n\) 个结点的以 \(1\) 号结点为根的有根树. 每个结点都有一个颜色,颜色是以编号表示的, \(i\) 号结点的颜色编号为 \(c_i\). 如果一种颜色在以 \(x\) ...
- 05 C语言的数据类型
C语言的数据类型 在C 中,数据类型是用来声明不同类型的变量或函数的一个广泛的概念.变量的数据类型决定了变量存储占用的空间大小,以及如何去解释存储的位模式. C 中的数据类型可分为以下几大类: 序号 ...
- Ubuntu通过Apache安装WebDav
使用KeePass保存密码,在个人服务器上安装WebDav协议. # 安装Apache2服务器 sudo aptitude install -y apache2 # 开启Apache2中对WebDav ...
- 为了省钱,我用1天时间把PHP学了!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你在通往架构师的路上吗? 程序员这个行业就像是在不断的打怪升级,突破每一阶段的瓶颈期 ...
- cmd备份数据库,还原数据库,仅限于php
第一:先备份数据库 1.进入cmd(黑盒子) 2.进入phpstudy所在的盘 3.cd E: 3.cd phpstudy; 4.cd PHPTutorial 5.cd mysql; 6.cd bin ...
- C#实现迭代器
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示.C#中使用IEnumerator接口实现,Java中使用Iterator接口实现,其中原理都差 ...
- Vue学习 一 环境搭建
Vue ui 启动 创建一个新项目 包管理器 npm Bable 转换js 至低版本的支持(兼容低版本) TypeScript 对TypeScript 的支持 (暂时不需要) PWA ...
- 利用github创建个人网站
先建个仓库,仓库名为: 用户名.github.io 进入仓库,删除README.md文件 新建个文件,文件名为: index.html,内容根据自己要求编写 打开网站,地址:https://用户名.g ...
- 【C语言教程】“双向循环链表”学习总结和C语言代码实现!
双向循环链表 定义 双向循环链表和它名字的表意一样,就是把双向链表的两头连接,使其成为了一个环状链表.只需要将表中最后一个节点的next指针指向头节点,头节点的prior指针指向尾节点,链表就能成环儿 ...
- zookeeper-(单机,伪集群)
安装zookeeper(单机,伪集群): 1.下载 登陆zookeeper官网下载 https://zookeeper.apache.org/ 或者 https://mirror.bit.e ...