思路:很容易发现规律,数列和Fib数列一样的。

记开始的时候啊a的个数为Y,b的个数为X。建立矩阵。

代码如下:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define M 105
#define eps 1e-6
#define ll long long
#define mod 1000000007
using namespace std;
struct mat
{
ll m[][];
};
mat Mul(mat a,mat b)
{
mat ans;
for(int i=;i<;i++)
for(int j=;j<;j++){
ans.m[i][j]=;
for(int k=;k<;k++)
ans.m[i][j]+=a.m[i][k]*b.m[k][j];
ans.m[i][j]%=mod;
}
return ans;
}
mat Pow(int n)
{
mat ans,a;
for(int i=;i<;i++)
for(int j=;j<;j++){
ans.m[i][j]=(i==j);
a.m[i][j]=;
}
a.m[][]=;
while(n){
if(n&) ans=Mul(ans,a);
n>>=;
a=Mul(a,a);
}
return ans;
}
ll x,y,X,Y;
bool solve(int n,int m)
{
mat a,b,c;
ll a1,a2,b1,b2;
if(n!=){
a=Pow(n-);
a1=a.m[][]+a.m[][];
a2=a.m[][]+a.m[][];
}
else a1=a2=;
if(m!=){
b=Pow(m-);
b1=b.m[][]+b.m[][];
b2=b.m[][]+b.m[][];
}
else b1=b2=;
ll t1=x*b1-y*a1;
ll t3=a2*y-x*b2;
ll t2=b1*a2-b2*a1;
if(t3%t2!=||t1%t2!=) return ;
X=t1/t2;
Y=t3/t2;
if(X<||Y<) return ;
return ;
}
int main()
{
int t,ca=,n,m,k;
scanf("%d",&t);
while(t--){
scanf("%d%lld%d%lld%d",&n,&x,&m,&y,&k);
printf("Case %d: ",++ca);
if(!solve(n,m)) printf("Impossible\n");
else{
if(k==){
printf("%lld\n",(X+Y)%mod);
continue;
}
mat a=Pow(k-);
ll ans=(a.m[][]+a.m[][])*Y+(a.m[][]+a.m[][])*X;
printf("%lld\n",ans%mod);
}
}
return ;
}

lightoj 1052 - String Growth & uva 12045 - Fun with Strings 矩阵的更多相关文章

  1. 1052 - String Growth

    1052 - String Growth    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Z ...

  2. 贪心水题。UVA 11636 Hello World,LA 3602 DNA Consensus String,UVA 10970 Big Chocolate,UVA 10340 All in All,UVA 11039 Building Designing

    UVA 11636 Hello World 二的幂答案就是二进制长度减1,不是二的幂答案就是是二进制长度. #include<cstdio> int main() { ; ){ ; ) r ...

  3. UVA 1386 - Cellular Automaton(循环矩阵)

    UVA 1386 - Cellular Automaton option=com_onlinejudge&Itemid=8&page=show_problem&category ...

  4. UVA 10679 I love Strings!!!(AC自己主动机)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  5. UVa 11464 Even Parity 偶数矩阵

    给你一个 n * n 的 01 矩阵,现在你的任务是将这个矩阵中尽量少的 0 转化为 1 ,使得每个数的上下左右四个相邻的数加起来是偶数.求最少的转化个数. 首先,n 的规模并不大,最大只有15.但是 ...

  6. UVA 11149 - Power of Matrix(矩阵乘法)

    UVA 11149 - Power of Matrix 题目链接 题意:给定一个n*n的矩阵A和k,求∑kiAi 思路:利用倍增去搞.∑kiAi=(1+Ak/2)∑k/2iAi,不断二分就可以 代码: ...

  7. UVa 1626 括号序列(矩阵连乘)

    https://vjudge.net/problem/UVA-1626 题意: 输入一个由 "(" . ")" . "[" . " ...

  8. UVa 11149 Power of Matrix (矩阵快速幂,倍增法或构造矩阵)

    题意:求A + A^2 + A^3 + ... + A^m. 析:主要是两种方式,第一种是倍增法,把A + A^2 + A^3 + ... + A^m,拆成两部分,一部分是(E + A^(m/2))( ...

  9. uva 11885 - Number of Battlefields(矩阵高速幂)

    题目连接:uva 11885 - Number of Battlefields 题目大意:给出周长p,问多少种形状的周长为p的,而且该图形的最小包围矩阵的周长也是p,不包含矩形. 解题思路:矩阵高速幂 ...

随机推荐

  1. 创建Fragment和传递数值

    下面在扩展一下创建Fragment和传递数值 如果我们不需要传递数值,那就直接可以在宿主activity中,跟平常一样创建fragment,但是如果我们需要传递数据的话,可以使用newInstance ...

  2. js中的document.ready

    1.概念 表示在dom结构绘制完成后执行,可能DOM元素关联的部分并未加载完 2.写法 $(document).on("ready",function(){ }) $(docume ...

  3. 查看服务器是否被DDOS攻击的方法

    伴随着现代互联网络快速发展,更加容易出现被攻击.尤其是ddos攻击已经不在是大网站需要关心的事情了.不少中小型企业,也在遭受ddos攻击.站长对ddos攻击不了解,所以网站被ddos攻击的时候,都不会 ...

  4. 以下suse11.3x64可以安装pycrypto-2.6.1

    rpm -qa adaptec-firmware-1.35-2.15.4gnome-menus-branding-SLED-11.1-14.26man-pages-3.15-2.23.1crackli ...

  5. POJ1014(多重背包)

    Dividing Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65044   Accepted: 16884 Descri ...

  6. quazip 在windows msvc 2005 下的编译

    quazip 在windows  msvc 2005 下的编译 http://blog.csdn.net/v6543210/article/details/11661427

  7. c#使用selenium+Chromedriver参数配置

    using System; //添加selenium的引用 using OpenQA.Selenium.PhantomJS; using OpenQA.Selenium.Chrome; using O ...

  8. 海量文件查重SimHash和Minhash

    SimHash 事实上,传统比较两个文本相似性的方法,大多是将文本分词之后,转化为特征向量距离的度量,比如常见的欧氏距离.海明距离或者余弦角度等等.两两比较固然能很好地适应,但这种方法的一个最大的缺点 ...

  9. 14:django 用户认证系统

    django认证系统包含三个部分:用户.权限和分组 安装 django项目默认启用了认证系统,如果不是使用django-admin.py创建项目的可以通过在settings配置文件里面的INSTALL ...

  10. 升级PIP源

    pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django