求思路求标程

111

2 条评论

  • @ 2016-11-16 14:28:27

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define M 100100
    using namespace std;
    typedef long long ll;

    int n,tot;ll m;
    char a[2][M],ans[M<<1];

    int main()
    {
    int x;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    scanf("%d",&x),a[0][i]=x-1;
    for(ll j=2;j<=m;j<<=1)
    {
    if(m & j)
    {
    ++tot;

    for(int i=1;i<=n;i++)

    {

    int x=(i+(j>>1)%n+n-1)%n+1;

    int y=(i-(j>>1)%n+n-1)%n+1;

    a[tot&1][i]=a[~tot&1][x]^a[~tot&1][y];
    }

    }

    }
    for(int i=1;i<=n;i++)
    ans[i+i-1]=a[tot&1][i];

    if(m & 1)

    {

    for(int i=1;i<=n;i++)

    ans[i<<1]=ans[i+i-1]^ans[i==n?1:i<<1|1];

    for(int i=1;i<=n;i++)

    ans[i+i-1]=-1;

    }

    else

    {

    for(int i=1;i<=n;i++)

    ans[i+i]=-1;

    }

    for(int i=1;i<=n<<1;i++)
    printf("%d%c",ans[i]+1,i==n+n?'\n':' ');
    }

  • 1

信息

ID
1554
难度
6
分类
递推 | 其他 | 快速幂 点击显示
标签
递交数
1938
已通过
469
通过率
24%
被复制
9
上传者