题目描述

FJ觉得赛马很无聊,于是决定调查将赛牛作为一种运动的可能性。他安排了N(1 <= N <= 100,000)头奶牛来进行一个L圈的赛牛比赛,比赛在一个环形的长度为C的跑道上进行。所有的奶牛在跑道上的同一个点出发,每头奶牛的速度不同,当最快的奶牛跑完L*C的距离后结束。

FJ注意到了一头奶牛超过另一头奶牛这种情况的发生,并且他想知道这种“超车事件”在整个比赛中发生了多少次。更明确地,一次超车事件被定义为一对奶牛(x, y)和一个时刻t(小于等于结束时刻),且t时刻奶牛x超越到了奶牛y的前面,请帮助FJ计算整个比赛过程中“超车事件”发生的次数。

输入

第1行,3个空格隔开的整数N、L、C(1 <= L,C <= 25,000)

第2行至第n + 1行,第i + 1行有一个整数,表示第i个奶牛的速度,范围在1..1000000之间

输出

超车总数

样例输入

4 2 100

20

100

70

1

样例输出

4


我终于懂得了C++的美好!
首先出速度最快的奶牛——Max
然后就可以如果求出最快的奶牛跑完,这头奶牛可以跑多少圈。公式即为l*c/max*S/c,约分后得l*s/max,将小数和整数分开存。
快排一遍,从大到小排。
最后我们,求出求出最多的超车数,用树状数组维护。



用归并排序方能ACE也
我们可以先快排一遍
像方法一一样,现将小数部分和整数部分先求出来。
然后当做没有小数去做,求出超车数。
再回过来做小数部分,如果像上面一样再排一遍再做的话o(2n)因该会超时(我没试过,有兴趣的朋友可以试一试,然后在留言区噪起来吧)
如果这样,就可以使用归排。方可ACE!!!!!!!!!!!


代码如下:

#include<cstdio>
#include<algorithm>
#include<cstdlib>
using namespace std;
long long n,m,l,c,q[100002],Max,h,ans,sz[1000002];
typedef struct{long long s,t;
}P;
bool cmp(P aa,P bb)
{if (aa.s!=bb.s)return aa.s<bb.s;return aa.t<bb.t;
}
P p[100002];
long long chaxun(long long x)
{int ans=0;for (;x>=1;x-=x&-x)ans+=sz[x];return ans;
}
void gengxin(long long x)
{for (;x<=m;x+=x&-x)sz[x]++;
}
int main()
{freopen("running.in","r",stdin);freopen("running.out","w",stdout);scanf("%lld%lld%lld",&n,&l,&c);m=1e6;for (int i=0;i<n;i++){scanf("%lld",&q[i]);Max=max(Max,q[i]);}for (int i=0;i<n;i++){p[i].s=q[i]*l/Max;p[i].t=q[i]*l%Max;}sort(p,p+n,cmp);for (int i=0;i<n;i++){ans+=i*p[i].s-h-(chaxun(m)-chaxun(p[i].t));h+=p[i].s;if (p[i].t)gengxin(p[i].t);}printf("%lld",ans);return 0;
}

代码如下:

var  ans,count,w:int64;v,s:array[0..100001]of longint;t,r:array[0..100001]of extended;i,j,n,x,y,l,c:longint;m,d:extended;procedure qsort(l,r:longint);
var i,j,mid:longint;
beginif l>=r then exit;i:=l; j:=r; mid:=v[i];repeatwhile v[i]>mid do inc(i);while v[j]<mid do dec(j);if i<=j thenbeginv[0]:=v[i];v[i]:=v[j];v[j]:=v[0];inc(i);dec(j);end;until i>j;qsort(l,j);qsort(i,r);
end;procedure gb(x,y:longint);
var  i,j,k,mid:longint;
beginif x=y then exit;mid:=(x+y) div 2;gb(x,mid);gb(mid+1,y);i:=x;j:=mid+1;k:=x;while (i<=mid) and (j<=y) dobeginif t[i]-t[j]>-0.0000001 thenbeginr[k]:=t[i];inc(i);inc(k);endelsebeginr[k]:=t[j];inc(j);inc(k);w:=w+mid-i+1;end;end;while i<=mid dobeginr[k]:=t[i];inc(i);inc(k);end;while j<=y dobeginr[k]:=t[j];inc(j);inc(k);end;for i:=x to y do t[i]:=r[i];
end;beginassign(input,'running.in');assign(output,'running.out');reset(input);rewrite(output);readln(n,l,c);for i:=1 to n do readln(v[i]);qsort(1,n);m:=(l*c)/v[1];ans:=0;count:=0;for i:=1 to n dobegind:=v[i]*m;s[i]:=trunc(d/c);l:=s[i]*c;t[i]:=d-l;end;for i:=n downto 1 dobegincount:=count+(n-i)*(s[i]-s[i+1]);ans:=ans+count;end;w:=0;gb(1,n);write(ans-w);close(input);close(output);
end.

