51nod-1346: 递归

Posted never-mind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}

 

以上是关于51nod-1346: 递归的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript - 代码片段,Snippets,Gist

CSP核心代码片段记录

executePendingTransactions 的递归入口

nodejs常用代码片段

JavaScript 代码片段

48个值得掌握的JavaScript代码片段(上)