CF1329B Dreamoon Likes Sequences(组合数学)

Posted ctyakwf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1329B Dreamoon Likes Sequences(组合数学)相关的知识,希望对你有一定的参考价值。

这道题的关键是有两个限制,1个是递增,1个是异或

那么如果我们要求递增,则i和i-1的最高位不能相同,因为这样bi就被异或导致失去最高位

因此我们知道最高位相同的数是冲突的,所以我们求取最高位为i的个数是多少个

我们发现答案是 2i----2^(i+1)-1这个区间内的数都可以,那么取值就是取值就是相减+1,另外,我们也可以不选最高位为i的数。

之后就是组合了,再每组中选一个,或者不选。但是最后要注意的是,全部都不选是不行的。

技术图片
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<map>
#include<string>
#include<vector>
using namespace std;
typedef long long ll;
ll mod(ll a,ll b){
    return (a%b+b)%b;
}
int main(){
    int t;
    cin>>t;
    while(t--){
        ll n,m;
        cin>>n>>m;
        ll ans=1;
        ll s=1;
        int i;
        for(i=0;i<=30;i++){
            if((1<<i)>n)
                break;
            ans=(ans*(min(n,(1ll<<i+1)-1)-(1<<i)+2))%m;
        }
        ans--;
        cout<<mod(ans,m)<<endl;
    }
    return 0;
}
View Code

 

以上是关于CF1329B Dreamoon Likes Sequences(组合数学)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #631 (Div. 2) B. Dreamoon Likes Permutations(排列组合)

Codeforces 631 D. Dreamoon Likes Sequences 位运算^ 组合数 递推

Codeforces Round #631 (Div. 2) Dreamoon Likes Sequences

Codeforces Round #631 (Div. 2) C. Dreamoon Likes Coloring(贪心好题/意识流题解)

Codeforces Round #631 (Div. 2) D.Dreamoon Likes Sequences

CF A. Dreamoon and Ranking Collection 模拟