結果

問題 No.132 点と平面との距離
ユーザー LayCurseLayCurse
提出日時 2014-11-13 07:33:23
言語 C++11
(gcc 11.4.0)
結果
WA  
実行時間 -
コード長 1,013 bytes
コンパイル時間 1,214 ms
コンパイル使用メモリ 159,980 KB
実行使用メモリ 6,948 KB
最終ジャッジ日時 2024-06-10 02:38:50
合計ジャッジ時間 1,716 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 4 ms
6,812 KB
testcase_01 WA -
testcase_02 WA -
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:16:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   16 |   scanf("%d",&N);
      |   ~~~~~^~~~~~~~~
main.cpp:17:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   17 |   scanf("%lf%lf%lf",&dx,&dy,&dz);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp:18:17: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   18 |   rep(i,N) scanf("%lf%lf%lf",X+i,Y+i,Z+i), X[i]-=dx, Y[i]-=dy, Z[i]-=dz;
      |            ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;

#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)

int N;
double X[101], Y[101], Z[101];

int main(){
  int i, a, b, c;
  double dx, dy, dz;
  double d1, d2, d3, ss, s, v;
  double res;

  scanf("%d",&N);
  scanf("%lf%lf%lf",&dx,&dy,&dz);
  rep(i,N) scanf("%lf%lf%lf",X+i,Y+i,Z+i), X[i]-=dx, Y[i]-=dy, Z[i]-=dz;

  res = 0;
  rep(a,N) REP(b,a+1,N) REP(c,b+1,N){
    d1 = sqrt( (X[a]-X[b])*(X[a]-X[b]) + (Y[a]-Y[b])*(Y[a]-Y[b]) + (Z[a]-Z[b])*(Z[a]-Z[b]) );
    d2 = sqrt( (X[b]-X[c])*(X[b]-X[c]) + (Y[b]-Y[c])*(Y[b]-Y[c]) + (Z[b]-Z[c])*(Z[b]-Z[c]) );
    d3 = sqrt( (X[c]-X[a])*(X[c]-X[a]) + (Y[c]-Y[a])*(Y[c]-Y[a]) + (Z[c]-Z[a])*(Z[c]-Z[a]) );
    ss = (d1+d2+d3) / 2;
    s = sqrt(ss*(ss-d1)*(ss-d2)*(ss-d3));

    v = (X[a]*Y[b]*Z[c] + X[b]*Y[c]*Z[a] + X[c]*Y[a]*Z[b] - X[c]*Y[b]*Z[a] - X[b]*Y[a]*Z[c] - X[a]*Y[c]*Z[b]) / 6;
    v = max(v, -v) * 3;

    res += v / s;
  }
  printf("%.15f\n", res);
  
  return 0;
}
0