奶牛赛跑


目录

奶牛赛跑

题目描述

输入格式

输出格式

样例

样例输入#1

样例输出#1

题解

代码


题目描述

约翰有头奶牛,他为这些奶牛准备了一个周长为的环形跑牛场。所有奶牛从起点同时起跑,奶牛在比赛中总是以匀速前进的,第头牛的速度为。只要有一头奶牛跑完圈之后,比赛就立即结束了。

有时候,跑得快的奶牛可以比跑得慢的奶牛多绕赛场几圈,从而在一些时刻超过慢的奶牛。这就是最令观众激动的套圈事件了。请问在整个比赛过程中,套圈事件一共会发生多少次呢?

输入格式

• 第一行:三个整数; ;

• 第二行到第 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】奶牛赛跑_题解的更多相关文章

  1. 【USACO 2012 Open】Running Laps(树状数组)

    53 奶牛赛跑 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑,奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L 圈之后,比 ...

  2. USACO翻译:USACO 2012 FEB Silver三题

    USACO 2012 FEB SILVER 一.题目概览 中文题目名称 矩形草地 奶牛IDs 搬家 英文题目名称 planting cowids relocate 可执行文件名 planting co ...

  3. USACO翻译:USACO 2012 JAN三题(2)

    USACO 2012 JAN(题目二) 一.题目概览 中文题目名称 叠干草 分干草 奶牛联盟 英文题目名称 stacking baleshare cowrun 可执行文件名 stacking bale ...

  4. NC24325 [USACO 2012 Mar S]Flowerpot

    NC24325 [USACO 2012 Mar S]Flowerpot 题目 题目描述 Farmer John has been having trouble making his plants gr ...

  5. USACO翻译:USACO 2012 JAN三题(1)

    USACO 2012 JAN(题目一) 一.题目概览 中文题目名称 礼物 配送路线 游戏组合技 英文题目名称 gifts delivery combos 可执行文件名 gifts delivery c ...

  6. BZOJ_2097_[Usaco2010 Dec]Exercise 奶牛健美操_二分答案+树形DP

    BZOJ_2097_[Usaco2010 Dec]Exercise 奶牛健美操_二分答案+树形DP Description Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间 的 ...

  7. USACO奶牛赛跑(逆序对)

    Description 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑,奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L 圈 ...

  8. [USACO]奶牛赛跑(逆序对)

    Description 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑,奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L 圈 ...

  9. USACO 2012 Feb Cow Coupons

    2590: [Usaco2012 Feb]Cow Coupons Time Limit: 10 Sec Memory Limit: 128 MB Submit: 349 Solved: 181 [Su ...

随机推荐

  1. 初探webpack之编写loader

    初探webpack之编写loader loader加载器是webpack的核心之一,其用于将不同类型的文件转换为webpack可识别的模块,即用于把模块原内容按照需求转换成新内容,用以加载非js模块, ...

  2. MySQL(8) - MySQL的事务机制

    MySQL数据库的事务机制 1.1.事务的概念和特性 1.2.事务的隔离级别 repeatable read是mysql默认的事务隔离级别 #事务A #事务A,临时修改工资,未commit, STAR ...

  3. 数据库与MySQL的下载使用

    目录 数据存储演变史 数据库应用发展史 数据库本质 数据库分类 关系型数据库 非关系型数据库 SQL与NoSQL MySQL简介 版本问题 下载使用 目录结构 基本使用 简单使用 系统服务 修改密码 ...

  4. socket套接字补充、操作系统发展史、进程

    目录 socket套接字之UDP协议 操作系统的发展史 手工操作 批处理系统 联机批处理系统 脱机批处理系统 多道技术 进程理论 并发与并行 同步与异步 阻塞与非阻塞 同步异步与阻塞非阻塞总结 soc ...

  5. python字符编码与文件操作

    目录 字符编码 字符编码是什么 字符编码的发展史 字符编码实际应用 编码与解码 乱码问题 python解释器层面 文件操作 文件操作简介 文件的内置方法 文件的读写模式 文件的操作模式 作业 答案 第 ...

  6. Java基础(1)——ThreadLocal

    1. Java基础(1)--ThreadLocal 1.1. ThreadLocal ThreadLocal是一个泛型类,当我们在一个类中声明一个字段:private ThreadLocal<F ...

  7. SpringSecurity的 loginProcessingUrl为什么不能用

    前情提要: 我在做一个springsecurity动态鉴权的项目时, 据网上说配置了 loginProcessingUrl("/login1"); 以后 就可以自定义login的请 ...

  8. 一文带你看懂Java中的Lock锁底层AQS到底是如何实现的

    前言 相信大家对Java中的Lock锁应该不会陌生,比如ReentrantLock,锁主要是用来解决解决多线程运行访问共享资源时的线程安全问题.那你是不是很好奇,这些Lock锁api是如何实现的呢?本 ...

  9. 论文解读(GraphDA)《Data Augmentation for Deep Graph Learning: A Survey》

    论文信息 论文标题:Data Augmentation for Deep Graph Learning: A Survey论文作者:Kaize Ding, Zhe Xu, Hanghang Tong, ...

  10. 【clickhouse专栏】数据库、数据仓库之间的区别与联系

    从本篇文章开始,笔者打算写一个系列的<clickhouse专栏>,其全称是Click Stream,Data WareHouse,简称ClickHouse.从其全称中的"Data ...