【USACO 2012 Open】奶牛赛跑_题解
奶牛赛跑
目录
题目描述
约翰有头奶牛,他为这些奶牛准备了一个周长为
的环形跑牛场。所有奶牛从起点同时起跑,奶牛在比赛中总是以匀速前进的,第
头牛的速度为
。只要有一头奶牛跑完
圈之后,比赛就立即结束了。
有时候,跑得快的奶牛可以比跑得慢的奶牛多绕赛场几圈,从而在一些时刻超过慢的奶牛。这就是最令观众激动的套圈事件了。请问在整个比赛过程中,套圈事件一共会发生多少次呢?
输入格式
• 第一行:三个整数,
和
,
;
;
• 第二行到第 N + 1 行:第 i + 1 行有一个整数 Vi,1 ≤ Vi ≤ 10^6
输出格式
单个整数:表示整个比赛过程中,套圈的次数之和。
样例
样例输入#1 |
样例输出#1 |
| 4 2 100 20 100 70 1 |
4 |
题解
由于题目里面说只要有一头跑完l圈那么所有的牛都会停下来
所以我们可以想给v数组排序(方便后面处理),并算出每头奶牛跑了多少圈(cycle数组)
显然第i头奶牛和第j头奶牛cycle之差下取整
那么题目就简化为给n个实数求每个数与它之前所有数之差下取整的和(n<=1e5显然n^2做法是不可行的,从取值范围可以看出应该是nlogn的)
先举个例子(cycle[i],cycle[j])=(4.8,5.7) 差的下取整是0 ,但(cycle[i],cycle[j])=(4.2,5.7) 差的下取整是1,
所以我们可以把cycle分成整数部分cycle,以及小数部分last
若last[i]>last[j],ans=cycle[j]-cycle[i]-1 若last[i]<=last[j],ans=cycle[j]-cycle[i]
所以我们可以在ans里面存下cycle之差然后再在last数组里找逆序对,逆序对有几个ans就得减多少
至于逆序对,我使用归并排序实现(merge为归并排序过程),也可以用树状数组等数据结构(还没写)
详见代码(注意double判断大小的时候用相减判断,不然会出现精度问题,刚开始直接比大小,wa了5个点)
代码
#include<bits/stdc++.h>
using namespace std;
long long i,j,l,m,n,v[100005],ans,c,cycle[100005];
double t,k,last[100005],b[100005];
void merge(int lef,int rig)
{
if (lef==rig) return;
if (lef==rig-1)
{
if (last[lef]-last[rig]>1e-7) ans--,swap(last[lef],last[rig]);
return;
}
int mid=(lef+rig)/2;
merge(lef,mid);
merge(mid+1,rig);
int i,j,l;
for (l=i=lef,j=mid+1; i<=mid&&j<=rig;)
{
if (last[i]-last[j]>1e-7)
{
ans-=(mid-i+1);
b[l++]=last[j++];
}
else b[l++]=last[i++];
}
for (; i<=mid;) b[l++]=last[i++];
for (; j<=rig;) b[l++]=last[j++];
for (i=lef; i<=rig; i++) last[i]=b[i];
}
int main()
{
scanf("%lld%lld%lld",&n,&l,&c);
for (i=1; i<=n; i++) scanf("%lld",&v[i]);
sort(v+1,v+n+1);
t=l*c*1.0/v[n];
m=0;
for (i=1; i<=n; i++)
{
cycle[i]=(long long)(t*v[i]/c);
ans+=(i-1)*cycle[i]-m;
m+=cycle[i];
last[i]=t*v[i]-cycle[i]*c;
}
merge(1,n);
printf("%lld",ans);
}
声明:该文章部分摘自这里,若有侵权,请及时联系!
【USACO 2012 Open】奶牛赛跑_题解的更多相关文章
- 【USACO 2012 Open】Running Laps(树状数组)
53 奶牛赛跑 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑,奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L 圈之后,比 ...
- USACO翻译:USACO 2012 FEB Silver三题
USACO 2012 FEB SILVER 一.题目概览 中文题目名称 矩形草地 奶牛IDs 搬家 英文题目名称 planting cowids relocate 可执行文件名 planting co ...
- USACO翻译:USACO 2012 JAN三题(2)
USACO 2012 JAN(题目二) 一.题目概览 中文题目名称 叠干草 分干草 奶牛联盟 英文题目名称 stacking baleshare cowrun 可执行文件名 stacking bale ...
- NC24325 [USACO 2012 Mar S]Flowerpot
NC24325 [USACO 2012 Mar S]Flowerpot 题目 题目描述 Farmer John has been having trouble making his plants gr ...
- USACO翻译:USACO 2012 JAN三题(1)
USACO 2012 JAN(题目一) 一.题目概览 中文题目名称 礼物 配送路线 游戏组合技 英文题目名称 gifts delivery combos 可执行文件名 gifts delivery c ...
- BZOJ_2097_[Usaco2010 Dec]Exercise 奶牛健美操_二分答案+树形DP
BZOJ_2097_[Usaco2010 Dec]Exercise 奶牛健美操_二分答案+树形DP Description Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间 的 ...
- USACO奶牛赛跑(逆序对)
Description 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑,奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L 圈 ...
- [USACO]奶牛赛跑(逆序对)
Description 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑,奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L 圈 ...
- USACO 2012 Feb Cow Coupons
2590: [Usaco2012 Feb]Cow Coupons Time Limit: 10 Sec Memory Limit: 128 MB Submit: 349 Solved: 181 [Su ...
随机推荐
- 在字节跳动,一个更好的企业级SparkSQL Server这么做
SparkSQL是Spark生态系统中非常重要的组件.面向企业级服务时,SparkSQL存在易用性较差的问题,导致难满足日常的业务开发需求.本文将详细解读,如何通过构建SparkSQL服务器实现使用效 ...
- 评估海外pop点网络质量,批量探测到整个国家运营商ip地址段时延
1 查询当地供应商所有AS号和IP地址段,如下 可以手动复制也可以爬下来,此次测试地址不多,手动复制下来再做下格式话 61.99.128.0/17 61.99.0.0/16 61.98.96.0/20 ...
- Springboot启动类及注解说明
Spring boot的启动是基于main方法的,其主要注解为: 1. @springBootApplication:项目的启动注解,是一个组合注解,包含@SpringbootConfiguratio ...
- veeambackup通过虚拟机还原系统文件操作说明
如何从 VeeamBackup Replication 从备份中提取文件恢复到本地.当我们的服务器中误操作删除了一些文件特别是共享文件,文件被删除后往往都是几个小时或者几天后才被发现.特别是文件服务器 ...
- 魔改了一下bootstrap-treeview组件,发布个NPM包体验一下
前言 之前在这篇文章 基于.NetCore开发博客项目 StarBlog - (8) 分类层级结构展示 中说到,我为了让文章分类列表支持层级结构,用了一个树形组件,不过这个组件太老了,使用的Boots ...
- Solon 1.8.0 发布,云原生微服务开发框架
相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...
- 深度学习与CV教程(8) | 常见深度学习框架介绍
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
- 解决Mysql搭建成功后执行sql语句报错以及区分大小写问题
刚搭建完mysql 8.0以后会: 一.表区分大小写, 二.执行正确的sql语句成功且会报:[Err] 1055 - Expression #1 of ORDER BY clause is not i ...
- WindowsServer评估版转为正式版并激活
更新记录 本文迁移自Panda666原博客,原发布时间:2021年5月16日. 一般从官网下载的Windows Server版本都是评估试用版本.这时候想转为正式版本,就需要使用转换激活代码.请参照不 ...
- Xilinx DMA的几种方式与架构
DMA是direct memory access,在FPGA系统中,常用的几种DMA需求: 1. 在PL内部无PS(CPU这里统一称为PS)持续干预搬移数据,常见的接口形态为AXIS与AXI,AXI与 ...