/* vector< vector > Matrix(10, vector(20, -1)); iterator max_element(range); iterator min_element(range); sort ALLR descending string s istringstream is(s); is >> x; ostringstream os(s); os << x; for (auto x : container) { cout << x << endl; } for_each(v.begin(), v.end(), [&] (int x) { cout << x << endl; } ) */ /* ------------------------------------------------------------------ void dfs(int i) { if (!V[i]) { V[i] = true; for_each(all(W[i]), dfs); } } bool check_graph_connected_dfs() { int start_vertex = 0; V = vi(N, false); dfs(start_vertex); return (find(all(V), 0) == V.end()); } void add(int poz, int val) { for (; poz <= N; poz += zeroes(poz)) { aib[poz] += val; } } long long compute(int poz) { long long sum = 0; for (; poz; poz -= zeroes(poz)) { sum += aib[poz]; } return sum; } */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; //``` #define ONLINE_JUDGE1 const double epsilon = 1e-7; #define LL long long #define ULL unsigned long long typedef vector vi; typedef vector vl; typedef vector vvi; typedef vector vvl; typedef vector vd; typedef vector vs; typedef pair ii; typedef pair ll; typedef vector vii; typedef vector vll; #define all(V) V.begin(), V.end() #define allr(V) V.rbegin(), V.rend() #define for_c_it(container, it) for (auto it = container.begin(); it != container.end(); it++) #define present(container, element) (container.find(element) != container.end()) #define sz(a) int((a).size()) #define pb push_back #define mp make_pair #define zeroes(x) ((x ^ (x - 1)) & x) int N; vector Vx, Vy; double function(double a, double b, double val) { return b*val + a; } int main() { #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); #endif double A, B, auxA, auxB; double alpha = 0.0001, sum; A = B = 0; cin >> N; Vx.resize(N); Vy.resize(N); for (int i = 0; i < N; ++i) { cin >> Vx[i] >> Vy[i]; } int step = 1000; while (step--) { sum = 0; for (int i = 0; i < N; ++i) { sum += function(A, B, Vx[i]) - Vy[i]; } auxA = A - alpha * (1 / (double)N) * sum; sum = 0; for (int i = 0; i < N; ++i) { sum += (function(A, B, Vx[i]) - Vy[i]) * Vx[i]; } auxB = B - alpha * (1 / (double)N) * sum; if (fabs(A - auxA) < 0.0001 && fabs(B - auxB) < 0.0001) break; A = auxA; B = auxB; } sum = 0; for (int i = 0; i < N; ++i) { sum += (Vy[i] - function(A, B, Vx[i])) * (Vy[i] - function(A, B, Vx[i])); } printf("%.5lf", sum); while (1); return 0; }