poj 1060解题报告
来源:互联网 发布:js杀破狼歌曲下载 编辑:程序博客网 时间:2024/06/03 15:13
题目很长,但是比较好理解。题意就是求(f(x)*g(x))mod h(x)
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
int testcase; //测试用例的个数
const int maxl = 1005;
int f[maxl]; //存放第一个多项式的系数
int lf; //第一个多项式的项数(包括常数项)
int g[maxl]; //存放第二个多项式的系数
int lg; //第二个多项式的项数
int h[maxl]; //多项式除数的系数
int lh; //多项式除数的项数
int sum[maxl + maxl]; //存放两个多项式相乘的结果和最后相除得到的结果
int ls; //在计算过程中,sum数组有效位的长度
void init() //初始化各个多项式
{
int i;
cin>>lf;
for(i = lf - 1;i >= 0;i--)
{
cin>>f[i];
}
cin>>lg;
for(i = lg - 1;i >= 0;i--)
{
cin>>g[i];
}
cin>>lh;
for(i = lh - 1;i >= 0;i--)
{
cin>>h[i];
}
lh--;
}
void dealwith()
{
int i,j;
memset(sum,0,sizeof(sum));
ls = lf + lg - 1;
for(i = 0;i < lf;i++)
{
for(j = 0;j < lg;j++)
{
sum[i+j] = sum[i+j]^(f[i]&g[j]); //作与或和与运算
}
}
while(ls && !sum[ls])
{
ls--;
}
while(ls >= lh)
{
int d = ls - lh;
for(i = 0;i <= lh;i++)
{
sum[d+i] = sum[d+i]^h[i];
}
while(ls && !sum[ls])
{
ls--;
}
}
cout<<ls+1<<" ";
for(i = ls ;i > 0;i--)
cout<<sum[i]<<" ";
cout<<sum[0]<<endl;
}
int main()
{
cin>>testcase;
while(testcase--)
{
init();
dealwith();
}
return 0;
}
- poj 1060解题报告
- POJ 1060 Post Office 分析&解题报告
- poj数百篇解题报告
- poj 1141解题报告
- poj 1001解题报告
- poj 1011 解题报告
- poj 1087 解题报告
- poj 2153解题报告
- poj 2051解题报告
- POJ 1167 解题报告
- poj 1026 解题报告
- POJ 1077 解题报告
- POJ 1042 解题报告
- POJ 1095 解题报告
- POJ 1159解题报告
- poj 2312解题报告
- POJ 1001解题报告
- POJ 1002解题报告
- 电商项目笔记之八:商品和配图的管理
- 另类的package-info.java文件探讨
- 使用SQLiteDatabase操作SQLite数据库
- 千万级的mysql数据库与优化方法
- ActiveMQ队列特性:删除不活动的队列(Delete Inactive Destinations)
- poj 1060解题报告
- 使用Graphics\pen\brush\color\Font\等类和对应的方法属性
- SPARQL 简介
- dos 下遍历文件目录
- JDK自带的native2ascii工具完全揭密
- 添加登陆界面,增加验证码功能。
- 添加登陆界面,增加验证码功能。
- 使用SQLiteOpenHelper获取用于操作数据库的SQLiteDatabase实例
- 模板函数