HDU 5826 physics(物理)

HDU 5826 physics物理

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

 


Description


题目描述


There are n balls on a smooth horizontal straight track. The track can be considered to be a number line. The balls can be considered to be particles with the same mass. At the beginning, ball i is at position Xi. It has an initial velocity of Vi and is moving in direction Di.(Di∈−1,1) Given a constant C. At any moment, ball its acceleration Ai and velocity Vi have the same direction, and magically satisfy the equation that Ai * Vi = C. As there are multiple balls, they may collide with each other during the moving. We suppose all collisions are perfectly elastic collisions. There are multiple queries. Each query consists of two integers t and k. our task is to find out the k-small velocity of all the balls t seconds after the beginning. * Perfectly elastic collision : A perfectly elastic collision is defined as one in which there is no loss of kinetic energy in the collision.


在一个光滑水平直线轨道上有n个小球。轨道可以被当做一条直线。小球可以被当做质量相同的质点。

最初,小球i在位置Xi。其初速度大小为Vi,速度方向为Di。(Di∈−1,1)

给定常量C。任意时刻,小球的加速度Ai与速度Vi同方向,并十分玄学地满足等式Ai * Vi = C。

有多个小球,他们可能在运动过程中发生碰撞。我们假定所有碰撞均为完全弹性碰撞。

有多次询问,每次询问有两个整数t与k。我们的任务是找出所有小球开始运动t秒后第k小的速度。

* 完全弹性碰撞 : 在碰撞中不损失动能即为完全弹性碰撞。


Input


输入


The first line contains an integer T, denoting the number of testcases. For each testcase, the first line contains two integers n <= 10^5 and C <= 10^9. n lines follow. The i-th of them contains three integers Vi, Xi, Di. Vi denotes the initial velocity of ball i. Xi denotes the initial position of ball i. Di denotes the direction ball i moves in.  The next line contains an integer q <= 10^5, denoting the number of queries. q lines follow. Each line contains two integers t <= 10^9 and 1<=k<=n. 1<=Vi<=10^5,1<=Xi<=10^9


第一行为一个整数T,表示测试用例的数量。

对于每个测试用例,第一行有两个整数n <= 10^5 与 C <= 10^9。

随后n行。第i行有三个整数Vi,Xi,Di。Vi表示球i的初速度大小。Xi表示球i的初始位置。Di表示球i的运动方向。

下一行有一个整数q <= 10^5,表示询问的数量。

随后q行。每行有两个整数 t <= 10^9 与 1<=k<=n。

1<=Vi<=10^5,1<=Xi<=10^9


Output


输出


For each query, print a single line containing the answer with accuracy of 3 decimal digits.


对于每个询问,输出一行答案,精确到小数点后三位。


Sample Input - 输入样例


Sample Output - 输出样例


1

3 7

3 3 1

3 10 -1

2 7 1

3

2 3

1 2

3 3


6.083

4.796

7.141

【题解】

  加速每一个小球都有一个初始状态,因为A*V=C,所以所有球的当前状态只和初始状态的后t秒有关。

  把题目给的表达式转成和时间t有关的函数。

    A(t) *V(t)  = C

  速度的变化率也就是加速度,即A(t) = V’(t)

  带入上面的式子

    V’(t)*V(t) =  C

  然后求不定积分,求原函数…………(反正我只会求导所以默默地逆向)

    V(t)*V(t)/2 = Ct

    V(t) = 

  如果有常数什么的话就不管了,反正都能通过移动t来达到相应的速度。

  根据动量定理,小球碰撞之后只是交换速度,其实没有什么变化,所以位置和速度方向就不用管了。

  把每个小球的初始速度换算成t,t越大速度越快,可以得到小球速度的排名。每次查询时间的增量是固定,因此不影响排名。

【代码 C++】

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cmath>
 4 double data[100005];
 5 int main(){
 6     __int64 T, n, c, v, i, t, k;
 7     char r[10];
 8     scanf("%I64d", &T);
 9     while (T--){
10         scanf("%I64d%I64d", &n, &c); c <<= 1;
11         for (i = 1; i <= n; ++i){
12             scanf("%I64d", &v); gets(r);
13             data[i] = (double)v*v / c;
14         }
15         std::sort(data + 1, data + n + 1);
16         scanf("%I64d", &n);
17         while (n--){
18             scanf("%I64d%I64d", &t, &k);
19             printf("%.3lf\n", sqrt(c*(data[k] + t)));
20         }
21     }
22     return 0;
23 }
时间: 2024-10-17 06:33:13

