3412 - Ray
http://poj.org/problem?id=3412
問題
K層の物質の屈折率と最初の層での角度が与えられる。
最後の層での角度を求めよ。
解法
屈折率と角度の関係式が与えられているのでそのとおりにasinなんかを使って実装する。
asinするべきところが1より大きかったら全反射。
ソース
int main() { int n; cin >> n; double r[n]; REP(i,n) { cin >> r[i]; } double a; cin >> a; bool f = 1; REP(i,n-1) { double hoge = r[i]/r[i+1] * sin(a); if (hoge < 0 || hoge > 1) { f = 0; break; } a = asin(hoge); } if (f) printf("%.5f\n", a); else cout << "NO" << endl; }