• hdu 6129 Just do it


    (借鉴了 http://blog.csdn.net/mengxiang000000/article/details/77200451的思路很厉害)

    题目大意:

    设定b【i】=a【1】^a【2】^a【3】^..................a【i】;

    每进行一次,我们可以从a数组得到一个b数组。问进行m次的结果。

    思路:

    设定ans【i】【j】表示进行到第i次,第j个位子的答案的话,ans【i】【j】有推导式:

    ans【i】【j】=ans【i-1】【j】^ans【i】【j-1】;

    那么很显然,对于每一项,他的系数就是杨辉三角的值,那么如果当前位子系数为奇数的话,结果就会有贡献。

    同样很显然,我们第i行,第j列的答案,其系数为C(i+j-2,j-1)【此时只考虑a的系数】;然后C(n,m),如果n&m==m则C(n,m)为奇数: 

    那么我们只需要考虑第一项(a)对所有位子的结果的影响即可(因为b就相当于向后挪了一下递推即可)。

    那么根据上述公式,考虑第一项(a)对所有位子的结果的影响然后递推一下就行了。

    ac代码:

    #include<stdio.h>  
    #include<string.h>  
    using namespace std;  
    int a[2050000];  
    int b[2050000];  
    int main()  
    {  
        int t;  
        scanf("%d",&t);  
        while(t--)  
        {  
            int n,m;  
            scanf("%d%d",&n,&m);  
            memset(b,0,sizeof(b));  
            for(int i=1;i<=n;i++)scanf("%d",&a[i]);  
            for(int i=1;i<=n;i++)  
            {  
                int y=i-1;  
                int x=i+m-2;  
                if((x&y)==y)  
                {  
                    for(int j=i;j<=n;j++)b[j]^=a[j-i+1];  
                }  
            }  
            for(int i=1;i<=n;i++)  
            {  
                if(i>1)printf(" ");  
                printf("%d",b[i]);  
            }  
            printf("
    ");  
        }  
    }  
  • 相关阅读:
    2017ecjtu-summer training # 9 HDU 4544
    2017ecjtu-summer training #6 Gym 100952D
    HDU 1241 DFS
    集训队选拔赛 day4
    Educational Codeforces Round 67 (Rated for Div. 2)
    Codeforces Round #566 (Div. 2)
    Codeforces Round #567 (Div. 2)
    Codeforces Round #568 (Div. 2)
    Codeforces Round #569 (Div. 2)
    牛客练习赛48
  • 原文地址:https://www.cnblogs.com/z1141000271/p/7371989.html
Copyright © 2020-2023  润新知