hdu 5826 physics (物理+积分)

来源:互联网 发布:msaa 知乎 编辑:程序博客网 时间:2024/06/07 18:02

题意:给出n个相同小球的初速度和初位置,初方向,v*a=c,碰撞为完全弹性碰撞,问t时刻的第k小的速度为多少

思路:

v*a=c

v*dv/dt=c;

v*dv=c*dt;

1/2*v*v=c*t+c0;

把t=0代入,得c0=1/2*v0*v0;

所以 v=sqrt(2*c*t+v0*v0)

注意2*c*t+v0*v0会爆int


#include <iostream>  #include <cstdio>  #include <cstring>  #include <cmath>  #include <algorithm>  #include <stack>#include <queue>  #include <map>  #include <set>  #include <vector>  #define LL long long  #define eps 1e-8  #define maxn 150  #define mod 110119  #define inf 0x3f3f3f3f  #define IN freopen("in.txt","r",stdin);  using namespace std; int main(){//IN;int t;cin>>t;int V[100005],D[100005],X[100005];int n,c;while(t--){int n,c;scanf("%d%d",&n,&c);for(int i=0;i<n;i++){scanf("%d%d%d",&V[i],&X[i],&D[i]);}sort(V,V+n);int m;scanf("%d",&m);int k,t;for(int i=0;i<m;i++){scanf("%d%d",&t,&k);double ans=sqrt(double((LL)2*c*t+(LL)V[k-1]*V[k-1]));printf("%.3f\n",ans);}}return 0;}


0 0
原创粉丝点击