Kattis - xorsequences

题意

又又又不想说题意

题解

首先考虑 a a a b b b c c c异或,无论 c c c是什么, a   x o r   c a\ xor\ c a xor c b   x o r   c b\ xor\ c b xor c的差别在于 a a a b b b的最高不同位,而 x i x_i xi一共 m m m位。

我们考虑 { 0... 2 m − 1 } \{0...2^{m-1}\} {0...2m1},首先可以发现,前半部分最高位都是 0 0 0,后半部分都是 1 1 1,并且 i i i i + 2 m − 1 i+2^{m-1} i+2m1除了第一位都相同。
如果 x i x_i xi的最高位有 1 1 1,显然前面一定会选 1 1 1的,有 0 0 0,后面一定会选 0 0 0

所以如果 x i x_i xi最高位不完全相同,必然 x p i x_{pi} xpi的最高位已经确定,且前面和后面的 p i p_i pi没有交集,因为选择的 x p i x_{p_i} xpi前面一定是 1 1 1,后面一定是 0 0 0

如果最高位相同的话,那就是说没得选择,并且 p i p_i pi p i + 2 m − 1 p_{i+2^{m-1}} pi+2m1必然相同,因为他们除了最高位之外剩下是相同的,所以剩下的要最大且唯一必然只有一种选择,所以是相同的,如果不同就说明最高位相同的条件不成立。

总结一下就是:
如果前后没有交集,就是最高位不完全相同
如果前后有交集,但是对应位相同,显然最高位相同。
其他,就是无解

#include<bits/stdc++.h>
#define FOR(i,a,b) for(int i=a;i<=b;i++)
using namespace std;

typedef long long ll;
const int maxn = 6e6+1000;
const ll mod = 1e9 + 7;

int p[maxn],m,n;

ll ans=1;

void slove(int l,int r){
   // cout<<l<<" "<<r<<" "<<ans<<" "<<endl;
    if(l==r){return ;}
    int mid=(l+r)>>1,ok=1;
   // cout<<mid<<endl;
    for(int i=l,j=mid+1;i<=mid&&j<=r;i++,j++)if(p[i]!=p[j])ok=0;
    if(ok){
        ans=ans*2%mod;
        slove(l,mid);
        return ;
    }
    set<int>s;
    for(int i=l;i<=mid;i++)s.insert(p[i]);
    for(int i=mid+1;i<=r;i++){
        if(s.find(p[i])!=s.end())ans=0;
    }
    slove(l,mid),slove(mid+1,r);
}

int main(){
    cin>>m>>n;
    for(int i=0;i<(1<<m);i++)scanf("%d",p+i);
    slove(0,(1<<m)-1);
    cout<<ans<<endl;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值