今天作比赛遇上了HDU3892,都分析出来怎么做了,可惜不会求多项式的最大公共多项式,当时写了半天,案例也没有跑出来,赛后搜了一下题解,发现有大神做出了,而且是有模版的,不过又搜了一下关于这方面的题目,很少,只发现了这一道,所以先做一下这一道吧
题意,给你两个多项式,求他们的最大公共多项式,然后输出即可,无齿的套用了别人的模版,呵呵!
#include #include #include #include #include #include #include #include #include #include #include #include #include #define ll long long #define LL __int64 #define eps 1e-8 //const ll INF=9999999999999; #define inf 0xfffffff using namespace std; //vector > G; //typedef pair P; //vector > ::iterator iter; // //map mp; //map ::iterator p; vector G[100000 + 5]; int MOD; void clear() { for(int i=0;i<2;i++) G[i].clear(); } int quick(int a,int b) { int ans = 1; while(b) { if(b&1) { ans = (ans * a)%MOD; b--; } b >>= 1; a = a * a%MOD; } return ans; } /*多项式求最大公共项*/ vector poly_gcd(vector a,vector b) { if(b.size() == 0) return a; int t = a.size() - b.size(); vector c; for(int i=0;i<=t;i++) { int tmp = a[i] * quick(b[0],MOD-2)%MOD; for(ll j=0;j = 0) { for(int i=p;i ans = poly_gcd(G[0],G[1]); printf("Case %d: %d",++Case,ans.size() - 1); int tmp = ans[0]; for(int i=0;i