题目链接:找不到QWQhttp://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4074

[在一个并没有去过的oj找到了orzorzorz那是人家学校自己的oj?

题目大意:

题解:

树状数组

因为同一起跑线同一时间,所以根据速度排个序先是显而易见的啦。

先讲下O(n^2),所求的答案就是两两判断一个比另一个跑多了几圈。p.s.一定要去尾取整,因为不到一圈是还没超过的。

因为范围,这样做会超时。但是如果先把每只牛能跑的圈数算出来。

例如样例,每只牛分别跑了:0.02,0.4,1.4,2圈。设圈数为Qi

那么按顺序扫下来,第i只牛对答案的贡献就是sigema{ [Qi] - [Qj] - ( (Qi-[Qi])≥(Qj-[Qj]) )? 0:1 },1≤j<i。

把式子拆成整数部分([Qi])+小数部分(Qi-[Qi])分别用树状数组来做就好了√ ([x]表示向下取整

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long LL;
#define maxn 101000const LL mxn=100000;
struct node
{LL id,x,ls;double y;//x-整数部分 y-小数部分 ls-小数的离散值
}ss[maxn];
LL r[maxn],v[maxn];
LL lowbit(LL x){return x&(-x);}
void ins(LL x,LL y) {for (x;x<=mxn;x+=lowbit(x)) r[x]+=y;}
LL ask(LL x)
{LL ret=0;for (;x>0;x-=lowbit(x)) ret+=r[x];return ret;
}
bool cmp1(node x,node y) {return x.y<y.y;}
bool cmp2(node x,node y) {return x.id<y.id;}
int main()
{//freopen("running.in","r",stdin);//freopen("running.out","w",stdout);LL n,m,c,i,ans;scanf("%I64d%I64d%I64d",&n,&m,&c);for (i=1;i<=n;i++) scanf("%I64d",&v[i]);sort(v+1,v+1+n);ans=0;memset(r,0,sizeof(r));for (i=1;i<=n;i++)//分离小数&整数部分{double orz=1.0*m*v[i]/v[n];ss[i].y=(double)(orz-(m*v[i]/v[n]));ss[i].x=orz-ss[i].y;ss[i].id=i;ans+=(i-1)*ss[i].x-ask(i);//算整数部分的答案,不管是否真的够一圈都先算了ins(i,ss[i].x);}sort(ss+1,ss+1+n,cmp1);LL p=1;ss[1].ls=1;//对小数部分离散化for (i=2;i<=n;i++)if (abs(ss[i].y-ss[i-1].y)<0.000001) ss[i].ls=p;else ss[i].ls=++p;sort(ss+1,ss+1+n,cmp2);memset(r,0,sizeof(r));for (i=1;i<=n;i++)//算小数那部分的{ans-=(i-1)-ask(ss[i].ls);//把真的相差不够一圈的减掉ins(ss[i].ls,1);}printf("%I64d\n",ans);return 0;
}

终于。。完了!复习初赛去!还什么都不会啊QwQ

转载于:https://www.cnblogs.com/Euryale-Rose/p/6527842.html

[USACO 2012 Open]Running Laps奶牛赛跑相关推荐

  1. usaco 2012 Open【Running Laps奶牛赛跑】

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

  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. 用archoctopus下载花瓣
  2. Android18isalone,全新JAVA开发Android程序员需要掌握的英语单词(很全).doc
  3. maven下载包慢解决
  4. 贪心算法之高级钟点秘书会议安排问题
  5. linux内核启动失败,裁剪后montavistalinux内核 nfs启动失败
  6. NodeJS + Lighthouse + Gulp 搭建自动化网站性能测试工具
  7. commands moudle on python will replace with subprocess on py3.0
  8. 服务器磁盘读取暴涨_8分钟了解服务器硬件知识
  9. Java的基本数据类型与转换
  10. Linux 硬盘挂载
  11. typora中插入化学反应式
  12. 极客公园创新大会 IF 2018,用科技主义和独立思维击退喧嚣
  13. python寻找所有三位数素数_寻找所有的素数的python实现
  14. 如何用Airtest脚本切换手机的输入法
  15. 学习汇编记录Day3——汇编指令
  16. java线上文件图片资源存储方案,定时清理垃圾文件
  17. 机器学习项目实战-能源利用率1-数据预处理
  18. WIN32 opengl三角形绘制
  19. 度秘语音引擎app_「资源」9个(实时)语音转文字APP分享(推荐收藏)
  20. 《编码的奥秘》之手电筒剖析

热门文章

  1. DEVOPS架构师 -- 03Kubernetes进阶实践
  2. Win10下安装学习、开发可用的mysql
  3. 牛逼!最强拆迁户!上市公司喜提近26亿拆迁款,为去年净利78倍!3万股东沸腾了...
  4. 5类适合参加IT培训的人,你在其中吗?
  5. 初级网站建设--入门篇
  6. 计算机信息计量单位 英文名称byte,5.计算机中的字节是个常用的单位,它的英文名字为( )。...
  7. 计算机键盘打出来都是英语大写怎么办,电脑键盘切换大小写怎么变成CapsLock和Shift键...
  8. 【问题记录】centos7 nodejs better-SQLite3无法安装
  9. java四个数打擂,荐 C/C++/Java/Go/Rust,Python喊你来打擂:3秒钟内统计出小于1亿的素数个数...
  10. 【力扣周赛】第349场周赛