Quiz
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2641&lang=jp
AC code
http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4239654#1
code抜粋
int main(){ cin.tie(0); ios::sync_with_stdio(false); // input ll N,Q; cin>>N>>Q; // obstacles vector<Point3D> P(N); VI R(N); VI Magic(N); rep(i,N){ cin>>P[i].x>>P[i].y>>P[i].z; cin>>R[i]>>Magic[i]; } // queries while(Q--){ Point3D a,b; cin>>a.x>>a.y>>a.z; cin>>b.x>>b.y>>b.z; // 線分と点の距離 Segment3D seg(a,b); ll sum=0; rep(i,N){ Point3D p = P[i]; double distance = getDistanceSP(seg, p); if(distance<R[i]){ sum += Magic[i]; }else if(equals(distance, (double)R[i])){ sum += Magic[i]; } } p(sum); } return 0; }
サンプル2
- desmos.comでグラフを書いてみると接していて、その場合も魔力を消費するようだ
- その場合のイコール判定は誤差に弱い。差がepsより小さい時はイコールと判定しよう
desmos用
// circle \left(x-a\right)^{2}+\left(y-b\right)^{2}<r^{2} // line y-y_{1}=m\left(x-x_{1}\right)
その他
- 幾何ライブラリは借りてくることが多そう。使う練習をしておこう
- 借り先:https://github.com/beet-aizu/library/blob/master/geometry/3D/geometry3D.cpp