[USACO 2012 Open]Running Laps奶牛赛跑
题目链接:找不到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奶牛赛跑相关推荐
- usaco 2012 Open【Running Laps奶牛赛跑】
Description 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑, 奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L ...
- 【USACO 2012 Open】Running Laps(树状数组)
53 奶牛赛跑 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑, 奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L 圈之后, ...
- USACO翻译:USACO 2012 FEB Silver三题
USACO 2012 FEB SILVER 一.题目概览 中文题目名称 矩形草地 奶牛IDs 搬家 英文题目名称 planting cowids relocate 可执行文件名 planting co ...
- F. [usaco 2009 dec]游荡的奶牛 总结
F. [usaco 2009 dec]游荡的奶牛 总结 题目 F. [usaco 2009 dec]游荡的奶牛 时间限制:1s 空间限制:256MB 输入文件:sgraze-in 输出文件:sgraz ...
- 题解 | #[USACO 2012 Mar S]Flowerpot#
题解 | #扑克牌大小# import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main { p 题解 | #密码截 ...
- jzoj P1542 【USACO Open 2012银】跑步Running laps
题目描述 FJ觉得赛马很无聊,于是决定调查将赛牛作为一种运动的可能性.他安排了N(1 <= N <= 100,000)头奶牛来进行一个L圈的赛牛比赛,比赛在一个环形的长度为C的跑道上进行. ...
- 【USACO Open 2012银】跑步Running laps (jzoj第四题)(变态)
题目: 题目描述 FJ觉得赛马很无聊,于是决定调查将赛牛作为一种运动的可能性.他安排了N(1 <= N <= 100,000)头奶牛来进行一个L圈的赛牛比赛,比赛在一个环形的长度为C的跑道 ...
- USACO翻译:USACO 2012 JAN三题(3)
USACO 2012JAN(题目三) 一.题目概览 中文题目名称 放牧 登山 奶牛排队 英文题目名称 grazing climb lineup 可执行文件名 grazing climb lineup ...
- 1968. 奶牛赛跑
为了解决谁是跑的最快的奶牛的长期争论,贝茜和艾希决定在农场中来一场赛跑. 两头奶牛在同一时间从同一地点出发,朝同一方向奔跑. 每个奶牛的奔跑过程都可以划分为若干段. 在每一段行程中,奶牛的奔跑速度相同 ...
最新文章
- 用archoctopus下载花瓣
- Android18isalone,全新JAVA开发Android程序员需要掌握的英语单词(很全).doc
- maven下载包慢解决
- 贪心算法之高级钟点秘书会议安排问题
- linux内核启动失败,裁剪后montavistalinux内核 nfs启动失败
- NodeJS + Lighthouse + Gulp 搭建自动化网站性能测试工具
- commands moudle on python will replace with subprocess on py3.0
- 服务器磁盘读取暴涨_8分钟了解服务器硬件知识
- Java的基本数据类型与转换
- Linux 硬盘挂载
- typora中插入化学反应式
- 极客公园创新大会 IF 2018,用科技主义和独立思维击退喧嚣
- python寻找所有三位数素数_寻找所有的素数的python实现
- 如何用Airtest脚本切换手机的输入法
- 学习汇编记录Day3——汇编指令
- java线上文件图片资源存储方案,定时清理垃圾文件
- 机器学习项目实战-能源利用率1-数据预处理
- WIN32 opengl三角形绘制
- 度秘语音引擎app_「资源」9个(实时)语音转文字APP分享(推荐收藏)
- 《编码的奥秘》之手电筒剖析
热门文章
- DEVOPS架构师 -- 03Kubernetes进阶实践
- Win10下安装学习、开发可用的mysql
- 牛逼!最强拆迁户!上市公司喜提近26亿拆迁款,为去年净利78倍!3万股东沸腾了...
- 5类适合参加IT培训的人,你在其中吗?
- 初级网站建设--入门篇
- 计算机信息计量单位 英文名称byte,5.计算机中的字节是个常用的单位,它的英文名字为( )。...
- 计算机键盘打出来都是英语大写怎么办,电脑键盘切换大小写怎么变成CapsLock和Shift键...
- 【问题记录】centos7 nodejs better-SQLite3无法安装
- java四个数打擂,荐 C/C++/Java/Go/Rust,Python喊你来打擂:3秒钟内统计出小于1亿的素数个数...
- 【力扣周赛】第349场周赛