Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma warning(disable:4786)
- #include<iostream>
- #include<ctype.h>
- #include<bitset>
- #include<sstream>
- #include<algorithm>
- #include<vector>
- #include<string>
- #include<map>
- #include<set>
- #include<queue>
- #include<cmath>
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<utility>
- #include<numeric>
- using namespace std;
- #define inf (1<<28)
- #define eps (1e-14)
- #define pi (acos(-1.0))
- #define _max(a,b) ( (a)>(b)?(a):(b) )
- #define _min(a,b) ( (a)<(b)?(a):(b) )
- #define _clear(a) memset(a,0,sizeof(a))
- #define _nclear(a,n) memset(a,0,(n*sizeof(a[0])))
- #define _set(a) memset(a,-1,sizeof(a))
- #define _sqr(a) ((x)*(x))
- #define contain(s,x) ((s&(1<<x))>0)
- long countBit(long x)
- {
- return (x)? 1 + countBit(x&(x-1)):0;
- }
- template<class T>
- T gcd(T a,T b)
- {
- if(a<0) return gcd(-a,b);
- else if(b<0) return gcd(a,-b);
- else return (b)?gcd(b,a%b):a;
- }
- template<class T>
- T lcm(T a,T b)
- {
- return a*(b/gcd(a,b));
- }
- #define _read(a) freopen(a,"r",stdin)
- #define _writ(a) freopen(a,"w",stdout)
- //typedef __int64 long long;
- //#define _fs "%I64d"
- //#define _fs "%lld"
- typedef vector < int > vi;
- typedef pair < int, int > pii;
- typedef pair < int, pii > piii;
- typedef vector < pii > vpii;
- typedef vector < string > vs;
- typedef pair < string, int > psi;
- #define X first
- #define Y second
- #define MAX 405
- long n, pain;
- long double a[ MAX ], res[ MAX ];
- long double subprocess( long double k, long fix )
- {
- long double ret = 0;
- long x;
- for( x = fix + 1, res[ fix ] = a[ fix ] ; x < n ; x++ ) res[ x ] = res[ x - 1 ] + k;
- for( x = fix - 1 ; x >= 0 ; x-- ) res[ x ] = res[ x + 1 ] - k;
- for( x = 0 ; x < n ; x++ ) ret += fabs( a[ x ] - res[ x ] );
- return ret;
- }
- //long double process( long double k, long &fix )
- long double process( long double k )
- {
- long double ret, tmp;
- pain = 0;
- for( long i = 0 ; i < n ; i++ )
- {
- if( i == 0 ) ret = subprocess( k, i );
- // else ret = _min( ret, subprocess( k, i ) );
- else if( ret > ( tmp = subprocess( k, i ) ) )
- {
- ret = tmp;
- pain = i;
- }
- }
- return ret;
- }
- long double ternary( long double x, long double y, long d )
- {
- if( d == 100 ) return ( x + y ) / 2;
- long fix1 = 0, fix2 = 0;
- long double m1 = ( 2 * x + y ) / 3., m2 = ( x + 2 * y ) / 3.;
- long double kk1 = process( m1 ), kk2 = process( m2 );
- if( kk1 < kk2 ) return ternary( x, m2, d + 1 );
- else return ternary( m1, y, d + 1 );
- }
- int main()
- {
- long i;
- _read( "g.txt" );
- cin >> n;
- for( i = 0 ; i < n ; i++ ) cin >> a[ i ];
- // long double gap = ternary( 0, 1000000., 0 );
- printf( "%.10Lf\n", process( gap ) );
- gap = subprocess( gap, pain );
- printf( "%.10lf",res[ 0 ] );
- for( i = 1 ; i < n ; i++ ) printf( " %.10Lf",res[ i ] );
- printf( "\n" );
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement