Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.78 KB | None | 0 0
  1. #pragma warning(disable:4786)
  2. #include<iostream>
  3. #include<ctype.h>
  4. #include<bitset>
  5. #include<sstream>
  6. #include<algorithm>
  7. #include<vector>
  8. #include<string>
  9. #include<map>
  10. #include<set>
  11. #include<queue>
  12. #include<cmath>
  13. #include<cstdio>
  14. #include<cstdlib>
  15. #include<cstring>
  16. #include<utility>
  17. #include<numeric>
  18.  
  19. using namespace std;
  20.  
  21. #define inf (1<<28)
  22. #define eps (1e-14)
  23. #define pi (acos(-1.0))
  24.  
  25. #define _max(a,b) ( (a)>(b)?(a):(b) )
  26. #define _min(a,b) ( (a)<(b)?(a):(b) )
  27. #define _clear(a) memset(a,0,sizeof(a))
  28. #define _nclear(a,n) memset(a,0,(n*sizeof(a[0])))
  29. #define _set(a) memset(a,-1,sizeof(a))
  30. #define _sqr(a) ((x)*(x))
  31. #define contain(s,x) ((s&(1<<x))>0)
  32.  
  33. long countBit(long x)
  34. {
  35. return (x)? 1 + countBit(x&(x-1)):0;
  36. }
  37.  
  38. template<class T>
  39. T gcd(T a,T b)
  40. {
  41. if(a<0) return gcd(-a,b);
  42. else if(b<0) return gcd(a,-b);
  43. else return (b)?gcd(b,a%b):a;
  44. }
  45.  
  46. template<class T>
  47. T lcm(T a,T b)
  48. {
  49. return a*(b/gcd(a,b));
  50. }
  51.  
  52. #define _read(a) freopen(a,"r",stdin)
  53. #define _writ(a) freopen(a,"w",stdout)
  54.  
  55. //typedef __int64 long long;
  56. //#define _fs "%I64d"
  57. //#define _fs "%lld"
  58.  
  59. typedef vector < int > vi;
  60. typedef pair < int, int > pii;
  61. typedef pair < int, pii > piii;
  62. typedef vector < pii > vpii;
  63. typedef vector < string > vs;
  64. typedef pair < string, int > psi;
  65.  
  66. #define X first
  67. #define Y second
  68.  
  69. #define MAX 405
  70.  
  71. long n, pain;
  72. long double a[ MAX ], res[ MAX ];
  73.  
  74.  
  75. long double subprocess( long double k, long fix )
  76. {
  77. long double ret = 0;
  78. long x;
  79.  
  80. for( x = fix + 1, res[ fix ] = a[ fix ] ; x < n ; x++ ) res[ x ] = res[ x - 1 ] + k;
  81. for( x = fix - 1 ; x >= 0 ; x-- ) res[ x ] = res[ x + 1 ] - k;
  82. for( x = 0 ; x < n ; x++ ) ret += fabs( a[ x ] - res[ x ] );
  83. return ret;
  84. }
  85.  
  86. //long double process( long double k, long &fix )
  87. long double process( long double k )
  88. {
  89. long double ret, tmp;
  90. pain = 0;
  91. for( long i = 0 ; i < n ; i++ )
  92. {
  93. if( i == 0 ) ret = subprocess( k, i );
  94. // else ret = _min( ret, subprocess( k, i ) );
  95.  
  96. else if( ret > ( tmp = subprocess( k, i ) ) )
  97. {
  98. ret = tmp;
  99. pain = i;
  100. }
  101.  
  102. }
  103. return ret;
  104. }
  105.  
  106. long double ternary( long double x, long double y, long d )
  107. {
  108. if( d == 100 ) return ( x + y ) / 2;
  109.  
  110. long fix1 = 0, fix2 = 0;
  111. long double m1 = ( 2 * x + y ) / 3., m2 = ( x + 2 * y ) / 3.;
  112. long double kk1 = process( m1 ), kk2 = process( m2 );
  113.  
  114. if( kk1 < kk2 ) return ternary( x, m2, d + 1 );
  115. else return ternary( m1, y, d + 1 );
  116. }
  117.  
  118. int main()
  119. {
  120.  
  121. long i;
  122.  
  123. _read( "g.txt" );
  124.  
  125. cin >> n;
  126.  
  127. for( i = 0 ; i < n ; i++ ) cin >> a[ i ];
  128.  
  129. // long double gap = ternary( 0, 1000000., 0 );
  130.  
  131. printf( "%.10Lf\n", process( gap ) );
  132.  
  133. gap = subprocess( gap, pain );
  134.  
  135. printf( "%.10lf",res[ 0 ] );
  136. for( i = 1 ; i < n ; i++ ) printf( " %.10Lf",res[ i ] );
  137. printf( "\n" );
  138.  
  139. return 0;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement