2073 管道計數器

來源:互聯網
上載者:User
描述

有一個兩端封閉的水平光滑直管道,假設其兩端分別在座標軸的0點和L點處,在0時刻,管道內有n個品質相同的彈性小球(球和管道的直徑相同且無限趨近於0),第i個小球在位置xi以速度vi運動(速度大於則是向L點方向運動,小於0則是向0點方向運動),當小球運動至邊緣(x=0或x=L)時就會原速反彈並使計數器加一,一開始計數器的值是0,問t0時刻計數器的值是多少。

輸入

輸入的第一行是一個整數,為資料的組數t(t<=20)。

對於每組資料,第一行是三個整數n、L、t0,都小於10000。接下來n行每行2個整數xi和vi,表示每個小球初始的座標和速度(0<xi<L且|vi|<100)。

輸出

對於每組資料,輸出一個整數,為計數器的值(剛好在t0時刻到達兩端的也會觸動一次計數器)。

範例輸入
2
1 10 5
5 10
1 10 1
1 -1
範例輸出
5

1

提示

1.光滑指沒有摩擦,彈性指碰撞沒有能量損失。

2.假設i和j發生碰撞,

則有能量守恒:  

和動量守恒:

聯立上面2式可得: 和

腦筋急轉彎

#include<iostream>using namespace std;int main(){ int t; cin >> t;  int x[ 10002 ]; int v[ 10002 ]; for ( int e = 0; e < t; e++ ) {  int n, l, t0;  cin >> n >> l >> t0;  for ( int i = 0; i < n; i++ )  {   cin >> x[ i ] >> v[ i ];  }  int sum = 0;  for ( int i = 0; i < n; i++ )  {   if ( v[ i ] < 0 )   {    if ( t0 * (-v[ i ] ) >= x[ i ] )     sum +=  ( (-v[ i ] ) * t0 - x[ i ] ) / l + 1;   }    else   {    if ( t0 * ( v[ i ] ) >= l - x[ i ] )    sum +=  ( v[ i ] * t0 - l + x[ i ] ) / l + 1;       }  }  cout << sum << endl; } return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.