团体程序设计天梯赛-练习集-L2-018. 多项式A除以B

来源:互联网 发布:软件系统设计方案模板 编辑:程序博客网 时间:2024/05/17 22:23

记录一个菜逼的成长。。

题目链接

不给数据范围。让我说什么好。。我还犹豫了半天要不要用数组。。
最后想了想,算了用数组暴力一发。。
结果就过了。。

就是两个循环;
第一重枚举a多项式的头
第二重进行计算
PS:大区赛时敲得代码。略丑。

#include <bits/stdc++.h>using namespace std;#define cl(a,b) memset(a,b,sizeof(a))#define pb push_back#define mp make_pair#define fi first#define se secondtypedef pair<int,int> PII;typedef long long LL;const int INF = 0x3f3f3f3f;const int maxn = 1000000 + 10;double a[maxn],b[maxn],c[maxn];int main(){    int n,m;    int mxa ,mxb;    scanf("%d",&n);    for( int i = 0; i < n; i++ ){        int x;double v;        scanf("%d%lf",&x,&v);        a[x] = v;        if(!i)mxa = x;    }    scanf("%d",&m);    for( int i = 0; i < m; i++ ){        int x;double v;        scanf("%d%lf",&x,&v);        b[x] = v;        if(!i)mxb = x;    }    int limit = mxa - mxb + 1;    for( int j = mxa; j >= mxb; j-- ){        c[j-mxb] = a[j] / b[mxb];        for( int k = j,p = mxb; k >= j-mxb && p >= 0; k--,p-- ){            a[k] = a[k] - c[j-mxb] * b[p];        }    }    int ansc = 0;    for( int i = mxa - mxb; i >= 0; i-- ){        double tmp = (double)((int)(c[i] * 10 + (c[i] < 0? -0.5 : 0.5)))/10;        c[i] = tmp;        if(tmp != 0){            ansc++;        }    }    if(!ansc){        printf("0 0 0.0\n");    }    else {        printf("%d",ansc);        for( int i = mxa - mxb; i >= 0; i-- ){            if(c[i] != 0)printf(" %d %.1f",i,c[i]);        }        puts("");    }    int ans = 0;    for( int i = mxb - 1; i >= 0; i-- ){        double tmp = (double)((int)(a[i] * 10 + (a[i] < 0? -0.5 : 0.5)))/10;        a[i] = tmp;        if(tmp != 0)ans ++;    }    if(!ans){        printf("0 0 0.0\n");    }    else {        printf("%d",ans);        for( int i = mxb-1; i >= 0; i-- ){            if(a[i] != 0)printf(" %d %.1f",i,a[i]);        }        puts("");    }    return 0;}
0 0
原创粉丝点击