Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <cstdlib>
- #include <vector>
- #include <algorithm>
- #include <string>
- #include <cstring>
- #include <cstdio>
- #include <set>
- #include <map>
- #include <unordered_map>
- #include <unordered_set>
- #include <ctime>
- typedef long long ll;
- using namespace std;
- int n;
- double mass[1000000];
- long double find(long double first, long double razn)
- {
- long double res=0;
- for(int i=0;i<n;i++)
- {
- first+=razn;
- res+=(mass[i]-first)*(mass[i]-first);
- }
- return res;
- }
- pair<long double,long double> solveFor(long double first)
- {
- long double l=-1e5, r=1e5;
- for(int i=0;i<70;i++)
- {
- long double mid1=l+(r-l)/3;
- long double mid2=l+(r-l)/3*2;
- long double res1=find(first,mid1);
- long double res2=find(first,mid2);
- if(res1<res2)
- r=mid2;
- else
- l=mid1;
- }
- return make_pair(find(first,l),l);
- }
- pair<long double, long double> solve()
- {
- long double l=-1e10, r=1e10;
- for(int i=0;i<100;i++)
- {
- long double mid1=l+(r-l)/3;
- long double mid2=l+(r-l)/3*2;
- long double res1=solveFor(mid1).first;
- long double res2=solveFor(mid2).first;
- if(res1<res2)
- r=mid2;
- else
- l=mid1;
- }
- return make_pair(l,solveFor(l).second);
- }
- int main()
- {
- scanf("%d",&n);
- for(int i=0;i<n;i++)
- scanf("%lf",mass+i);
- printf("%.30lf %.30lf",(double)solve().first+(double)solve().second,(double)solve().second);
- }
Advertisement
Add Comment
Please, Sign In to add comment