码迷,mamicode.com
首页 > 其他好文 > 详细

51nod-1346: 递归

时间:2018-10-15 14:57:47      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:有趣的   [1]   http   class   problem   question   std   min   www   

【传送门: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\n",a[x][y+131072]^b[x+131072][y]);
    }
    return 0;
}

 

51nod-1346: 递归

标签:有趣的   [1]   http   class   problem   question   std   min   www   

原文地址:https://www.cnblogs.com/Never-mind/p/9790195.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!