• 【CodeForces】901 B. GCD of Polynomials


    【题目】B. GCD of Polynomials

    【题意】给定n,要求两个最高次项不超过n的多项式(第一个>第二个),使得到它们GCD的辗转次数为n。n<=150。

    【算法】构造

    【题解】辗转n次是最坏情况——每次辗转至少会使被模数的最高次项变到模数的最高次项-1,也就是必须构造两个多项式满足这种最坏情况。

    eg.n=5,(5,4),(4,3),(3,2),(2,1),(1,0),(0,0)。

    为了构造最坏情况,考虑模仿斐波那契数列进行构造:

    p(0)=1,p(1)=x,p(n)=x*p(n-1)±p(n-2)。

    这个数列的特点是,p(n)%p(n-1)=p(n-2),那么只要使用这个数列的pn和pn-1就能达到最坏情况。

    其中±的意思是使系数满足要求,观察可知等价于%2。

    #include<cstdio>
    #define rep(i,j,k) for(int i=j;i<=k;i++)
    int f[200][200],x=1,n;
    int main(){
        scanf("%d",&n);
        f[0][0]=f[1][1]=1;
        rep(i,2,n){
            x=1-x;
            rep(j,1,i)f[x][j]=(f[x][j]+f[1-x][j-1])%2;
        }
        printf("%d
    ",n);
        rep(i,0,n)printf("%d ",f[x][i]);puts("");
        printf("%d
    ",n-1);
        rep(i,0,n-1)printf("%d ",f[1-x][i]);
        return 0;
    }
    View Code
  • 相关阅读:
    JAVA EE企业级开发四步走
    区间dp笔记√
    TYVJ P1016 装箱问题
    树状数组的笔记√(hzwer blog)
    忠诚//线段树
    线段树笔记√
    P1005 采药
    超级书架【未完】
    P1082 找朋友
    数字三角形系列
  • 原文地址:https://www.cnblogs.com/onioncyc/p/8125286.html
Copyright © 2020-2023  润新知