ccz181078

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

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;
}

 

posted on 2017-09-13 10:55  nul  阅读(173)  评论(0编辑  收藏  举报