結果

問題 No.622 点と三角柱の内外判定
ユーザー ikdikd
提出日時 2017-12-27 19:40:13
言語 D
(dmd 2.109.1)
結果
WA  
実行時間 -
コード長 979 bytes
コンパイル時間 722 ms
コンパイル使用メモリ 108,536 KB
実行使用メモリ 6,948 KB
最終ジャッジ日時 2024-06-12 23:16:43
合計ジャッジ時間 1,530 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 20 WA * 12
権限があれば一括ダウンロードができます

ソースコード

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