結果

問題 No.622 点と三角柱の内外判定
ユーザー ikdikd
提出日時 2017-12-27 19:18:39
言語 D
(dmd 2.106.1)
結果
WA  
実行時間 -
コード長 980 bytes
コンパイル時間 709 ms
コンパイル使用メモリ 110,456 KB
実行使用メモリ 6,948 KB
最終ジャッジ日時 2024-06-12 23:16:35
合計ジャッジ時間 1,607 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
testcase_25 WA -
testcase_26 WA -
testcase_27 WA -
testcase_28 WA -
testcase_29 WA -
testcase_30 WA -
testcase_31 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

void main(){
  import std.stdio, std.string, std.conv, std.algorithm;
  import std.typecons, std.math;

  alias P=Tuple!(double, "x", double, "y", double, "z");
  auto abc=new P[](3);
  foreach(i; 0..3) rd(abc[i].x, abc[i].y, abc[i].z);
  P d;
  rd(d.x, d.y, d.z);

  alias V=P;
  V vectorizeAtoB(P A, P B){ // from:A to:B
    return V(B.x-A.x, B.y-A.y, B.z-A.z);
  }
  double dot(V v1, V v2){
    return v1.x*v2.x+v1.y*v2.y+v1.z*v2.z;
  }
  bool ok=true;
  foreach(i; 0..3){
    auto vd=vectorizeAtoB(abc[i], d),
         v1=vectorizeAtoB(abc[i], abc[(i-1+3)%3]),
         v2=vectorizeAtoB(abc[i], abc[(i+1)%3]);
    if(dot(vd, v1)<0 || dot(vd, v2)<0) ok=false;
  }

  if(ok) writeln("Yes");
  else writeln("No");
}


void rd(T...)(ref T x){
  import std.stdio, std.string, std.conv;
  auto l=readln.split;
  assert(l.length==x.length);
  foreach(i, ref e; x){
    e=l[i].to!(typeof(e));
  }
}
void wr(T...)(T x){
  import std.stdio;
  foreach(e; x) write(e, " ");
  writeln();
}
0