Beispiel #1
0
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;
}