1 //humanity is a very illusive quality 
2 
3 /* 
4 Name: 
5 OJ: 
6 Link: 
7 Algorithm: 
8 Type: 
9 Difficulty: 
10 Interest: 
11 Additional: 
12 */ 
13 #include<cstdio> 
14 #include<cstring> 
15 #include<cstdlib> 
16 #include<cctype> 
17 
18 #include<cmath> 
19 #include<iostream> 
20 #include<fstream> 
21 
22 #include<string> 
23 #include<vector> 
24 #include<queue> 
25 #include<map> 
26 #include<algorithm> 
27 #include<set> 
28 #include<sstream> 
29 #include<stack> 
30 #include <ctime> 
31 using namespace std; 
32 
33 class TimeLogger { 
34 clock_t st, nd; double elapsed; 
35 public: 
36 TimeLogger() { st = clock(); } 
37 ~TimeLogger() { 
38 nd = clock(); elapsed = (nd - st)/(double)CLOCKS_PER_SEC; 
39 printf("nYour program took %.3lf secondsn", elapsed); 
40 } 
41 }; 
42 
43 const int inf = (1<<28); 
44 const double pi = (2.0*acos(0.0)); 
45 const double eps = 1e-9; 
46 const double eps2 = 1e-12; // printf rounder 
47 const double sensitiveEPS = 1e-14;// depends on digits after . ex 7 
digit 
48 
49 typedef long long lli; 
50 //typedef __int64 lli; 
51 //typedef unsigned long long llu; 
52 //typedef unsigned __int64 llu; 
53 //typedef pair < int , int > pii; 
54 //typedef vector < int > vi; 
55 //typedef vector < string > vs; 
56 
57 #define isp2( a ) (!(a & (a-1))) 
58 #define CLR( a ) memset(a , 0 , sizeof (a)) 
59 #define SET( a , b) memset(a , b , sizeof (a)) 
60 #define SZ( a ) ((int)a.size()) 
61 #define all( a ) a.begin(),a.end() 
62 
63 
64 //#define _rep( i, a, b, x ) for( __typeof(b) i = ( a ); i <= ( b ); 
i += x )
65 #define _rep( i, a, b, x ) for( i = ( a ) ; i <= ( b ) ; i += x ) 
66 #define rep( i, n ) _rep( i, 0, n - 1, 1 ) 
67 #define _rrep( i, a, b, x ) for( i = (a) ; i >= (b) ; i -= x ) 
68 #define rrep( i, a, b) _rrep( i, a, b, 1) 
69 #define xrep( i, a, b) _rep( i, a, b, 1) 
70 
71 #define SD( a ) scanf("%d",&a) 
72 #define SL( a ) scanf("%lld",&a) 
73 #define SI( a ) scanf("%I64d",&a) 
74 #define SS( a ) scanf("%s",a) 
75 #define SF( a ) scanf("%lf",&a) 
76 
77 #define pb push_back 
78 #define ff first 
79 #define ss second 
80 ///Comparision macros 
81 #define _aEb(a,b) (fabs((a)-(b))<eps) 
82 #define _aGb(a,b) ((a)>(b)+eps) 
83 #define _aLb(a,b) ((a)+eps<(b)) 
84 #define _aLEb(a,b) (_aLb(a,b) || _aEb(a,b)) 
85 #define _aGEb(a,b) (_aGb(a,b) || _aEb(a,b)) 
86 #define _minf(a,b) ((a)+eps<(b)?(a):(b)) 
87 #define _maxf(a,b) ((a)+eps<(b)?(b):(a)) 
88 #define _sq(x) ((x)*(x)) 
89 
90 const int MX = 1000; 
91 struct RKFMY 
92 { 
93 double t[ MX + 10 ]; 
94 double y[ MX + 10 ]; 
95 double w[ MX + 10 ]; 
96 double ww[ MX + 10 ]; 
97 double h[ MX + 10 ]; 
98 double R[ MX + 10 ]; 
99 double a , b , alpha , hmax, hmin; 
100 double TOL; 
101 bool flag; 
102 
103 double k[7]; 
104 
105 double f( double T , double Y ) 
106 { 
107 return ( Y - T*T + 1 ); 
108 } 
109 void init() 
110 { 
111 hmax = .25; 
112 hmin = .01; 
113 a = 0.; 
114 b = 2.; 
115 alpha = .5; 
116 t[ 0 ] = a; 
117 w[ 0 ] = alpha; 
118 h[ 0 ] = hmax; 
119 flag = true; 
120 TOL = 1.e-5; 
121 } 
122 double runIt() 
123 { 
124 int i = 0,j; 
125 while( flag && i<200 ) 
126 { 
127 k[1] = h[i] * f( t[i] , w[i] ); 
128 k[2] = h[i] * f( t[i] + (1./4.) * h[i] , w[i] + (1./4.) * 
k[1] ); 
129 k[3] = h[i] * f( t[i] + (3./8.) * h[i] , w[i] + (3./32.)*
k[1] + (9/32.)*k[2] ); 
130 k[4] = h[i] * f( t[i] + (12./13.)*h[i] , w[i] + (1932./ 
2197.)*k[1] 
131 - (7200./2197)*k[2] + (7296./ 
2197)*k[3] ); 
132 k[5] = h[i] * f( t[i] + h[i] , w[i] + (439./ 
216.)*k[1] - 8.*k[2] 
133 + (3680./513)*k[3] - (845./ 
4104)*k[4] ) ; 
134 k[6] = h[i] * f( t[i] + .5*h[i] , w[i] - (8./27.)* 
k[1] + 2.*k[2] 
135 - (3544./2565.)*k[3] + (1859./ 
4104.)*k[4] - (11./40.)*k[5] ); 
136 i++; 
137 
138 R[i] = (1./h[i-1]) * fabs( (1./360.)*k[1] - (128./4275.)* 
k[3] - (2197./75240.)*k[4] 
139 + (1./50.)*k[5] 
+ (2./55.)*k[6] ); 
140 
141 if( _aLEb(R[i],TOL) ) 
142 { 
143 t[i] = t[i-1] + h[i-1]; 
144 w[i] = w[i-1] + (25./216.)*k[1] + (1408./2565.)*k[3] 
+ (2197./4104.)*k[4] - (1./5.)*k[5]; 
145 printf("%.12lf %.12lf %.12lf %.12lfn",t[i],w[i],h[ 
i-1],R[i]); 
146 } 
147 
148 double del = .84 * pow( double(TOL / R[i]) , double(1./4. 
) ); 
149 
150 if( _aLb( del , .1 ) ) h[i] = .1 *h[i-1]; 
151 else if ( _aGb( del , 4. ) ) h[i] = 4 *h[i-1]; 
152 else h[i] = del*h[i-1]; 
153 
154 if( _aGb( h[i] , hmax ) ) h[i] = hmax ; 
155 if( _aGb( t[i] , b ) ) flag = 0; 
156 else if( _aGb( t[i] + h[i] , b ) ) h[i] = b-t[i]; 
157 else if( _aLb( h[i] , hmin ) ) 
158 { 
159 flag = 0; 
160 printf("min h exceededn"); 
161 } 
162 } 
163 } 
164 
165 }; 
166 RKFMY rk; 
167 int main(void) 
168 { 
169 //freopen("in.txt","r",stdin); 
170 //freopen("out.txt","w",stdout); 
171 //TimeLogger tm; 
172 int i,j,k,kase=0; 
173 
174 rk.init(); 
175 rk.runIt(); 
176 
177 return 0; 
178 }

