hust 1013 Grid

题目描述

There is a grid size of 1*N. The spanning tree of the grid connects all the
vertices of the grid only with the edges of the grid, and every vertex has only
one path to any other vertex. Your task is to find out how many different
spanning trees in a given grid.

输入

Every line there is a single integer N(0 < N <= 1000000000), a line of
0 represents the end of the input.

输出

Every line you should only print the result, as the result may be very large,
please module it with 1000000007.

样例输入

1
2
0

样例输出

4
15

提示When N=1, the spanning trees are an follows: _ |_ , |_| , _ _| , _ | | .
There are four ways to construct the spanning tree.

简单的矩阵快速幂,不过在找前几项时要用到矩阵的行列式来求,求递推式就简单了f[n]=4*f[n-1]-f[n-2]


#include <iostream>
#include <cstdio>
using namespace std;
struct Mat
{
long long matrix[2][2];
};
Mat Multi(const Mat& a, const Mat& b)
{
int i, j, k;
Mat c;
for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
{
c.matrix[i][j] = 0;
for (k = 0;k < 2; k++)
c.matrix[i][j] += a.matrix[i][k] * b.matrix[k][j] % 1000000007;
c.matrix[i][j] %= 1000000007;
}
}
return c;
}
int main()
{
int tot, a, b, c, n;
Mat stand = {0, 1, -1, 4};
Mat e = {1, 0, 0, 1};
long long f[3];
while(scanf("%d", &n)!=EOF && n)
{
f[1]=4; f[2]=15;
if (n <= 2)
{
printf("%lld\n",f[n]);
continue;
}
Mat ans = e;
Mat tmp = stand;
n = n - 2;
while(n)
{
if (n & 1)
ans = Multi(ans, tmp);
tmp = Multi(tmp, tmp);
n >>= 1;
}
printf("%lld\n", ((ans.matrix[1][0]+1000000007) * f[1] + (ans.matrix[1][1]+1000000007 )* f[2]) % 1000000007);
/*for (int i=0;i<2;i++)
{
for (int j=0;j<2;j++)
printf("%lld ",ans.matrix[i][j]);
printf("\n");
}*/
}
return 0;
}

hust 1013 Grid,布布扣,bubuko.com

时间: 2024-10-12 04:20:37

hust 1013 Grid的相关文章

hust 1385 islands 并查集+搜索

islands Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/problem/show/1385 Description Deep in the Carribean, there is an island even stranger than the Monkey Island, dwelled by Horatio Torquemada Marley. Not only it has a rectangu

hust 1027 Enemy Target!

题目描述 In the Game Red Alert, a group of soviet infantry marches towards our base. And we have N Prism Tanks to defend our base. Suppose the coming infantry marches in a ROW*COLUMN rectangle grid, and keeps the shape unchanged. A Prism Tank can elimina

BZOJ 1013: [JSOI2008]球形空间产生器sphere

二次联通门 : BZOJ 1013: [JSOI2008]球形空间产生器sphere /* BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元 QAQ SB的我也能终于能秒题了啊 设球心的坐标为(x,y,z...) 那么就可以列n+1个方程,化化式子高斯消元即可 */ #include <cstdio> #include <iostream> #include <cstring> #define rg register #define Max

如何使用Flexbox和CSS Grid,实现高效布局

CSS 浮动属性一直是网站上排列元素的主要方法之一,但是当实现复杂布局时,这种方法不总是那么理想.幸运的是,在现代网页设计时代,使用 Flexbox 和 CSS Grid 来对齐元素,变得相对容易起来. 使用 Flexbox 可以使元素对齐变得容易,因此 Flexbox 已经被广泛使用了. 同时,CSS Grid 布局也为网页设计行业带来了很大的便利.虽然 CSS Grid 布局未被广泛采用,但是浏览器逐渐开始增加对 CSS Grid 布局的支持. 虽然 Flexbox 和 CSS Grid 可

Se(24)---Grid框架

java -jar selenium-server-standalone-2.48.0.jar -role hub java -jar selenium-server-standalone-2.48.0.jar -Dwebdriver.chrome.driver="D:/01 Learn WebDriver/chromedriver.exe" -role webdriver -hub http://localhost:4444/grid/register -port 5555 -bro

封装扩展Kendo UI Grid

封装后的代码如下: $(function () { function KendoGrid() { this.gridOptions = { height: "100%", sortable: true, reorderable: true, scrollable: true, filterable: { mode: "menu", extra: false, operators: { string: { contains: "Contains",

HUST 1588 辗转数对

1588 - 辗转数对 时间限制:1秒 内存限制:128兆 155 次提交 27 次通过 题目描述 假设当前有一个数对(a, b),我们可以通过一步将这个数对变为一个新数对(a + b, b)或者是(a, a + b).初始的数对为(1, 1),你的任务是找到一个数字k,即通过最少的步数使得这个数对中至少一个数字等于n. 输入 输入包括多组数据,每组数据包括一行,每行有一个整数n. 输出 每组数据输出一行,每行一个整数n. 样例输入 5 3 样例输出 3 2 提示 第一个样例的方法是 (1,1)

HUST 1698 - 电影院 组合数学 + 分类思想

http://acm.hust.edu.cn/problem/show/1698 题目就是要把一个数n分成4段,其中中间两段一定要是奇数. 问有多少种情况. 分类, 奇数 + 奇数 + 奇数 + 奇数 奇数 + 奇数 + 奇数 + 偶数 偶数 + 奇数 + 奇数 + 奇数 偶数 + 奇数 + 奇数 + 偶数 然后奇数表达成 2 * a - 1这个样子,就能列出方程. 然后就是类似于解a1 + a2 + a3 + a4 = x的问题了. #include <cstdio> #include &l

Zeroc Ice grid 研究学习

一.概念 slice: ice提供了自己的接口定义语言.用来定义rpc的接口和对象. ice.object: rpc调用的接口必须继承自ice.Object servant:ice.Object的实例化对象叫做servant,rpc调用的就是servant对象,因此servant需要线程安全 endpoints:客户端rpc调用servant的地址 icebox:servant的容器 icenode:icebox的容器 registry:注册中心,负责管理icenode的注册,负责和发布. 二.