53 奶牛赛跑
  约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场。所有奶牛从起点同时起跑,
奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi。只要有一头奶牛跑完 L 圈之后,比赛就立
即结束了。
有时候,跑得快的奶牛可以比跑得慢的奶牛多绕赛场几圈,从而在一些时刻超过慢的奶牛。这就
是最令观众激动的套圈事件了。请问在整个比赛过程中,套圈事件一共会发生多少次呢?
输入格式
• 第一行:三个整数 NLC, 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(树状数组)相关推荐

  1. TOJ 4074 Running Laps -- 树状数组

    题目链接:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4074 题目大意:有n头牛在环形跑 ...

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

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

  3. NKOJ 2182 (HEOI 2012) 采花(树状数组/线段树)

    P2182[河北OI 2012 DAY1]采花 问题描述 萧芸斓是Z 国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳 了n 朵花,花有c ...

  4. 【USACO】奶牛抗议 树状数组+dp

    题目描述 约翰家的 N 头奶牛正在排队游行抗议.一些奶牛情绪激动,约翰测算下来,排在第 i 位的奶牛 的理智度为 A i ,数字可正可负. 约翰希望奶牛在抗议时保持理性,为此,他打算将这条队伍分割成几 ...

  5. jzoj2908,P1527-[集训队互测 2012]矩阵乘法【整体二分,二维树状数组】

    正题 题目链接:https://www.luogu.org/problem/P1527 题目大意 给出一个矩阵,每个询问求子矩阵中的第kkk小数. 解题思路 我们发现我们对于每个询问我们可以二分答案, ...

  6. 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 ...

  7. HDU 4358 树状数组+思路

    http://acm.hdu.edu.cn/showproblem.php?pid=4358 如图所示,当k==3时,如果我们扫描到红线所在的位置. 则符合条件的区间就是从红线到两条紫线所包含的区间( ...

  8. HDU-1541 Stars 树状数组

    http://acm.hdu.edu.cn/showproblem.php?pid=1541 题义为给定N个点按照先x轴,后y轴坐标排序,求某一点的左下角的星星数量,刚开始用二维的树状数组来做,结果肯 ...

  9. hdu 4417(线段树OR树状数组)

    题意:输入一个长度为n的序列,然后m个询问,询问区间[a,b]中比h小的数的个数. 思路:树状数组或线段树离线处理. 树状数组1 View Code 1 #include<cstdio> ...

  10. JZOJ 3.10 1542——跑步(树状数组+模拟+排序/归并排序)

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

最新文章

  1. java高深技术总结_一名25K以上的高薪Java程序员总结出的技术以及学习技能
  2. 清除WebLogic8.1缓存
  3. 计算机进位计数制实训课教案,《计算机应用基础》职高2010修订版 教案.doc
  4. oracle锁定用户名及解锁
  5. UI学习笔记---第十四天数据持久化
  6. 日本最后一刻阻拦鸿海收购夏普:质疑董事私心
  7. 恩智浦智能车一些常见的问题
  8. tools: USB、MiniUSB、MicroUSB接线
  9. android 电话管理
  10. 邮箱激活功能,前台用户注册后需要登录邮箱激活账号才能够登录的,请简述激活过程,重点是安全性
  11. 热烈庆祝女朋友的生日
  12. three.js使用外部模型创建动画,使用GLTF格式文件动画创建动画(vue中使用three.js71)
  13. 本地php开发环境出现 cURL error 60
  14. c语言zip 库,c语言调用libzip库遍历zip文件
  15. java西语_使用Java 8 DateTimeFormatter和西班牙语月份名称进行解析
  16. C#入门练习题(1-7例)
  17. 真的是厚黑吗·《厚黑学全书》
  18. Delphi进行CAD二次开发教学(1)——基础学习:运行、新建、打开图形文件
  19. CUDA共享内存操作(__shared__关键字)
  20. 《YOLACT:Real-time Instance Segmentation》论文阅读

热门文章

  1. 盘盘,这几个特殊的IP地址
  2. MySQL表结构导出Excel
  3. Conmi的正确答案——keil的“Cannot read RTE data from project file: RTE is not enabled”问题
  4. java—stream流递归实现树形结构
  5. SSIS 通过 WINscp 从SFTP下载文件
  6. 难怪好人有恶报,原来秘密在这里
  7. (CNS复现)CLAM——Chapter_00
  8. layui 多图片上传
  9. 直播泡沫?3.5万亿红人经济的未来在这几个字里
  10. unity3d战棋游戏地图点击的实现