• HDU 6129


    比赛时脑子一直想着按位卷积...

    按题解的思路:

    /*
    HDU 6129 - Just do it [ 规律,组合数 ]  |  2017 Multi-University Training Contest 7
    题意:
    	给定数组 a[N],一次操作为 a[N] 求前缀异或和,问 M 次操作后的数组
    	限制 M <= 1e9, N <= 2e5
    分析:
    	设 dp[i][j] 为 a[i] 经 j 次操作后的序列
    	易得递推式 dp[i][j] = dp[i-1][j] ^ dp[i][j-1]
    	进一步可推导出 dp[i][j] = dp[i-2^k][j] ^ dp[i][j-2^k]
    	由此可将 m 按二进制拆分后直接做这个dp, 类似完全背包压缩第二维
    */
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 2e+5;
    int t, n, m, a[N];
    int main()
    {
        scanf("%d", &t);
        while (t--)
        {
            scanf("%d%d", &n, &m);
            for (int i = 0; i < n; i++) scanf("%d", &a[i]);
            while (m)
            {
                int x = m&(-m);
                for (int i = x; i < n; i++) a[i] = a[i]^a[i-x];
                m -= x;
            }
            for (int i = 0; i < n-1; i++) printf("%d ", a[i]);
            printf("%d
    ", a[n-1]);
        }
    }
    

     还有一种比较暴力的方法:

     

    /*
    分析第一项对所有项 m 次的贡献系数:
    	C(m-1,m-1)%2 , C(m,m-1)%2, C(m+1,m-1)%2, ... ,C(m+n-1,m-1)%2
    	组合数对二取模根据lucas定理,C(a,b)%2,当 b 按二进制位是 a的子集时 为 1,否则为 0
    	由于 1 很少,更新组合数为 1 的贡献即可
    */
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 2e5+5;
    int t, n, m, a[N];
    int ans[N];
    int comb(int a, int b)
    {
        if ((a|b) == a) return 1;
        else return 0;
    }
    int main()
    {
        scanf("%d", &t);
        while (t--)
        {
            scanf("%d%d", &n, &m);
            for (int i = 0; i < n; i++) scanf("%d", &a[i]);
            memset(ans, 0, sizeof(ans));
            for (int i = 0; i < n; i++)
            {
                if (comb(i+m-1, m-1))
                {
                    for (int j = 0; j+i < n; j++)
                    {
                        ans[j+i] ^= a[j];
                    }
                }
            }
            for (int i = 0; i < n-1; i++) printf("%d ", ans[i]);
            printf("%d
    ", ans[n-1]);
        }
    }
    

      

  • 相关阅读:
    Java在处理大数据的时候一些小技巧
    大并发处理解决方案
    数据库SQL优化大总结之 百万级数据库优化方案
    DotNet中的计时器线程计时器
    System.Threading.Timer的使用技巧
    Asp.net Mvc 请求是如何到达 MvcHandler的——UrlRoutingModule、MvcRouteHandler分析,并造个轮子
    C#-结构
    @Html.ActionLink(),@Html.Raw(),@Url.Action()等
    bootstarpt-table小结
    input[ type="file"]上传文件问题
  • 原文地址:https://www.cnblogs.com/nicetomeetu/p/7373307.html
Copyright © 2020-2023  润新知