我终于知道我有多么蠢了。。。推规律根本不带我这么推的。。。跟51nod那场比赛的傻逼B题一样,想都不想想就打表找规律。。。智障啊找规律也要按照基本法!

//f[1][2]=a[1][2] f[2][1]=a[2][1]
//f[2][2]=a[1][2]^a[2][1]
//f[2][3]=a[1][2]^a[2][1]^a[1][3]
//f[2][4]=a[1][2]^a[2][1]^a[1][3]^a[1][4]
//f[2][5]=a[1][2]^a[2][1]^a[1][3]^a[1][4]^a[1][5]
//f[3][2]=a[1][2]^a[2][1]^a[3][1]
//f[4][2]=a[1][2]^a[2][1]^a[3][1]^a[4][1]
/*
System Message (题目提供者)
a[i][j]=a[i-1][j]^a[i][j-1]=a[i-2][j]^a[i-1][j-1]^a[i-1][j-1]^a[i][j-2]=a[i-2][j]^a[i][j-2]
a[i][j]=a[i-2][j]^a[i][j-2]=a[i-4][j]^a[i-2][j-2]^a[i-2][j-2]^a[i][j-4]=a[i-4][j]^a[i][j-4]
以此类推可以发现
a[i][j]=a[i-131072][j]^a[i][j-131072]
预处理a[1..100][1..131172]与a[1..131172][1..100]
对于每个询问答案即为a[n][131072+m]^a[131072+n][m]
*/

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
int read(){
int x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x;
}
const int nmax=105;
const int maxn=131173;
int f[nmax][maxn],g[maxn][nmax];
int main(){
rep(i,2,131172) {
f[1][i]=read();
if(i<=100) g[1][i]=f[1][i];
}
rep(i,2,131172){
g[i][1]=read();
if(i<=100) f[i][1]=g[i][1];
}
rep(i,2,100) rep(j,2,131172) f[i][j]=f[i][j-1]^f[i-1][j];
rep(i,2,131172) rep(j,2,100) g[i][j]=g[i][j-1]^g[i-1][j];
int t=read(),n,m;
while(t--){
n=read(),m=read();
printf("%d\n",f[n][m+131072]^g[n+131072][m]);
}
return 0;
}

  

基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
 收藏
 关注

函数f(n,m)

{

若n=1或m=1返回a[n][m];

返回f(n-1,m)异或f(n,m-1);

}

读入2<=n,m<=100

for i=2->100读入a[1][i]

for i=2->100读入a[i][1]

输出f(n,m)

发现当n,m较大时程序变得异常缓慢。

小b经过一番思考,很快解决了这个问题。

这时小c出现了,我将n,m都增加131072,你还能解决吗?

相对的,我会读入2->131172的所有a[1][i]和a[i][1]。

小b犯了难,所以来找你,你能帮帮他吗?

Input
第一行读入131171个正整数,表示i=2->131172的a[1][i](1<=a[1][i]<=1000000000)。
第二行读入131171个正整数,表示i=2->131172的a[i][1](1<=a[i][1]<=1000000000)。
第三行读入一个正整数Q(1<=Q<=10000),表示询问的次数。
接下来Q行,每行两个数n,m(2<=n,m<=100),表示每一组询问。
Output
Q行,每行为f(n+131072,m+131072)
Input示例
2 3 4 5 6 7 8 … 131171 131172
2 3 4 5 6 7 8 … 131171 131172
3
2 2
2 3
2 4
Output示例
0
0
131072

51nod1346 递归的更多相关文章

  1. 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个询问 ...

  2. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

  3. 算法笔记_013:汉诺塔问题(Java递归法和非递归法)

    目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...

  4. Android 算法 关于递归和二分法的小算法

     // 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1. package demo; public class Mytest { public st ...

  5. 二叉树的递归实现(java)

    这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...

  6. 递归实现n(经典的8皇后问题)皇后的问题

    问题描述:八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后, 使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上 ...

  7. C语言用分别用递归和循环求数字的阶乘的方法

    以下代码均为 自己 实现,嘻嘻! 参考文章:http://blog.csdn.net/talk_8/article/details/46289683 循环法 int CalFactorial(int ...

  8. C#递归解决汉诺塔问题(Hanoi)

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace MyExamp ...

  9. Java之递归求和的两张方法

    方法一: package com.smbea.demo; public class Student { private int sum = 0; /** * 递归求和 * @param num */ ...

随机推荐

  1. hadoop开发环境-----eclipse

    1.eclipse下载 http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/lunasr1 2.hadoo ...

  2. 总结 | 如何测试你自己的 RubyGem

    如何测试一个Gem gem 开发完了,想要给别人用,那就需要测试啊,测试一个 gem 其实很简单,这里我们用 minitest 为例, rspec 也一样适用.先来看看我们当前这个 gem 的目录结构 ...

  3. ZJU 1180 Self Numbers(暴力模拟判断,水题)

    题目链接 同HDU 1128 , POJ 1316(这个范围小一点). 原本怕超时,以为有技巧或者规律,死命的想,后来发现这就是一道水体,模拟着全部判断一下就好了,10秒呢,完全不怕超时...唔,废话 ...

  4. TCP套接字编程

    一.套接字(socket)函数 图1给出了在一个TCP客户与服务器通信的流程.服务器首先启动,稍后某个客户启动,它试图连接到服务器.假设客户给服务器发送一个请求,服务器处理该请求,并且给客户发回一个相 ...

  5. Flex +WebService

    <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="h ...

  6. WCF分布式开发步步为赢(7):WCF数据契约与序列化

    本节继续学习WCF分布式开发步步为赢(7):WCF数据契约与序列化.数据契约是WCF应用程序开发中一个重要的概念,毫无疑问实现客户端与服务端数据契约的传递中序列化是非常重要的步骤.那么序列化是什么?为 ...

  7. POJ2402/UVA 12050 Palindrome Numbers 数学思维

    A palindrome is a word, number, or phrase that reads the same forwards as backwards. For example,the ...

  8. CDOJ 1259 昊昊爱运动 II 线段树+bitset

    昊昊爱运动 II 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r ...

  9. Spring框架学习之第6节

    bean的生命周期 为什么总是一个生命当做一个重点? Servlet –> servlet生命周期 Java对象生命周期 往往笔试,面试总喜欢问生命周期的问题? ①   实例化(当我们的程序加载 ...

  10. scp 传文件

    1. 从远程服务器上拷贝文件(指定远程服务器的用户名:IP:文件    本地文件名) scp root@121.43.16.131:/etc/supervisor/supervisord.conf ~ ...