CF1557C(组合数,位运算)

CF1557C(组合数,位运算)

题意

给出序列长度 n ,取值范围 [0,2k1]

求满足 a1&a2&a3...&ana1a2...an 的方案数。

思路

先分奇偶讨论。

n 为奇数时,只可能使得不等式等号成立。大于号总不可能成立。因此考虑取等方案。对某一位,操作后都为0或1。

则对任意一个二进制位有: (Cn0+Cn2+Cn4+...+Cnn1)+Cnn=2n1+1

n 为偶数时,如果使得等号成立。操作后二进制位都为0。

则对任意一个二进制位有:(Cn0+Cn2+Cn4+...+Cnn)Cnn=2n11

考虑使得大于号成立条件。

我们可以将结果二进制为分为三类。分别是最高位与操作为1的位置 i[0,i1][i+1,k1]

i 位上一定全1,总方案为1。[0,i1]0 ,用求等号时公式可算,[i+1,k1] 任意。

则对第 i 位有:(2n11)i(2n)ki1

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<set>
#include<queue>
#include<map>
#include<stack>
#include<string>
#include<random>
#include<iomanip>
#define yes puts("yes");
#define inf 0x3f3f3f3f
#define ll long long
#define linf 0x3f3f3f3f3f3f3f3f
#define ull unsigned long long
#define endl '\n'
#define int long long
#define rep(i,a,n) for(int i = a;i <= n;i++)
#define per(i,n,a) for(int i = n;i >= a;i--)
using namespace std;
mt19937 mrand(random_device{}());
int rnd(int x) { return mrand() % x;}
typedef pair<int,int> PII;
const int MAXN =10 + 2e5 ,mod=1e9 + 7;
int ksm(int a,int b) {
    int ans = 1;
    while(b) {
        if(b & 1) ans = ans * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return ans;
}
void solve()
{    
    int n,k; cin >> n >> k;
    ll ans = 0;
    // 1111  X0000YYY
    // X: 0000 C()
    // n % 2 == 0
    // 11111   X00000Y
    // X :0 Y :0/1  C(n,2k) (0~n) 2k != n
    // [0,k] i[i-1,0] C(i-1,j) * pow(pow(2,n)),i - j)
    // A = B  C(n,2k) 
    ans = ksm(ksm(2,n - 1) + ((n & 1) ? 1 : -1),k);
    if(n % 2 == 0) {// [0,k - 1]
        // [0,i-1]: 0 [i] :1 [i+1,k - 1]:0/1
        rep(i,0,k - 1) {
            ans = (ans + ksm(ksm(2,n - 1) - 1,i) * ksm(ksm(2,n),k - i - 1) % mod) % mod;
        }
    }
    cout << ans << endl;
    
}
signed main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

    int T;cin>>T;
    while(T--)
        solve();

    return 0;
}
posted @   Mxrurush  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示