HDU 5826 physics(物理)的相关文章

hdu 5826 physics (物理数学,积分)

physics Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 817    Accepted Submission(s): 454 Problem Description There are n balls on a smooth horizontal straight track. The track can be considere

hdu 5826 physics

水题: 题意:给你n个球,在一维方向上,每个球给三个量,分别为初速度v,初始坐标x,方向(1||-1),每个球会运动,加速度为a,满足a*v=c,c已知,可能会完全碰撞,问第t秒第k小的速度是多少: 想法:第一眼看到a*v=c,立即想到了高中物理的恒定功率,小车的加速阶段的运动模型,设m=1,则a*m*v=c=p:再用动量定理,p*t=1/2*m*v*v-1/2*m*v0*v0,即可得出: 代码: #include <bits/stdc++.h> using namespace std; co

hdu 5826 (物理) physics

题目:这里 题意:光滑的水平直线上有n个质量相等的小球,已知每个小球的初始位置,初始速度和方向,每个小球的每个时刻的加速度a都满足a*v=c,v是该时刻的速度,c是已知的 常数,小球之间的碰撞是完全碰撞(不明白就百度),然后q个询问,每次询问第t秒时速度第k小的小球速度是多少? 完全碰撞即碰撞后速度交换,速度还是那两个速度,只是不是原来那个球了而已,但这并不时需要考虑的,因为只需要关心速度,所以初始方向以及初始位置什么的都不需要在意, 因为加速度a=c/v,加速度每时每刻都在变,速度每时每刻也在

Bungee Jumping hdu 1155(物理)

http://acm.hdu.edu.cn/showproblem.php?pid=1155 题意:给出一个人蹦极的高度,绳子的长度,绳子的弹力系数,以及他自身体重.问你他是停留在空中还是安全落地还是速度过大撞死了(V>10). 分析:一年不学物理,物理真成渣了.不过百度看的解析,公式好熟悉啊... mgh=k*x*x/2+m*v*v/2(x为形变量) #include <iostream> #include <stdio.h> #include <string.h&g

Cocos2d-x3.3 Physics物理引擎模块解决了刚体穿透问题

看代码: void PhysicsFixedUpdate::onEnter() { PhysicsDemo::onEnter(); _scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL); _scene->getPhysicsWorld()->setGravity(Point::ZERO); // wall auto wall = Node::create(); wall->setPhy

SPRITEKIT游戏框架之关于PHYSICS物理引擎属性

Spritekit提供了一个默认的物理模拟系统,用来模拟真实物理世界,可以使得编程者将注意力从力学碰撞和重力模拟的计算中解放出来,通过简单地代码来实现物理碰撞的模拟,而将注意力集中在更需要花费精力的地方.现在,让我们来学习这个系统的使用吧. 首先需要认识两个类,一个是场景scene的属性类SKPhysicsWorld,这个类基于场景,只能被修改但是不能被创建,这个类负责提供重力和检查碰撞(碰撞需要实现SKPhysicsContactDelegate代理协议),另一个就是SKPhysicsBody

cocos2dx[3.x](2)——浅析cocos2dx3.2引擎目录

[唠叨] 3.x的引擎目录与2.x的引擎目录的差别是非常大的.学过2.x的朋友应该会发现2.x的引擎目录有点凌乱.而3.x主要是将引擎的各个文件按照用途进行了分类,使得引擎目录结构更加清晰了. [窥探3.x引擎目录] 要想学好cocos2dx,首先就需要对引擎目录下的各个文件有所了解.接下来,就让我们先来分析一下cocos2dx3.2引擎的文件目录吧. 从目录中我们主要了解一下以下几个文件: 文件名 说明 build 官方编译的项目解决方案. 集中放在这个文件中,如cocos2d-win32.v

Unity3D 学习教程 7 基本应用与添加刚体

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 创建一个立方体 按 F2  改名 名字改完后 修改位置 把它放在000 处 我们把y改为10  让它悬在空中 下面就让物体拥有重力.质量  ,就要给物体添加刚体组件 点击物体 点击属性面板 Add component   选择 Physics

托福分类词汇

托福分类词汇表(共17类863个常用单词) 一.   psychology 心理 1.       mental 心理的 2.       physical 身体的,物质的,物理的 3.       spiritual 心灵的 4.       conformity 从众 5.       majority 多数人 6.       minority 少数人 7.       threshold judgment (心理学)初始性判断 8.       subject 受实验对象 9.