Description

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

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

Input Format

• 第一行:三个整数 N ,L 和 C,1 ≤ N ≤ 10^5; 1 ≤ L ≤ 25000; 1 ≤ C ≤ 25000

• 第二行到第 N + 1 行:第 i + 1 行有一个整数 Vi,1 ≤ Vi ≤ 10^6

Output Format

单个整数:表示整个比赛过程中,套圈的次数之和

Sample Input

4 2 100
20
100
70
1

Sample Output

4

Hint

两头速度快的奶牛会超过两头速度慢的奶牛各一次

【题解】

由于题目里面说只要有一头跑完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 <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <stack>
#include <vector>
#include <queue>
#include <map>
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【Running Laps奶牛赛跑】相关推荐

  1. [USACO 2012 Open]Running Laps奶牛赛跑

    题目链接:找不到QWQhttp://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4074 [在一个并没有 ...

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

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

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

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

  4. F. [usaco 2009 dec]游荡的奶牛 总结

    F. [usaco 2009 dec]游荡的奶牛 总结 题目 F. [usaco 2009 dec]游荡的奶牛 时间限制:1s 空间限制:256MB 输入文件:sgraze-in 输出文件:sgraz ...

  5. 题解 | #[USACO 2012 Mar S]Flowerpot#

    题解 | #扑克牌大小# import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main { p 题解 | #密码截 ...

  6. jzoj P1542 【USACO Open 2012银】跑步Running laps

    题目描述 FJ觉得赛马很无聊,于是决定调查将赛牛作为一种运动的可能性.他安排了N(1 <= N <= 100,000)头奶牛来进行一个L圈的赛牛比赛,比赛在一个环形的长度为C的跑道上进行. ...

  7. 【USACO Open 2012银】跑步Running laps (jzoj第四题)(变态)

    题目: 题目描述 FJ觉得赛马很无聊,于是决定调查将赛牛作为一种运动的可能性.他安排了N(1 <= N <= 100,000)头奶牛来进行一个L圈的赛牛比赛,比赛在一个环形的长度为C的跑道 ...

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

    USACO 2012JAN(题目三) 一.题目概览 中文题目名称 放牧 登山 奶牛排队 英文题目名称 grazing climb lineup 可执行文件名 grazing climb lineup ...

  9. 1968. 奶牛赛跑

    为了解决谁是跑的最快的奶牛的长期争论,贝茜和艾希决定在农场中来一场赛跑. 两头奶牛在同一时间从同一地点出发,朝同一方向奔跑. 每个奶牛的奔跑过程都可以划分为若干段. 在每一段行程中,奶牛的奔跑速度相同 ...

最新文章

  1. 深入理解IPyton以及Jupyter Notebook中的%time以及%timeit的作用
  2. Android众说纷纭分辨率
  3. 计算机领域中的牛人,计算机视觉领域的牛人 | 丕子
  4. docker学习实践之路[第一站]环境安装
  5. Shell中的if语句中的
  6. [Java网络编程基础]InetAddress的使用
  7. SecureCRT连接linux时主机名,secureCRT连接linux方法
  8. Ajax/JavaScript脚本大全,JS脚本大全
  9. java中display1_关于displaytag1.1的两种分页
  10. android 如何解锁屏幕,2解锁屏幕破裂Android手机的方法(自由方式)
  11. 为树莓派制作系统镜像时进行瘦身,方便后续保存与批量写入
  12. 资深渗透测试工程师的渗透技巧总结(67个Tips)
  13. HTML作业-蛋糕店
  14. THREE.js(二):设置材质线条宽度(lineWidth) 无效
  15. 神经网络第一篇——感受野的学习、计算与思考
  16. c++算法的上界下界
  17. TiDB部署----openEuler2203/2003 单机部署TiDB 6.1.1
  18. 使用FileOutPutStream下载docx文件报文件已损坏解决
  19. 【JS】Day34-35
  20. 学渣之路:一个月拯救我英语四级

热门文章

  1. 《Effective C艹》读书笔记(3)
  2. python网络爬虫抹除webdriver指纹绕过淘宝滑块验证登录
  3. Spring Cloud学习系列第一章:Eureka之服务注册与发现
  4. 尤雨溪最近发布了5kb的vue,新作 petite-vue
  5. 简单的数据库关系表建立
  6. Prometheus监控(一)
  7. DQN神经网络小结(Pytorch版)
  8. Unity中点击物体后让其消失(注意:要使用hit.collider,而不是this,要时刻注意你要哪一个消失)
  9. 为公司高管履职风险买单的董监高责任保险DO
  10. 有了云服务器能干什么用的_云服务器能干什么,具体有什么作用?