码迷,mamicode.com
首页 > 其他好文 > 详细

UVALive 2323 Modular Multiplication of Polynomials(模拟)

时间:2016-07-31 17:34:32      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:

  这是一个相对简单的模拟,因为运算规则已经告诉了我们,并且比较简单,不要被吓到……

  思路:多项式除以另外一个多项式,如果能除,那么他的最高次一定被降低了,如果最高次不能被降低,那说明已经无法被除,就是题目要求输出的膜了,降低最高次的方法很简单,只要被除式的最高次 >= 除式的最高次,就将除式的最高次升高到与被除式一样高,然后让被除式减去它,直到不满足上述关系为止。

  代码如下:

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
#define maxn 1100
int f[maxn],g[maxn],h[maxn];
int mul[maxn*2],now[maxn*2];
int main()
{
    int t,f1,g1,h1,m1,tmp;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&f1);
        for(int i = f1-1;i >= 0;i--) scanf("%d",&f[i]);
        scanf("%d",&g1);
        for(int i = g1-1;i >= 0;i--) scanf("%d",&g[i]);
        scanf("%d",&h1);
        for(int i = h1-1;i >= 0;i--) scanf("%d",&h[i]);
        for(int i = 0;i <= f1+g1;i++) mul[i] = 0;
        for(int i = 0;i < f1;i++){
            for(int j = 0;j < g1;j++){
                mul[i+j] += f[i]*g[j];
                mul[i+j] %= 2;
            }
        }
        h1--;
        m1 = f1+g1-2;
        while(h1 <= m1){
            tmp = m1 - h1;
            for(int i = 0;i <= m1;i++) now[i] = 0;
            for(int i = 0;i <= h1;i++){
                now[i+tmp] = h[i];
            }
            for(int i = m1;i >= 0;i--) mul[i] = (mul[i]+now[i])%2;
            for(int i = m1;i >= 0;i--) {
                if(mul[i]){
                    m1 = i;
                    break;
                }
            }
        }
        printf("%d",m1+1);
        for(int i = m1;i >= 0;i--){
            printf(" %d",mul[i]);
        }
        puts("");
    }
    return 0;
}

 

UVALive 2323 Modular Multiplication of Polynomials(模拟)

标签:

原文地址:http://www.cnblogs.com/jifahu/p/5723131.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!