转载于:https://www.cnblogs.com/Comfortable/p/8412368.html

JZOJ 3.10 1542——跑步(树状数组+模拟+排序/归并排序)相关推荐

  1. Codeforces 216D Spider#39;s Web 树状数组+模拟

    题目链接:http://codeforces.com/problemset/problem/216/D 题意: 对于一个梯形区域,假设梯形左边的点数!=梯形右边的点数,那么这个梯形为红色.否则为绿色, ...

  2. 数据结构之树状数组(候补)

    参考网址:https://blog.csdn.net/flushhip/article/details/79165701 https://www.cnblogs.com/GeniusYang/p/57 ...

  3. UVA 11423 - Cache Simulator (树状数组)

    UVA 11423 - Cache Simulator (树状数组) 题目链接 题目大意:模仿磁盘缓冲区的工作机制,给你n个不同size的(递增的)磁盘缓冲区.给你要訪问的数据,依据LRU原则,问每一 ...

  4. [虚树][树状数组][lca] Jzoj P5908 开荒

    Description 题目背景: 尊者神高达作为一个萌新,在升级路上死亡无数次后被一只大黄叽带回了师门.他加入师门后发现有无穷无尽的师兄弟姐妹,这几天新副本开了,尊者神高达的师门作为一个 pve师门 ...

  5. [2020.10.30NOIP模拟赛]字符串水题【SA,树状数组】

    正题 题目大意 一个字符串SSS. 若干个询问,每次询问一个串TTT和l,rl,rl,r.询问有多少个TTT和SSS的公共子串满足和为[l,r][l,r][l,r] 解题思路 考虑枚举子串左端,那么右 ...

  6. [cdq分治][树状数组] Jzoj P4419 hole

    Description GFS打算去郊外建所别墅,享受生活,于是他耗费巨资买下了一块风水宝地,但令他震惊的是,一群DSJ对GFS的富贵生活深恶痛绝,决定打洞以搞破坏. 现在我们简化一下这个问题,在这片 ...

  7. [树状数组][哈希]JZOJ 3240 Seat

    Description 你和你的伙伴正在筹备村里的万人宴,由于村子是长条形的,所有宾客将坐在一张超级长桌的一侧就餐. 正当筹备工作进行得火热朝天,你和你的伙伴发现一个严重问题:由于缺乏沟通,你俩各自制 ...

  8. 10.20 Bzoj 3155 Preprefix sum(树状数组)

    Bzoj 3155 Preprefix sum 题意: 长度为n的序列,m次操作 操作有两种:1.询问前缀和的前缀和:2.修改某个ai的值 解题思路: S1=a1S_1=a_1S1​=a1​ S2=a ...

  9. 程序员面试金典 - 面试题 10.10. 数字流的秩(map/树状数组)

    文章目录 1. 题目 2. 解题 2.1 map 2.2 树状数组 1. 题目 假设你正在读取一串整数.每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数). 请实现数据结构和算法来 ...

最新文章

  1. MSB6006: “cmd.exe”已退出,代码为 3.
  2. 【Java5】String类,StringBuilder类,ArrayList类,Object类(toString,equals,hashCode)
  3. Defect Prevention - How to prevent defect in process!
  4. 在要求输入数字处找到非数字字符_剑指 Offer 67. 把字符串转换成整数 leetcode 剑指offer系列...
  5. [算法练习]Excel Sheet Column Title
  6. Python---实验八
  7. 木桶布局 原理与实现
  8. 网站的服务器怎么维护,网站服务器怎么维护
  9. Oracle 备份shell,oracle数据库shell备份脚本
  10. 安装RabbitMQ无法访问(http://localhost:15672)解决方案
  11. Python+PyCharm+PyQt5抓取链家二手房信息
  12. 单位邮箱格式注册,如何申请单位邮箱?
  13. 激光导航AGV为何如此受企业青睐?
  14. 微信小程序授权登录、绑定手机号(接口+小程序)
  15. 什么是域名系统DNS
  16. Flash-制作空心文字
  17. mp4转换gif格式,免费在线转换
  18. Android两种方式实现横向滚动图标+指示器
  19. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之原型模式
  20. python程序员买西瓜代码_朴素贝叶斯python代码实现(西瓜书)

热门文章

  1. MongoDB实战(4)MapReduce
  2. 走向.NET架构设计—第四章—业务层分层架构(后篇)
  3. Oracle 序列的创建和使用
  4. MYSQL || 的BUG // MYSQL 不同库自增id的问题 //MySQL根据表注释查找对应的表 //hive -mysql 日期比较
  5. ASM3.0学习(二)
  6. 20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行
  7. 距离QCon纽约还有3个礼拜:新的演讲、播客节目和研讨会
  8. 测试网站访问速度的5个方法
  9. git submodule获取子模块
  10. TOMCAT startup.bat