Pisson方程式
http://acm.pku.edu.cn/JudgeOnline/problem?id=2601
この問題、ただの漸化式的な問題に見えるけれども、実は1次元Poisson方程式を解く問題だったりする。
っていうのはつまり、と書けるわけで。
そうすると、両端がディリクレ条件になっていると考えて、各点の2階微分が与えられているわけなので、2回積分してやればいい。より正確には、a1を求める問題なので、を求めてやればいい。
この場合の考え方としては、といった感じ。
これをコードに落とすとこうなる。
import java.util.*; class Main{ public static void main(String [] argv){ Scanner scanner = new Scanner(System.in); double v = 0; int size = scanner.nextInt(); double a0 = scanner.nextDouble(); double anp1 = scanner.nextDouble(); double a_dash = 0.0; for(int i = 0; i < size; i++){ double ci = scanner.nextDouble() * 2; a_dash += ci; v += a_dash; } double a_dash1 = ((anp1 - a0) - v) / (size + 1); double a1 = a0 + a_dash1; System.out.printf("%.02f\n", a1); } }
要は、積分定数を求める問題に帰着してしまうというわけ。細かい解説はしないので、適当によろしく。
普通に漸化式的にも解けるけれど、こういう考え方をするとそれはそれで趣き深い問題だよねん。