【USACO 2012 Open】Running Laps(树状数组)
53 奶牛赛跑
约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场。所有奶牛从起点同时起跑,
奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi。只要有一头奶牛跑完 L 圈之后,比赛就立
即结束了。
有时候,跑得快的奶牛可以比跑得慢的奶牛多绕赛场几圈,从而在一些时刻超过慢的奶牛。这就
是最令观众激动的套圈事件了。请问在整个比赛过程中,套圈事件一共会发生多少次呢?
输入格式
• 第一行:三个整数 N, L 和 C, 1 ≤ N ≤ 105 , 1 ≤ L ≤ 25000 , 1 ≤ C ≤ 25000
• 第二行到第 N + 1 行:第 i + 1 行有一个整数 Vi, 1 ≤ Vi ≤ 106
输出格式
• 单个整数:表示整个比赛过程中,套圈的次数之和
样例输入
4 2 100
20
100
70
1
样例输出
4
解释
两头速度快的奶牛会超过两头速度慢的奶牛
各一次
【分析】
稍微思考一下的题我就不会了么- -
算出每头牛跑的圈数(double),因为都是匀速,要超过完整的一圈必须圈数完整的多1。
但是n^2就会很慢。
可以拆成整数部分和小数部分来做,排个序,整数部分先直接减掉前面的,小数部分求逆序对,然后在ans里面减掉。
要用long long
代码如下:
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 #include<queue> 7 #include<cmath> 8 using namespace std; 9 #define Maxn 100010 10 #define LL long long 11 12 struct node 13 { 14 double a; 15 LL id; 16 }t[Maxn]; 17 18 LL c[Maxn],v[Maxn]; 19 20 LL mymax(LL x,LL y) {return x>y?x:y;} 21 bool cmp(node x,node y) {return x.a<y.a;} 22 bool cmp2(node x,node y) {return x.id<y.id;} 23 24 LL n; 25 26 void add(LL x,LL y) 27 { 28 for(LL i=x;i<=n;i+=i&(-i)) 29 c[i]+=y; 30 } 31 32 LL get_ans(LL x) 33 { 34 LL ans=0; 35 for(LL i=x;i>=1;i-=i&(-i)) 36 ans+=c[i]; 37 return ans; 38 } 39 40 int main() 41 { 42 LL l,nc; 43 scanf("%lld%lld%lld",&n,&l,&nc); 44 for(LL i=1;i<=n;i++) scanf("%d",&v[i]); 45 sort(v+1,v+1+n); 46 LL sum=0,ans=0; 47 for(LL i=1;i<=n;i++) 48 { 49 t[i].a=(double)(l*1.0*v[i]/v[n]); 50 LL x=(LL)(t[i].a); 51 ans+=(i-1)*x-sum; 52 sum+=x; 53 t[i].a=t[i].a-x; 54 t[i].id=i; 55 } 56 sort(t+1,t+1+n,cmp); 57 LL p=1; 58 double now=t[1].a; 59 t[1].a=1; 60 for(LL i=2;i<=n;i++) 61 { 62 if(t[i].a-now>0.000001) p++,now=t[i].a; 63 t[i].a=p; 64 } 65 sort(t+1,t+1+n,cmp2); 66 memset(c,0,sizeof(c)); 67 for(LL i=n;i>=1;i--) 68 { 69 LL x=(LL)(t[i].a); 70 ans-=get_ans(x-1); 71 add(x,1); 72 } 73 printf("%lld\n",ans); 74 return 0; 75 }
usaco 2012 open
2016-10-28 08:35:28
转载于:https://www.cnblogs.com/Konjakmoyu/p/6006399.html
【USACO 2012 Open】Running Laps(树状数组)相关推荐
- TOJ 4074 Running Laps -- 树状数组
题目链接:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4074 题目大意:有n头牛在环形跑 ...
- [USACO 2012 Open]Running Laps奶牛赛跑
题目链接:找不到QWQhttp://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4074 [在一个并没有 ...
- NKOJ 2182 (HEOI 2012) 采花(树状数组/线段树)
P2182[河北OI 2012 DAY1]采花 问题描述 萧芸斓是Z 国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳 了n 朵花,花有c ...
- 【USACO】奶牛抗议 树状数组+dp
题目描述 约翰家的 N 头奶牛正在排队游行抗议.一些奶牛情绪激动,约翰测算下来,排在第 i 位的奶牛 的理智度为 A i ,数字可正可负. 约翰希望奶牛在抗议时保持理性,为此,他打算将这条队伍分割成几 ...
- jzoj2908,P1527-[集训队互测 2012]矩阵乘法【整体二分,二维树状数组】
正题 题目链接:https://www.luogu.org/problem/P1527 题目大意 给出一个矩阵,每个询问求子矩阵中的第kkk小数. 解题思路 我们发现我们对于每个询问我们可以二分答案, ...
- VK Cup 2012 Qualification Round 2 C. String Manipulation 1.0 线段树 or 树状数组+二分
http://codeforces.com/problemset/problem/159/C 题意: 给你一个字符串s,给出一个数k,k倍的s串组成新串str.然后给出n个操作,每个操作对应着pi,c ...
- HDU 4358 树状数组+思路
http://acm.hdu.edu.cn/showproblem.php?pid=4358 如图所示,当k==3时,如果我们扫描到红线所在的位置. 则符合条件的区间就是从红线到两条紫线所包含的区间( ...
- HDU-1541 Stars 树状数组
http://acm.hdu.edu.cn/showproblem.php?pid=1541 题义为给定N个点按照先x轴,后y轴坐标排序,求某一点的左下角的星星数量,刚开始用二维的树状数组来做,结果肯 ...
- hdu 4417(线段树OR树状数组)
题意:输入一个长度为n的序列,然后m个询问,询问区间[a,b]中比h小的数的个数. 思路:树状数组或线段树离线处理. 树状数组1 View Code 1 #include<cstdio> ...
- JZOJ 3.10 1542——跑步(树状数组+模拟+排序/归并排序)
题目描述 FJ觉得赛马很无聊,于是决定调查将赛牛作为一种运动的可能性.他安排了N(1 <= N <= 100,000)头奶牛来进行一个L圈的赛牛比赛,比赛在一个环形的长度为C的跑道上进行. ...
最新文章
- java高深技术总结_一名25K以上的高薪Java程序员总结出的技术以及学习技能
- 清除WebLogic8.1缓存
- 计算机进位计数制实训课教案,《计算机应用基础》职高2010修订版 教案.doc
- oracle锁定用户名及解锁
- UI学习笔记---第十四天数据持久化
- 日本最后一刻阻拦鸿海收购夏普:质疑董事私心
- 恩智浦智能车一些常见的问题
- tools: USB、MiniUSB、MicroUSB接线
- android 电话管理
- 邮箱激活功能,前台用户注册后需要登录邮箱激活账号才能够登录的,请简述激活过程,重点是安全性
- 热烈庆祝女朋友的生日
- three.js使用外部模型创建动画,使用GLTF格式文件动画创建动画(vue中使用three.js71)
- 本地php开发环境出现 cURL error 60
- c语言zip 库,c语言调用libzip库遍历zip文件
- java西语_使用Java 8 DateTimeFormatter和西班牙语月份名称进行解析
- C#入门练习题(1-7例)
- 真的是厚黑吗·《厚黑学全书》
- Delphi进行CAD二次开发教学(1)——基础学习:运行、新建、打开图形文件
- CUDA共享内存操作(__shared__关键字)
- 《YOLACT:Real-time Instance Segmentation》论文阅读