#include #include using namespace std; typedef long long int Integer; Integer squaredSolutions3(Integer x, Integer y[]) { Integer a = (100 - x)*(100 - x); Integer b = 100*(x*x - 104*x + 3600); Integer c = 10000*(x - 36)*(x - 36); Integer delta = b*b - a*c; if (delta < 0) { return 0; } Integer diff = sqrt(delta); if (diff*diff != delta) { return 0; } if (diff == 0) { y[0] = b/a; if (a*y[0] == b) { return 1; } return 0; } int k = 0; y[k] = (b - diff)/a; if (a*y[k] == b - diff) { ++k; } y[k] = (b + diff)/a; if (a*y[k] == b + diff) { ++k; } return k; } bool checkSquaredSolution2(Integer x, double y) { double a = x*y*(x + y - 20); if (a < 0) { return false; } return a*(120*(x - 30) + x*y - 20*x + 100*y) >= 0; } Integer squaredSolutions2(Integer x, Integer y[]) { int n = squaredSolutions3(x, y); int k = 0; while (k < n) { if (checkSquaredSolution2(x, y[k])) { ++k; } else { for (Integer i = k + 1; i < n; ++i) { y[i - 1] = y[i]; } --n; } } return n; } bool checkSquaredSolution(Integer x, double y) { if (y < 0) { return false; } double a = x*(x + y - 20); if (a < 0) { return false; } return (a - 100*y)*(60 - x) >= 0; } Integer squaredSolutions(Integer x, Integer y[]) { int n = squaredSolutions2(x, y); int k = 0; while (k < n) { if (checkSquaredSolution(x, y[k])) { ++k; } else { for (Integer i = k + 1; i < n; ++i) { y[i - 1] = y[i]; } --n; } } return n; } void checkSolution(Integer x, double y) { if (x < 0 || y < 0 || x + y < 20) { return; } if ((sqrt(x) + sqrt(x + y - 20))*(10 + sqrt(y)) < 0) { return; } cout << "x = " << x << endl; cout << "y = " << y << endl; cout << "z = " << x + y - 20 << endl; cout << endl; } void solve(Integer x) { Integer y[2]; Integer n = squaredSolutions(x, y); for (Integer i = 0; i < n; ++i) { checkSolution(x, y[i]); } } int main() { for (int x = 0; x <= 99; ++x) { solve(x); } return 0; }