Problem Description
众所周知,度度熊最近沉迷于 Pokémon GO。
今天它决定要抓住所有的精灵球!
为了不让度度熊失望,精灵球已经被事先放置在一个2*N的格子上,每一个格子上都有一个精灵球。度度熊可以选择任意一个格子开始游戏,抓捕格子上的精灵球,然后移动到一个相邻的至少有一个公共点的格子上继续抓捕。
例如,(2, 2) 的相邻格子有(1, 1), (2, 1) 和 (1, 2) 等等。
现在度度熊希望知道将所有精灵球都抓到并且步数最少的方案数目。
两个方案被认为是不同,当且仅当两个方案至少有一步所在的格子是不同的。
Input
第一行为T,表示输入数据组数。
每组数据包含一个数N。
●1≤T≤100
●1≤N≤10000
Output
对每组数据输出方案数目,结果对 1 000 000 007 取模。
 Sample Input
3
1
2
3
Sample Output
2
24
96
 

一道计数问题,重点就是要做到不重不漏.

怎样步数最短呢?当然是每个格子都只经过1次啦.

然后我们注意到如果这个起点选在中间的第i列,我们就把这个格子划分成了左右两个部分

感觉就是对于某个起点然后左右两部分是之前求过的答案直接相乘,不同起点再相加就可以了,但是关键问题是我们怎样计数呢?

我们设 Bn 代表从某个角(如左上角)出发,然后走遍所有格子回到同一列的方案数目。

同样,我们设 An 代表从某个角出发,然后走遍所有格子的方案数。

下面我们来解释这个式子

第一项表示从某个角开始最后回到起点的同一列的那个角

第二项表示从某个角开始,第二步走与起点相同列的那个角,第三步我们向第二列走的时候就有两种走法了(选择直接向右或者走对角线,乘的那个2)

从第四步开始我们现在面对的问题就是

第三项中4可以看成2*2,

我们把前两列写成这个样子

1 2
3 4

第一个2代表走一个(1 2 3 4)和(1 4 3 2)有两种走法起点在第一列而终点在第二列

第二个2代表对于每一个到达第二列后第五步向第三列走的时候都有两种走法(向右或者走对角线)

从第六步开始时我们面对的问题就是

我们现在来考虑下正经问题

首先有4个角,那么ans先加上

但是如果我们起点选在中间呢?

假设我们选在了第i列,首先这一列有两个格子 所以先乘个2

现在我们可以选择先往左跑,我们可以直接向左,也可以走一个向左的对角线.再乘个2

注意往左跑完1~i-1列以后一点要跑到第i列那个"不是起点的点"否则没法往右跑,所以乘的是

现在我们又回到了第i列,现在我们向右跑,又有两种情况,直接向右,向右的对角线 再乘个2

现在我们到了i+1列对于右半部分(i+1~n)我们只要跑完就行了,我们不关心终点所以乘

这样一开始向左跑就是,一开始向右跑自然是

 #include <bits/stdc++.h>

 using namespace std;
typedef long long ll;
const int maxn = ;
const ll mod = 1e9+;
ll a[maxn],b[maxn];
void init()
{
b[]=;
for (int i=;i<maxn;++i){
b[i] = (b[i-]*)%mod;
}
a[] = ;
a[] = ;
for (int i=;i<maxn;++i)
a[i] = (b[i]%mod+(*a[i-]%mod)+(*a[i-])%mod)%mod;
}
int n;
int main()
{
init();
int T;
scanf("%d",&T);
while (T--){
scanf("%d",&n);
if (n==){
printf("%d\n",);
}
else{
ll ans = ;
ans = (a[n]*)%mod;
for (int i=;i<n;++i){
ans = (ans+*( ( ( (*b[i-])%mod) *( (*a[n-i])%mod ) + ( (*a[i-])%mod) *( (*b[n-i])%mod ) )%mod )%mod)%mod;
}
printf("%lld\n",ans);
}
}
return ;
}

