【HDU】5244 inverse【打表找规律——FFT】

传送门:【HDU】5244 inverse

题目分析:

f(i,j) 看成矩阵 X A为ai数组, B 为bi数组,则有:XA=B,推出 A=X1B

首先根据题意打一个 X1 ,然后就可以发现规律……然后就可以用 FFT 的思想去做这道题了……具体不说了,这样的东西谁试谁知道,反正我一步都不会证明,不会憋别找我……

my  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 ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值