【HDU】5244 inverse【打表找规律——FFT】
2015-05-28 22:30
375 查看
传送门:【HDU】5244 inverse
题目分析:
将f(i,j)f(i,j)看成矩阵XX,AA为ai数组,BB为bi数组,则有:XA=BXA=B,推出A=X−1BA=X^{-1}B
首先根据题意打一个X−1X^{-1},然后就可以发现规律……然后就可以用FFTFFT的思想去做这道题了……具体不说了,这样的东西谁试谁知道,反正我一步都不会证明,不会憋别找我……
my code:my~~code:
题目分析:
将f(i,j)f(i,j)看成矩阵XX,AA为ai数组,BB为bi数组,则有:XA=BXA=B,推出A=X−1BA=X^{-1}B
首先根据题意打一个X−1X^{-1},然后就可以发现规律……然后就可以用FFTFFT的思想去做这道题了……具体不说了,这样的东西谁试谁知道,反正我一步都不会证明,不会憋别找我……
my code:my~~code:
[code]#include <stdio.h> #include <algorithm> using namespace std ; typedef long long LL ; const int MAXN = 1 << 20 ; LL a[MAXN] ; int n ; void solve () { scanf ( "%d" , &n ) ; n = 1 << n ; for ( int i = 0 ; i < n ; ++ i ) scanf ( "%lld" , &a[i] ) ; if ( n == 1 ) printf ( " %lld\n" , a[0] ) ; else { LL tmp = a[n - 1] ; for ( int s = 2 , ds = 1 ; s <= n ; ds = s , s <<= 1 ) { for ( int k = 0 ; k < n ; k += s ) { for ( int i = k ; i < k + ds ; ++ i ) { LL t = a[i + ds] ; a[i + ds] -= a[i] ; a[i] += t ; } } } a[0] -= n / 2 * tmp ; int m = n >> 1 ; for ( int i = 0 ; i < n ; ++ i ) printf ( " %lld" , a[i] / m ) ; printf ( "\n" ) ; } } int main () { int T ; scanf ( "%d" , &T ) ; for ( int i = 1 ; i <= T ; ++ i ) { printf ( "Case #%d:" , i ) ; solve () ; } return 0 ; }
相关文章推荐
- ice demo中关于#if compact #endif宏解释
- Java之旅--设计模式
- scala生成eclipse文件报:Cannot run program "javac": CreateProcess error=2,解决方法
- STL中map的用法
- JS学习指导
- 支持向量机简单实现
- 第三章第三十九题
- poj2039---写出c++reverse函数,且且依次输出每一行的第一个、第二个.....
- 找水王
- Rake::TestTask 介绍
- 这里炒股的人应该很多,对于今天的多说几句吧
- UVa10881
- HDOJ 2098 分拆素数和
- 高级排序--希尔排序
- 详解嵌套ListView、ScrollView布局显示不全的问题
- Java入门学习知识点汇总
- “我爱淘”第二冲刺阶段Scrum站立会议3
- 在 SharePoint 2010 打开网页出错时,显示实际的错误信息
- HTML5+学习笔记2-------边看代码边研究貌似还是有点问题...还在研究中api中
- VS2010 转VS2008