hdu 6146 Pokémon GO (计数)的更多相关文章

  1. HDU 6146 Pokémon GO DP,计数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6146 题意:~ 解法:原题..http://blog.csdn.net/y990041769/arti ...

  2. 2017"百度之星"程序设计大赛 - 复赛1003&&HDU 6146 Pokémon GO【数学,递推,dp】

    Pokémon GO Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. 【HDU】6146 Pokémon GO

    [题意]一个2*n的网格,再保证步数最少的情况下,求从任意格出发遍历完所有格的方案数,格子八连通.n<=10000,T<=100. [算法]递推,DP [题解]原题链接:蓝桥杯 格子刷油漆 ...

  4. [ACM] hdu 3923 Invoker (Poyla计数,高速幂运算,扩展欧几里得或费马小定理)

    Invoker Problem Description On of Vance's favourite hero is Invoker, Kael. As many people knows Kael ...

  5. HDU - 4305 - Lightning 生成树计数 + 叉积判断三点共线

    HDU - 4305 题意: 比较裸的一道生成树计数问题,构造Krichhoof矩阵,求解行列式即可.但是这道题还有一个限制,就是给定的坐标中,两点连线中不能有其他的点,否则这两点就不能连接.枚举点, ...

  6. hdu 3908 Triple(组合计数、容斥原理)

    Triple Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Total Su ...

  7. hdu 6093---Rikka with Number(计数)

    题目链接 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, s ...

  8. B - Cube HDU - 1220 (数学计数)

    题意:一个边长为N的正方体,切割成N*N*N个单位正方体,问有多少对正方体之间有0个,2个公共点. 思路:因为正方体之间出现公共点的情况有0,2,4. 那么直接正面求,肯定不好求,那么先求出有4个公共 ...

  9. HDU 4055 Number String (计数DP)

    题意:由数字1到n组成的所有排列中,问满足题目所给的n-1个字符的排列有多少个,如果第i字符是‘I’表示排列中的第i-1个数是小于第i个数的. 如果是‘D’,则反之. 析:dp[i][j] 表示前 i ...

随机推荐

  1. symfony 初始化项目

    学习Symfony首先看一下已经发布了哪些版本; 现在我记录一下两个版本的使用情况: 3.4 是一个长期维护且稳定的版本 4.3是一个最新版本且速度飞快地版本 官方介绍:https://symfony ...

  2. HTML-字符实体,平方米(㎡)m²

    转载自:https://blog.csdn.net/hangGe0111/article/details/80983250

  3. MySQL 查询语句--------------进阶5:分组查询

    #进阶5:分组查询 /* select 分组函数,列(要求出现在group by的后面) from 表 [where 筛选条件] group by 分组的列表 [order by 子句] 注意: 查询 ...

  4. MapReduce(1): Prepare input for Mappers

    According to Wikipedia MapReduce, there are two ways to illustrate MapReduce. One contains three ste ...

  5. Vulnhub渗透测试练习(一) ----------Breach1.0

    教程网址 https://www.freebuf.com/articles/system/171318.html 学习经验总结 1.使用jre的bin目录下的keytool命令来输入秘钥库口令进而获取 ...

  6. ThreadLocal和单例对象比较

    单例对象: 自始至终只有一个对象 当线程并发,每个线程需要自己独立的资源变量处理不同的业务时,单例对象远远不能满足需求 因此可以采用ThreadLocal模式 : 每个线程有自己独立的资源变量     ...

  7. P2747 [USACO5.4]周游加拿大Canada Tour

    题目描述 你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票.旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直到你到达最东边的城市,再由东向西返回,直到你回到开始的城市.除了旅 ...

  8. luoguP1312 Mayan游戏 题解(NOIP2011)

    luoguP1312 Mayan游戏 题目 #include<bits/stdc++.h> #define ll long long #define rg register #define ...

  9. go web编程——路由与http服务

    本文主要讲解go语言web编程中的路由与http服务基本原理. 首先,使用go语言启动一个最简单的http服务: package main import ( "log" " ...

  10. Java 8实战之读书笔记二:基础知识

    好记性不如烂笔头,整理一些个人觉得比较重要的东西. 一.基础知识 第1章 为什么要关心Java 8 Java 8提供了一个新的API(称为"流", Stream),它支持许多处理数 ...