bzoj4183: tree

Description

 

自底向上模拟,原地操作以节省空间

#include<bits/stdc++.h>
unsigned n,a,b,c,v[1055555],mx,ans=0;
int main(){
    scanf("%u%u%u%u%u",&n,v,&a,&b,&c);
    mx=1<<n;
    for(int i=1;i<mx;++i)v[i]=v[i-1]*a+b;
    for(int i=1;i<mx;i<<=1){
        for(int j=0;j<mx;j+=i<<1){
            unsigned*A=v+j,*B=A+i;
            for(int k=0;k<i;++k){
                int x=A[k],y=B[k];
                A[k]=x|y,B[k]=x&y;
            }
        }
    }
    for(int i=mx-1;i>=0;--i)ans=ans*c+v[i];
    printf("%u",ans);
    return 0;
}
原文地址:https://www.cnblogs.com/ccz181078/p/7513822.html