これは割とすんなり解けた。
https://yukicoder.me/problems/no/3168
問題
3次元座標上で点(A,B,C)が与えられる。
原点と点(A,B,C)を結ぶ直線を中心とする半径1の円柱を考える。
この円柱とxy座標の共通部分の面積をSとしたとき、(S/π)^2を求めよ。
解法
原点と点(A,B,C)を結ぶ直線と、xy平面がなす角をθとすると、S/π=1/sinθ=√( (A^2+B^2+C^2)/(C^2))となる。
int T; ll A,B,C; const ll mo=998244353; ll modpow(ll a, ll n = mo-2) { ll r=1;a%=mo; while(n) r=r*((n%2)?a:1)%mo,a=a*a%mo,n>>=1; return r; } void solve() { int i,j,k,l,r,x,y; string s; cin>>T; while(T--) { cin>>A>>B>>C; ll ret=((A*A+B*B+C*C)%mo)*(modpow(C*C))%mo; cout<<ret<<endl; } }
まとめ
ここまではすんなり行って良かったね。