Rkf

  • 1.
    1 //humanity isa very illusive quality 2 3 /* 4 Name: 5 OJ: 6 Link: 7 Algorithm: 8 Type: 9 Difficulty: 10 Interest: 11 Additional: 12 */ 13 #include<cstdio> 14 #include<cstring> 15 #include<cstdlib> 16 #include<cctype> 17 18 #include<cmath> 19 #include<iostream> 20 #include<fstream> 21 22 #include<string> 23 #include<vector> 24 #include<queue> 25 #include<map> 26 #include<algorithm> 27 #include<set> 28 #include<sstream> 29 #include<stack> 30 #include <ctime> 31 using namespace std; 32 33 class TimeLogger { 34 clock_t st, nd; double elapsed; 35 public: 36 TimeLogger() { st = clock(); } 37 ~TimeLogger() { 38 nd = clock(); elapsed = (nd - st)/(double)CLOCKS_PER_SEC; 39 printf("nYour program took %.3lf secondsn", elapsed); 40 } 41 }; 42 43 const int inf = (1<<28); 44 const double pi = (2.0*acos(0.0)); 45 const double eps = 1e-9; 46 const double eps2 = 1e-12; // printf rounder 47 const double sensitiveEPS = 1e-14;// depends on digits after . ex 7 digit 48 49 typedef long long lli; 50 //typedef __int64 lli; 51 //typedef unsigned long long llu; 52 //typedef unsigned __int64 llu; 53 //typedef pair < int , int > pii; 54 //typedef vector < int > vi; 55 //typedef vector < string > vs; 56 57 #define isp2( a ) (!(a & (a-1))) 58 #define CLR( a ) memset(a , 0 , sizeof (a)) 59 #define SET( a , b) memset(a , b , sizeof (a)) 60 #define SZ( a ) ((int)a.size()) 61 #define all( a ) a.begin(),a.end() 62 63 64 //#define _rep( i, a, b, x ) for( __typeof(b) i = ( a ); i <= ( b ); i += x )
  • 2.
    65 #define _rep(i, a, b, x ) for( i = ( a ) ; i <= ( b ) ; i += x ) 66 #define rep( i, n ) _rep( i, 0, n - 1, 1 ) 67 #define _rrep( i, a, b, x ) for( i = (a) ; i >= (b) ; i -= x ) 68 #define rrep( i, a, b) _rrep( i, a, b, 1) 69 #define xrep( i, a, b) _rep( i, a, b, 1) 70 71 #define SD( a ) scanf("%d",&a) 72 #define SL( a ) scanf("%lld",&a) 73 #define SI( a ) scanf("%I64d",&a) 74 #define SS( a ) scanf("%s",a) 75 #define SF( a ) scanf("%lf",&a) 76 77 #define pb push_back 78 #define ff first 79 #define ss second 80 ///Comparision macros 81 #define _aEb(a,b) (fabs((a)-(b))<eps) 82 #define _aGb(a,b) ((a)>(b)+eps) 83 #define _aLb(a,b) ((a)+eps<(b)) 84 #define _aLEb(a,b) (_aLb(a,b) || _aEb(a,b)) 85 #define _aGEb(a,b) (_aGb(a,b) || _aEb(a,b)) 86 #define _minf(a,b) ((a)+eps<(b)?(a):(b)) 87 #define _maxf(a,b) ((a)+eps<(b)?(b):(a)) 88 #define _sq(x) ((x)*(x)) 89 90 const int MX = 1000; 91 struct RKFMY 92 { 93 double t[ MX + 10 ]; 94 double y[ MX + 10 ]; 95 double w[ MX + 10 ]; 96 double ww[ MX + 10 ]; 97 double h[ MX + 10 ]; 98 double R[ MX + 10 ]; 99 double a , b , alpha , hmax, hmin; 100 double TOL; 101 bool flag; 102 103 double k[7]; 104 105 double f( double T , double Y ) 106 { 107 return ( Y - T*T + 1 ); 108 } 109 void init() 110 { 111 hmax = .25; 112 hmin = .01; 113 a = 0.; 114 b = 2.; 115 alpha = .5; 116 t[ 0 ] = a; 117 w[ 0 ] = alpha; 118 h[ 0 ] = hmax; 119 flag = true; 120 TOL = 1.e-5; 121 } 122 double runIt() 123 { 124 int i = 0,j; 125 while( flag && i<200 ) 126 { 127 k[1] = h[i] * f( t[i] , w[i] ); 128 k[2] = h[i] * f( t[i] + (1./4.) * h[i] , w[i] + (1./4.) * k[1] ); 129 k[3] = h[i] * f( t[i] + (3./8.) * h[i] , w[i] + (3./32.)*
  • 3.
    k[1] + (9/32.)*k[2]); 130 k[4] = h[i] * f( t[i] + (12./13.)*h[i] , w[i] + (1932./ 2197.)*k[1] 131 - (7200./2197)*k[2] + (7296./ 2197)*k[3] ); 132 k[5] = h[i] * f( t[i] + h[i] , w[i] + (439./ 216.)*k[1] - 8.*k[2] 133 + (3680./513)*k[3] - (845./ 4104)*k[4] ) ; 134 k[6] = h[i] * f( t[i] + .5*h[i] , w[i] - (8./27.)* k[1] + 2.*k[2] 135 - (3544./2565.)*k[3] + (1859./ 4104.)*k[4] - (11./40.)*k[5] ); 136 i++; 137 138 R[i] = (1./h[i-1]) * fabs( (1./360.)*k[1] - (128./4275.)* k[3] - (2197./75240.)*k[4] 139 + (1./50.)*k[5] + (2./55.)*k[6] ); 140 141 if( _aLEb(R[i],TOL) ) 142 { 143 t[i] = t[i-1] + h[i-1]; 144 w[i] = w[i-1] + (25./216.)*k[1] + (1408./2565.)*k[3] + (2197./4104.)*k[4] - (1./5.)*k[5]; 145 printf("%.12lf %.12lf %.12lf %.12lfn",t[i],w[i],h[ i-1],R[i]); 146 } 147 148 double del = .84 * pow( double(TOL / R[i]) , double(1./4. ) ); 149 150 if( _aLb( del , .1 ) ) h[i] = .1 *h[i-1]; 151 else if ( _aGb( del , 4. ) ) h[i] = 4 *h[i-1]; 152 else h[i] = del*h[i-1]; 153 154 if( _aGb( h[i] , hmax ) ) h[i] = hmax ; 155 if( _aGb( t[i] , b ) ) flag = 0; 156 else if( _aGb( t[i] + h[i] , b ) ) h[i] = b-t[i]; 157 else if( _aLb( h[i] , hmin ) ) 158 { 159 flag = 0; 160 printf("min h exceededn"); 161 } 162 } 163 } 164 165 }; 166 RKFMY rk; 167 int main(void) 168 { 169 //freopen("in.txt","r",stdin); 170 //freopen("out.txt","w",stdout); 171 //TimeLogger tm; 172 int i,j,k,kase=0; 173 174 rk.init(); 175 rk.runIt(); 176 177 return 0; 178 }