さてC。
http://kupc2012pr.contest.atcoder.jp/tasks/kupc2012pr_3
問題
今宇宙船が重力加速度gの惑星の高度hにある。
この宇宙船から初速度vで機械を撃ちだすことができる。
ここでtを入力すると、機械のt秒後の高度を返す。
この機械の高度yが、で表せられるとき、g,v,hを答えよ。
なお、機械は最大10回までしか撃ちだせない。
解法
変数は3つなので、3回クエリを実行すればよい。
例えばt=0,1,2を入力した返り値y0,y1,y2を使うと以下の3式が得られる。
あとは方程式を解くだけ。
double answer(double t) { double res; printf("? %.12f\n", t); fflush(stdout); scanf("%lf", &res); return res; } void solve() { int f,r,i,j,k,l,x,y,tx,ty; double v1,v2; double h,v,g; h=answer(0); v1=answer(1); v2=answer(2); g=(h-v2)-2*(h-v1); v=(2*(h-v1)-g)*(-1/sqrt(2)); printf("! %.12f %.12f %.12f\n", h, v, g); fflush(stdout); return; }
まとめ
クエリ系の問題としては簡単。