题目大意:规定加法和减法操作都是异或操作;乘法,除法操作不变。给你三个多项式f,g,h,求出f * g / h 的余下的多项式。
思路:高精度问题,按照题目要求模拟就行。
#include <iostream>
#include <cstdio>
using namespace std;
int main(int argc, char** argv)
{
int test_cases,i,j;
int polynomial[3][1005],degree[4],product[2005],max_degree;
scanf("%d",&test_cases);
while (test_cases--)
{
for (i=0;i<3;i++)
{
scanf("%d",°ree[i]);
for (j=degree[i]-1;j>=0;j--)
scanf("%d",&polynomial[i][j]);
}
memset(product,0,sizeof(product));
for (i=0;i<degree[0];i++)
for (j=0;j<degree[1];j++)
product[i+j]^=polynomial[0][i]&polynomial[1][j];
max_degree=2005;
while (1)
{
for (i=max_degree-1;product[i]==0;i--);
max_degree=i;
if (max_degree<degree[2]-1)
break;
for (j=degree[2]-1;j>=0;i--,j--)
product[i]^=polynomial[2][j];
}
printf("%d",max_degree+1);
for (i=max_degree;i>=0;i--)
printf(" %d",product[i]);
printf("\n");
}
return 0;
}