您的位置:首页 > 其它

【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:

[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 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: