博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3570: DZY Loves Physics I
阅读量:6224 次
发布时间:2019-06-21

本文共 1410 字,大约阅读时间需要 4 分钟。

DZY系列。

这题首先是几个性质:

  1.所有球质量相同,碰撞直接交换速度,而球又没有编号,那么就可以直接视作两个球没有碰撞。

  2.所有的方向、初始位置都没有任何用处。

然后就是速度的问题了,根据题设\[v'\cdot v = C\]解这个方程,可以得到\[v=\sqrt{2ct+v_0^2}\]

那么\(T\)时可的速度\(v_T\)的相对大小就直接由\(v_0\)决定了,我们只需要找到第\(k\)小的\(v_0\),直接输出答案即可。

最后一个问题是怎么找第\(k\)小的\(v_0\),这里用了一个树状数组的奇怪性质:可以在\(O(\lg n)\)的时间内完成二分第\(k\)小这件事,具体可以看代码+对着树状数组的图理解。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 typedef long long LL; 8 inline int getnum() 9 {10 int ans=0,fh=1;char ch=getchar();11 while(ch<'0'||ch>'9'){
if(ch=='-')fh*=-1;ch=getchar();}12 while(ch>='0'&&ch<='9')ans=ans*10+ch-'0',ch=getchar();13 return fh*ans;14 }15 int n,C;16 const int tsize=1<<17;17 int t[210000];18 inline void insert(int x){
for(;x<=tsize;x+=x&(-x))t[x]++;}19 int main(int argc, char *argv[])20 {21 n=getnum(),C=getnum();22 while(n--)insert(getnum()),getnum(),getnum();23 int q=getnum();24 while(q--)25 {26 if(getnum())27 {28 int T=getnum(),kth=getnum();29 int l=0,r=tsize,tsum=0,ans;30 while(l
=kth)r=mid,ans=mid,tsum-=t[mid];34 else l=mid+1;35 }36 printf("%.3lf\n",sqrt((LL)2*C*T+(LL)l*l));37 }38 else insert(getnum()),getnum(),getnum();39 }40 return 0;41 }

 

转载于:https://www.cnblogs.com/zhuohan123/p/3726306.html

你可能感兴趣的文章
信息化治理与北京治堵:疏图同归
查看>>
专访Dan Kohn:阡陌交迭,云原生布局开源生态构建及深度应用
查看>>
在Linux中添加普通新用户
查看>>
beego小技巧两则:通过命令行自定义端口和环境,url中带有中划线处理
查看>>
跨国引入强势技术 安全行业又添生力军
查看>>
吸烟损害健康,电子烟损害电脑,分分钟让电脑变砖
查看>>
市场井喷 到家服务将颠覆在线教育模式
查看>>
阿里云发布高IO实例 存储性能比通用型提升300%
查看>>
专访声网CEO赵斌:实时互联网正深入影响垂直领域
查看>>
中国人工智能学会通讯——新一轮人工智能发展的三大特征及其展望 1.1 新一轮人工智能发展的三个特征...
查看>>
超大规模数据中心运营商Switch公司申请IPO
查看>>
英特尔首度公开展示SSD超频技术
查看>>
叱咤大数据的Regex真的是正则表达式?
查看>>
什么将成为云计算的基础设施
查看>>
网络协议
查看>>
加速行业标准研制 区块链才能成为信任机器
查看>>
《并行计算的编程模型》一2.4.3 阻塞与非阻塞
查看>>
云计算发展的7大关键点
查看>>
零售业的数字机遇:把每个消费者都当成VIP
查看>>
360最新产品亮相全球顶级安全产业大会
查看>>