CF Moamen and XOR

本文探讨了CFMoamenandXOR原理,解析了奇数个1异或为1,偶数个1异或为0的性质,并通过具体的数学推导,讨论了给定序列中特定条件下的元素分布。对于n为偶数和奇数时,计算了y=0的特殊情况和总的可能情况,涉及组合数和异或运算的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CF Moamen and XOR
奇数个1异或为1,偶数个1异或为0

x = ∑ i = 2 n a i − 1 & a i x=\sum_{i=2}^na_{i-1}\&a_i x=i=2nai1&ai​​​​ y = ∑ i = 2 n a i − 1 x o r a i y=\sum_{i=2}^n a_{i-1}xora_i y=i=2nai1xorai

n为偶数时

x i x_i xi​为1时,说明这 n n n个数的第 i i i为全为1,而 y i y_i yi为则必定为0

x i x_i xi为0,则 y i y_i yi为为0的情况为 C n 0 + C n 2 + . . . + C n n − 2 + C n n − C n n = 2 n − 1 − C n n = 2 n − 1 − 1 C_n^0+C_n^2+...+C_n^{n-2}+C_n^n-C_n^n=2^{n-1}-C_n^n=2^{n-1}-1 Cn0+Cn2+...+Cnn2+CnnCnn=2n1Cnn=2n11

x i = 1 , y i = 0 x_i=1,y_i=0 xi=1,yi=0的情况下,后面 n − i n-i ni位可以任意取,个数为 ∑ i = 0 n C n i = 2 n \sum_{i=0}^nC_n^i=2^n i=0nCni=2n​,总共 2 n ∗ ( n − i ) 2^n*(n-i) 2n(ni)

​ 前面 i − 1 i-1 i1位,只需考虑 x = 0 , y = 0 x=0,y=0 x=0,y=0的情况,总共 ( 2 n − 1 − 1 ) ∗ ( i − 1 ) (2^{n-1}-1)*(i-1) (2n11)(i1)

这是因为如果从前往后枚举每一位 x = 1 , y = 0 x=1,y=0 x=1,y=0的情况时,算到后面时 i i i前面存在 x = 1 , y = 0 x=1,y=0 x=1,y=0的情况会被前面算到。

n为奇数时

x i x_i xi为1时,说明这 n n n个数的第 i i i为全为1,而 y i y_i yi为则必定为1

x i x_i xi为0,则 y i y_i yi为为0的情况为 C n 0 + C n 2 + . . . + C n n − 1 = 2 n − 1 C_n^0+C_n^2+...+C_n^{n-1}=2^{n-1} Cn0+Cn2+...+Cnn1=2n1

这一位的总情况为 2 n − 1 + 1 2^{n-1}+1 2n1+1

所以每一位 x i = y i x_i=y_i xi=yi才满足条件,故总情况为 ( 2 n − 1 + 1 ) ∗ k (2^{n-1}+1)*k (2n1+1)k

#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
const int mod=1e9+7;
ll qmi(ll x,ll y)
{
    ll res=1;
    while(y)
    {
        if(y&1) res=res*x%mod;
        x=x*x%mod;
        y>>=1;
    }
    return res;
}
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int n,k;
        cin>>n>>k;
        int t=qmi(2,n-1);
        ll ans=0;
        if(n%2)
        {
            ans=qmi(t+1,k);
        }
        else
        {
               ans=qmi(t-1,k);
               for(int i=1;i<=k;i++)
               {
                   ans=(ans+qmi(t-1,i-1)*qmi(t*2,k-i)%mod)%mod;
               }
        }
        cout<<ans<<endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值