题意

给出n(1–150). 
输出两个多项式A,B从常数到最高次的系数,使得对两个多项式求gcd时,恰好经过n步得到结果. 
多项式的gcd一步是指(A(x),B(x))变成(B,A mod B)的过程,且当A mod B为0时,视为得到结果B. 
A mod B为多项式求余,参见 long division
要求两个多项式的所有系数都是1,0,-1.前导系数(最高次项系数)为1,度数(最高次)不超过n,第一个多项式的度数大于第二个

分析:
这个题懵逼了好几天,题解愣是没看懂,来学校后在宿舍用笔划拉了好久终于大概是了解了是怎么回事了。
 逆推一下GCD的公式:GCD(A,B)=GCD(AX+B,A)。所以可以得到An=An-1*X+An-2。但是题目中有个限制每一位的系数的绝对值不大于1。将GCD变形可以得到GCD(AX+B,A)=GCD(AX-B,A),所以在递推的时候如果系数超过1,那么相减,否则相加。

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream> using namespace std;
const int maxn=+;
int a[maxn][maxn];
int n; int main(){
scanf("%d",&n);
a[][]=;a[][]=;
for(int i=;i<=n;i++){
for(int j=;j<=i;j++){
if(j>)
a[i][j]=a[i-][j-];
if(j<=i-){
if(a[i][j]+a[i-][j]>)
a[i][j]-=a[i-][j];
else
a[i][j]+=a[i-][j];
}
}
}
printf("%d\n",n);
for(int i=;i<=n;i++){
printf("%d ",a[n][i]);
}
printf("\n");
printf("%d\n",n-);
for(int i=;i<n;i++){
printf("%d ",a[n-][i]);
}
return ;
}

最新文章

  1. web 前端(轮番插件)
  2. 一个ubuntu phper的自我修养(atom)
  3. CANVAS 水波动态背景
  4. LEFT JOIN 多表查询的应用
  5. springmvc 通过异常增强返回给客户端统一格式
  6. js Memoization 优化运行速度
  7. Makefile学习与进阶之Makefile.am和$$(M)的意思
  8. Core Animation之CABasicAnimation
  9. android 回车键事件编程
  10. 借助共享缓存redis实现分布式锁
  11. HDU - 5036 Operation the Sequence
  12. 《Python高效开发实战》实战演练——内置Web服务器4
  13. 函数之局部变量和使用global语句
  14. SQL Server的case when用法
  15. python基础_格式化输出(%用法和format用法)
  16. python读写文件\r\n问题
  17. logback框架之——日志分割所带来的潜在问题
  18. Dispatch Queue 内存结构
  19. ListView 控件和 INotifyPropertyChanged 接口
  20. docker之容器数据持久化

热门文章

  1. keras中自定义Layer
  2. 如何快速上手.net下单元测试工具NUnit?
  3. Android的长度单位及屏幕分辨率
  4. ZooKeeper初探之安装和配置
  5. 【BZOJ2908】又是nand 树链剖分+线段树
  6. 因实现本地浏览器访问nginx修改配置文件后,安装vsftpd失败
  7. 一线互联网公司必备——最为详细的Docker入门吐血总结
  8. log框架集成
  9. 环境无法创建目录,提示Too many links
  10. junit基础学习