情报学奥赛一本通1073:救援|OpenJudge NOI 1.5 19


【タイトルリンク】
ybt 1073:救援OpenJudge NOI 1.5 19:救援
【問題点】
1.直角座標系下のある点から原点までの距離
点(x,y)(x,y)(x,y)から原点までの距離d=x 2+y 2 d=sqrt{x^2+y^2}d=x 2+y 2
2.速度v,時間t,道のりsの関係
s = v ⋅ t s = v\cdot t s=v⋅t
3.循環
【問題解きの考え方】
  • 各屋根の座標x,yを入力し、その位置から原点までの距離d,d=x 2+y 2 d=sqrt{x^2+y^2}d=x 2+y 2
  • を求める
  • ワンウェイパスd、往復2 d、既知速度v=50 v=50 v=50なので、1つの屋根往復用にt 1=2 d/v=2 x 2+y 2 50 t_1 = 2d/v =\frac{2\sqrt{x^2+y^2}}{50} t1​=2d/v=502x2+y2 ​​
  • 屋根あたりの人数pを入力し、1人当たりの乗船と下船を合わせて1.5分かかり、彼らが下船するのに合計t 2=1.5 p t_2 = 1.5p t2​=1.5p
  • 従って1つの屋根を救う人の総使用時間はt=t 1+t 2=2 x 2+y 2 50+1.5 p t=t_である1 + t_2 =\frac{2\sqrt{x^2+y^2}}{50} + 1.5p t=t1​+t2​=502x2+y2 ​​+1.5p
  • をn回循環し、n個の屋根を救った人の時間を加算し、救援に必要な総時間とし、最後に上へ整理します.

  • 【問題解決コード】
    解法1:
    #include
    using namespace std;
    int main()
    {
         
        int n;
        double time = 0;
        cin>>n;
        double x, y, p;
        for(int i = 1; i<=n; ++i)
        {
         
    
            cin>>x>>y>>p;
            time += sqrt(x*x + y*y) / 50 * 2+ p * 1.5;
        }
        cout<<ceil(time);
    	return 0;
    }