zoukankan      html  css  js  c++  java
  • 51nod-1346: 递归

    【传送门:51nod-1346


    简要题意:

      给出一个式子a[i][j]=a[i-1][j]^a[i][j-1]

      给出a[1][i],a[i][1](2<=i<=131172)

      有n个询问,每个询问输入x,y

      求出a[x+131072][y+131072]


    题解:

      真是一道有趣的题目。。

      显然不能直接做,然后我直接打了个表。。发现a[i][j]=a[i-k][j]^a[i][j-k](k<=min(i,j),且k为偶数)

      那答案不就是a[x+131072][y+131072]=a[x][y+131072]^a[x+131072][y]

      直接暴力得到a[1~100][1~131172]和a[1~131172][1~100]就行了


    参考代码:

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int a[110][131173];
    int b[131173][110];
    int main()
    {
        for(int i=2;i<=131172;i++)
        {
            scanf("%d",&a[1][i]);
            if(i<=100) b[1][i]=a[1][i];
        }
        for(int i=2;i<=131172;i++)
        {
            scanf("%d",&b[i][1]);
            if(i<=100) a[i][1]=b[i][1];
        }
        for(int i=2;i<=100;i++)
        {
            for(int j=2;j<=131172;j++) a[i][j]=a[i-1][j]^a[i][j-1];
        }
        for(int i=2;i<=131172;i++)
        {
            for(int j=2;j<=100;j++) b[i][j]=b[i-1][j]^b[i][j-1];
        }
        int n;
        scanf("%d",&n);
        while(n--)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            printf("%d
    ",a[x][y+131072]^b[x+131072][y]);
        }
        return 0;
    }

     

  • 相关阅读:
    CF-807B
    CF-807A
    sort()的升降序函数操作
    CF-805D
    CF-805B
    CF-805A
    CF-796C
    CF-796B
    图论学习四之Disjoint set union并查集
    图论学习三之Shortest Path最短路
  • 原文地址:https://www.cnblogs.com/Never-mind/p/9790195.html
Copyright © 2011-2022 走看看