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的线路,路上的每个单元格可以部署三种塔来给走在这条路上的敌人造成伤害,第一 ...
随机推荐
- linux部署tomcat
安装说明 安装环境:CentOS-6.5安装方式:源码安装 软件:apache-tomcat-6.0.45.tar.gz下载地址:http://tomcat.apache.org/download-6 ...
- 关于使用json 字符串转换为字典问题
问题背景: '{"backend": "www.baidu.org", "record": {"server": &qu ...
- android studio环境搭建-笔记1
自己干了几年测试(功能性的),最近比较闲,就自己学习下android(以前也有所接触,但那是几年前的一点皮毛,都忘记了). 先搭建谷歌推出的android studio(以前用eclipse搭建总觉得 ...
- Servlet单实例多线程模式
http://kakajw.iteye.com/blog/920839 前言:Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率.由于Servlet/JSP默认是以 ...
- IBM WebSphere MQ 通道类型配置
IBM WebSphere MQ 通道类型配置 初学MQ,四种常见通道,windows下操作 目录 Sender--Receiver Server-Receiver Server-Requester ...
- 一个fibonacci数列简单求和的问题
前段时间老师在讲函数调用的时候,用Fibonacci数列来演示了一下,因为以前没怎么接触过Fibonacci,所以当时很懵. 当时让求的是Fibonacci数列中,第N位值为多少,当时老师写的是: 之 ...
- JS中==和===的区别
1.对于string,number等基础类型,==和===是有区别的 1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等 2)同类型比较,直接进 ...
- oc文件基本读写及操作
代码: #import <Foundation/Foundation.h> //NSString 写文件 void stringWriteToFile(){ NSString *path ...
- CSS 的选择符
CSS是什么? 如果说元素是标记代码的构建块料,那么CSS就是约束这些构建块料样式的规则. CSS规则的组成 CSS的规则由 选择符 和属性,值组成. Css选择符:选择符是规则中用于确定样式所涵盖的 ...
- 解压版tomcat设置为系统服务
1.先关闭tomcat,在"开始 "→"运行 "中输入cmd 命令,进入MS-DOS界面 2.进入 到tomcat的bin目录下 (解压版tomcat存放目录, ...