結果
問題 | No.2971 無理積分 |
ユーザー |
👑 |
提出日時 | 2023-08-25 11:54:11 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 1,000 ms |
コード長 | 2,384 bytes |
コンパイル時間 | 3,438 ms |
コンパイル使用メモリ | 216,380 KB |
最終ジャッジ日時 | 2025-02-16 13:26:50 |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 36 |
ソースコード
#ifdef DEBUG#define _GLIBCXX_DEBUG#define UNTIE ios_base::sync_with_stdio( false ); cin.tie( nullptr ); signal( SIGABRT , &AlertAbort )#define DEXPR( LL , BOUND , VALUE , DEBUG_VALUE ) CEXPR( LL , BOUND , DEBUG_VALUE )#define CERR( MESSAGE ) cerr << MESSAGE << endl;#define COUT( ANSWER ) cout << ANSWER << endl#define ASSERT( A , MIN , MAX ) CERR( "ASSERTチェック: " << ( MIN ) << ( ( MIN ) <= A ? "<=" : ">" ) << A << ( A <= ( MAX ) ? "<=" : ">" ) << ( MAX) ); assert( ( MIN ) <= A && A <= ( MAX ) )#else#pragma GCC optimize ( "O3" )#pragma GCC optimize( "unroll-loops" )#pragma GCC target ( "sse4.2,fma,avx2,popcnt,lzcnt,bmi2" )#define UNTIE ios_base::sync_with_stdio( false ); cin.tie( nullptr )#define DEXPR( LL , BOUND , VALUE , DEBUG_VALUE ) CEXPR( LL , BOUND , VALUE )#define CERR( MESSAGE )#define COUT( ANSWER ) cout << ANSWER << "\n"#define ASSERT( A , MIN , MAX ) assert( ( MIN ) <= A && A <= ( MAX ) )#endif#include <bits/stdc++.h>using namespace std;#define MAIN main#define TYPE_OF( VAR ) decay_t<decltype( VAR )>#define CEXPR( LL , BOUND , VALUE ) constexpr LL BOUND = VALUE#define CIN( LL , A ) LL A; cin >> A#define SET_ASSERT( A , MIN , MAX ) cin >> A; ASSERT( A , MIN , MAX )#define CIN_ASSERT( A , MIN , MAX ) TYPE_OF( MAX ) A; SET_ASSERT( A , MIN , MAX )#define FOR( VAR , INITIAL , FINAL_PLUS_ONE ) for( TYPE_OF( FINAL_PLUS_ONE ) VAR = INITIAL ; VAR < FINAL_PLUS_ONE ; VAR ++ )#define SET_PRECISION( DECIMAL_DIGITS ) cout << fixed << setprecision( DECIMAL_DIGITS )#define QUIT return 0#define RETURN( ANSWER ) COUT( ( ANSWER ) ); QUIT#ifdef DEBUGinline void AlertAbort( int n ) { CERR("abort関数が呼ばれました。assertマクロのメッセージが出力されていない場合はオーバーフローの有無を確認をしてください。" ); }#endifint MAIN(){UNTIE;CEXPR( int , bound_N , 1000 ); // 0が3個CIN_ASSERT( N , 0 , bound_N );int N3 = N * N * N;double sqrtN3 = sqrt( N3 );double x = 0;double y = sqrtN3;int hit = 0;int j = 0;CEXPR( int , ulim_ij , 10000 ); // 0が4個CEXPR( double , d , 1.0 / ulim_ij );FOR( i , 0 , ulim_ij ){hit += j;x += d;while( y * y < x * x * x + N3 ){y += d;j++;hit++;}}SET_PRECISION( 6 );RETURN( ( 1.0 * hit ) / ( ulim_ij * ulim_ij ) + sqrtN3 );}