CF 1157 C. Moamen and XOR(dp)

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod=1e9+7;
ll dp[200050][2];
ll pw[200050];
void init()
{
    
    
    pw[0]=1;
    for(int i=1;i<=200000;i++)pw[i]=pw[i-1]*2%mod;
}
void solve(){
    
    
    ll n,k;
    scanf("%lld %lld",&n,&k);
    dp[k][1]=0;//dp[k][1]=1;
    dp[k][0]=1;
    if(n&1)for(int i=k-1;i>=0;i--)//i--
    {
    
    
        dp[i][1]=pw[n]*dp[i+1][1]%mod;
        dp[i][0]=(pw[n-1]+1)*dp[i+1][0]%mod;
    }
    else for(int i=k-1;i>=0;i--)
    {
    
    
        dp[i][1]=(pw[n]*dp[i+1][1]+dp[i+1][0])%mod;
        dp[i][0]=(pw[n-1]-1)*dp[i+1][0]%mod;
    }
    printf("%lld\n",(dp[0][1]+dp[0][0])%mod);
}
int main()
{
    
    
    init();
    int T;
    scanf("%d",&T);
    while(T--)solve();
    return 0;
}

おすすめ

転載: blog.csdn.net/Ambrumf/article/details/120846749