package main import . "fmt" func main() { var x,y,z,w float64 Scan(&x,&y,&z,&w) ans := (x - y*z)/2 Println(ans) } /* 考察 |BC| = L と置くと |AB| = X/L |PD| = L - Y |QD| = X/L - Z となり 3つの角の三角形の面積の式を立てられるので 求める三角形の面積Sは全体の面積から3つの角の三角形を引いた形なので S = X - |BC|*|CP|/2 - |AB|*|AP|/2 - |PD|*|QD|/2 = X - L*Z/2 - X/L*Y/2 - (L-Y)*(X/L-Z)/2 = (X - Y*Z)/2 となり 入力の値からだけで面積が求まる (Wを含めて全部が整数で整合性が取れる入力ってどうやって作るんだろうか?難しそう) さて、サンプルは上記でOKのようなのでそれでは難易度設定に合わない コーナーケースが存在するかについて考えねば さきほど |PD| = L - Y としたが 点Pが点Dと一致しないとは問題の条件に書かれてなく保証されないので |PD| = 0 もありうる?(その場合、点Qは点Dとは一致しない、点Pと点Qは一致しないことが問題の条件で保証されてるため) その場合の面積はどうなるのか まぁ |AP| = |AD| = L = Y となるので BPは長方形の対角線になるので△BPCは長方形の半分 そこから△BCQを引けば求める面積になるはず? S = X/2 - L*Z/2 = X/2 - Y*Z/2 一致ですね 点Qが点Dと一致する場合はどうか? |CQ| = |CD| = X/L = Z BQは対角線なので求める面積はさっきと同様に S = X/2 - X/L*Y/2 = X/2 - Y*Z/2 一致ですね さて、Wを使用しないし、難易度設定に合わないし、何か見落としが…? */