int main() { #ifndef __WATASHI__ freopen("stable.in", "r", stdin); freopen("stable.out", "w", stdout); #endif scanf("%d", &Polynomial::r); Polynomial p = readPolynomial(); Polynomial q = readPolynomial(); vector<vector<int> > v(2, vector<int>(Polynomial::r)); for (int i = 0; i < Polynomial::r; ++i) { v[0][i] = p(i); v[1][i] = q(i); } gao(v[0]); gao(v[1]); BigInteger ans(1); vector<int> w(Polynomial::r, 0); for (int i = 0; i < Polynomial::r; ++i) { if (v[0][i] == -1 || v[1][i] == -1) { w[i] = -1; } } for (int i = 0; i < Polynomial::r; ++i) { if (w[i] != 0) { continue; } vector<int> q(1, i); for (int j = 0; j < (int)q.size(); ++j) { switch (w[v[0][q[j]]]) { case -1: goto NEXT; case 0: q.push_back(v[0][q[j]]); default: w[v[0][q[j]]] |= 1; } switch (w[v[1][q[j]]]) { case -1: goto NEXT; case 0: q.push_back(v[1][q[j]]); default: w[v[1][q[j]]] |= 2; } } ans *= 2; NEXT: for (int j = 0; j < (int)q.size(); ++j) { w[q[j]] = -1; } } writeBigInteger(ans); return 0; }
int main(int argc, char const *argv[]) { Term term1(3,4); Term term2(3,2); Term term3(3,3); Term term4(3,7); Polynomial poly; poly.push_back(term1); poly.push_back(term2); poly.push_back(term3); poly.push_back(term4); poly.print(); poly.differentiate(); poly.print(); return 0; }