Hdu 2971 Tower
Description
Alan loves to construct the towers of building bricks. His towers consist of many cuboids with square base. All cuboids have the same height \(h = 1\). Alan puts the consecutive cuboids one over another:
Recently in math class, the concept of volume was introduced to Alan. Consequently, he wants to compute the volume of his tower now. The lengths of cuboids bases (from top to bottom) are constructed by Alan in the following way:
- Length \(a_{1}\) of the first square is one.
- Next, Alan fixes the length \(a_{2}\) of the second square.
- Next, Alan calculates the length \(a_{n} (n > 2)\) by \(2 \times a2 \times (a_{n-1})-(a_{n-2})\). Do not ask why he chose such a formula; let us just say that he is a really peculiar young fellow. For example, if Alan fixes \(a_{2} = 2\), then \(a_3 = 8 -a_1 = 7\); see Figure 1. If Alan fixes \(a_2 = 1\), then \(a_n = 1\) holds for all n belong to N; see Figure 2.
Now Alan wonders if he can calculate the volume of tower of \(N\) consecutive building bricks. Help Alan and write the program that computes this volume. Since it can be quite large, it is enough to compute the answer modulo given natural number \(m\).
Input
The input contains several test cases. The first line contains the number t (t <= 10^5) denoting the number of test cases. Then t test cases follow. Each of them is given in a separate line containing three integers \(a2,N,m\) \((1 \le a_2,m \le 10^9, 2 \le N \le 10^9)\) separated by a single space, where \(a_2\) denotes the fixed length of second square in step \(2\), while \(N\) denotes the number of bricks constructed by Alan.
Output
For each test case \((a_2,N,m)\) compute the volume of tower of \(N\) consecutive bricks constructed by Alan according to steps \((1-3)\) and output its remainder modulo \(m\).
Sample Input
3
2 3 100
1 4 1000
3 3 1000000000
Sample Output
54
4
299
SB矩阵乘法。另\(p = 2a_2\)把公式写写$$a_n^2 = p2a_{n-1}2-2pa_{n-1}a_{n-2}$$
\]
\]
然后我们的初始矩阵$$A = (a_n^2 \quad a_{n-1}^2 \quad a_{n-1}a_{n-2} \quad S_{n-1})$$,然后就可以线性递推了。
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef long long ll;
int d,N,rhl,T;
struct Matrix
{
int a[4][4],n,m;
inline Matrix() { memset(a,0,sizeof(a)); }
friend inline Matrix operator *(const Matrix &x,const Matrix &y)
{
Matrix ret; ret.n = x.n; ret.m = y.m;
for (int i = 0;i < ret.n;++i)
for (int j = 0;j < ret.m;++j)
for (int k = 0;k < x.m;++k)
{
ret.a[i][j] += (ll)x.a[i][k]*(ll)y.a[k][j]%rhl;
if (ret.a[i][j] >= rhl) ret.a[i][j] -= rhl;
}
return ret;
}
}st,mul,ans;
inline Matrix qsm(Matrix a,int b)
{
Matrix ret; ret.n = ret.m = a.n;
for (int i = 0;i < ret.n;++i) ret.a[i][i] = 1;
for (;b;b >>= 1,a = a*a) if (b & 1) ret = ret*a;
return ret;
}
inline void work()
{
st.n = 1; st.m = 4;
st.a[0][0] = (ll)d*(ll)d%rhl; st.a[0][1] = 1;
st.a[0][2] = d; st.a[0][3] = 1;
mul.n = mul.m = 4;
mul.a[0][0] = (ll)(2*d)*(ll)(2*d)%rhl; mul.a[0][1] = 1; mul.a[0][2] = (2*d)%rhl; mul.a[0][3] = 1;
mul.a[1][0] = 1;
mul.a[2][0] = ((ll)(-4)*(ll)d%rhl)+rhl; mul.a[2][2] = rhl-1;
mul.a[3][3] = 1;
ans = st*qsm(mul,N-1);
printf("%d\n",ans.a[0][3]);
}
int main()
{
freopen("2971.in","r",stdin);
freopen("2971.out","w",stdout);
scanf("%d",&T);
while (T--)
{
scanf("%d %d %d",&d,&N,&rhl);
if (N == 1) puts("1");
else if (N == 2) printf("%d\n",((ll)d*(ll)d+1LL)%rhl);
else work();
}
fclose(stdin); fclose(stdout);
return 0;
}
Hdu 2971 Tower的更多相关文章
- hdu 5779 Tower Defence
题意:考虑由$n$个结点构成的无向图,每条边的长度均为$1$,问有多少种构图方法使得结点$1$与任意其它节点之间的最短距离均不等于$k$(无法到达时距离等于无穷大),输出答案对$1e9+7$取模.$1 ...
- hdu 4779 Tower Defense (思维+组合数学)
Tower Defense Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) ...
- 动态规划(树形DP):HDU 5886 Tower Defence
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2MAAAERCAIAAAB5Jui9AAAgAElEQVR4nOy9a6wsS3YmFL/cEkh4LP
- hdu 4779 Tower Defense 2013杭州现场赛
/** 题意: 有两种塔,重塔,轻塔.每种塔,能攻击他所在的一行和他所在的一列, 轻塔不 能被攻击,而重塔可以被至多一个塔攻击,也就是说重塔只能被重塔攻击.在一个n*m 的矩阵中,最少放一个塔,可放多 ...
- HDU 5886 Tower Defence
树的直径. 比赛的时候想着先树$dp$处理子树上的最长链和次长链,然后再从上到下进行一次$dfs$统计答案,和$CCPC$网络赛那个树$dp$一样,肯定是可以写的,但会很烦.......后来写崩了. ...
- HDU 5886 Tower Defence(2016青岛网络赛 I题,树的直径 + DP)
题目链接 2016 Qingdao Online Problem I 题意 在一棵给定的树上删掉一条边,求剩下两棵树的树的直径中较长那的那个长度的期望,答案乘上$n-1$后输出. 先把原来那棵树的 ...
- The Tower HDU - 6559 (解析几何)
The Tower HDU - 6559 The Tower shows a tall tower perched on the top of a rocky mountain. Lightning ...
- dp --- hdu 4939 : Stupid Tower Defense
Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...
- HDU 4939 Stupid Tower Defense(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4939 解题报告:一条长度为n的线路,路上的每个单元格可以部署三种塔来给走在这条路上的敌人造成伤害,第一 ...
随机推荐
- jquery的效果地址
http://www.cnblogs.com/lhb25/p/50-jquery-plugins-g.html
- python--class test
# !usr/bin/env python3#-*- coding:utf-8 -*- 'a test class'class Student(object): def __init__(se ...
- 【排障】使用DiskGenius修复0扇区损坏
用PE引导启动进入PE后打开DiskGenius软件 "硬盘"图形菜单------选择驱动器符号(例如C) 主界面中显示该硬盘的分区格式为FAT32,起始柱面0,起始磁头65. 在 ...
- (转)常用CSS优化总结——网络性能与语法性能建议
原文地址:http://www.cnblogs.com/dolphinX/p/3508657.html 在前端面试中最常见的问题就是页面优化和缓存(貌似也是页面优化),被问了几次后心虚的不行,平然平时 ...
- Java 内存分析图
client -------------------------- public class Client{ public static void main(String[] args){ Perso ...
- MVC中HtmlHelper用法大全参考
MVC中HtmlHelper用法大全参考 解析MVC中HtmlHelper控件7个大类中各个控件的主要使用方法(1) 2012-02-27 16:25 HtmlHelper类在命令System.Web ...
- Sqlserver With as
with t as (select * from emp where depno=10) 总结:可以看做将查询出来的语句块表示为一个临时表 select * from t where empno=xx ...
- _In_ 是什么意思
函数参数类型前 _In_代表什么 在visual C++中属于SAL批注,是为了编译系统在分析代码时发现缺陷用的 表示是一个输入参数.可以定义一个_In_的宏,这个宏什么都不做, 就是形如 ...
- bootstrap paginator 与 bootstrap3兼容
bootstrap paginator可支持bootstrap2 和bootstrap3. 默认的下载包中支持2,需要手动修改才能支持bootstrap3.具体方法:找到bootstrap-pagin ...
- Android SDK目录含义介绍
Android SDK目录的具体结构: 1.add-ons:该目录下存放第三方公司为Android平台开发的附加功能系统. 2.build-tools:编译工具.保存着一些通用工具,比如aapt.ai ...