Advertisement
BoxerTC

Untitled

Jun 28th, 2015
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.23 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define sc( x ) scanf( "%d" , &x )
  5. #define REP( i , n ) for( int i = 0 ; i < n ; i++ )
  6. #define clr( t , val ) memset( t , val , sizeof(t) )
  7.  
  8. #define all(v)  v.begin() , v.end()
  9. #define pb push_back
  10. #define SZ( v ) ((int)(v).size())
  11.  
  12. #define mp make_pair
  13. #define fi first
  14. #define se second
  15.  
  16. #define test() cerr << "hola que hace ?\n";
  17. #define DEBUG( x ) cerr <<  #x << "=" << x << endl;
  18. #define DEBUG2( x , y ) cerr << #x << "=" << x << " " << #y << "=" << y << endl;
  19.  
  20. #define N 160
  21. #define EPS 1e-8
  22.  
  23. typedef long long ll;
  24. typedef pair< int , int > pii;
  25. typedef vector< int > vi;
  26. typedef long double ld;
  27. typedef vector< ld> poly;
  28.  
  29. const ld PI = acos( (ld)(-1.0) );
  30. poly prod( poly A , poly B ){
  31.     int nA = A.size() , nB = B.size() , nV = nA + nB;
  32.     poly V( nV );
  33.     REP( i , nA ) REP( j , nB ) V[ i + j ] += A[ i ] * B[ j ];
  34.     return V;
  35. }
  36. poly Integral( poly P ){
  37.     int nP = P.size();
  38.     poly V( nP + 1 );
  39.     REP( i , nP ) V[ i + 1 ] = P[ i ]/( i + 1 );
  40.     return V;
  41. }
  42. ld eval( poly &P , ld x ){
  43.     int nP = P.size();
  44.     ld ans = 0;
  45.     for( int i = nP - 1 ; i >= 0 ;--i )
  46.         ans = ans * x + P[ i ];
  47.     return ans;
  48. }
  49. ld f( ld A , ld B , ld dx , ld slices ){
  50.     if( A > B ) swap( A , B );
  51.     if( abs( A - B ) < EPS ){
  52.         ld t = sin( (PI * 2.0) / slices );
  53.         return (t * A * A * dx * slices) / 6.0;
  54.     }
  55.     ld x = A * dx / (B - A);
  56.     ld H = x + dx;
  57.     ld t = sin( (PI * 2.0) / slices );
  58.     ld S1 = t * B * B * H / 6.0;
  59.     ld S2 = t * A * A * x / 6.0;
  60.     return (S1 - S2) * slices;
  61. }
  62. int main(){
  63.     int cases;
  64.     cin >> cases;
  65.     REP( tc , cases ){
  66.         int n;
  67.         cin >> n;
  68.         poly p(n + 1);
  69.         REP( i , n + 1 ) cin >> p[ i ];
  70.         reverse( all( p ) );
  71.         ld a , b;
  72.         cin >> a >> b;
  73.         int slices , stacks;
  74.         cin >> slices >> stacks;
  75.         poly q = Integral( prod( p , p ) );
  76.         ld S = eval( q , b ) - eval( q , a );
  77.         S *= PI;
  78.         //DEBUG( S );
  79.         ld R = 0;
  80.         ld len = (b - a)/(ld)stacks;
  81.         REP( i , stacks ){
  82.             ld xa = a + len * i;
  83.             ld xb = xa + len;
  84.             R += f( eval( p , xa ) , eval( p , xb ) , len , (ld) slices );
  85.         }
  86.         //DEBUG2( S , R );
  87.         ld ans = abs( S - R ) / S;
  88.         ans *= 100;
  89.         printf( "Case %d: %.4f\n" , tc + 1 , (double)ans );
  90.         //DEBUG( ans );
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement