http://acm.hdu.edu.cn/showproblem.php?pid=2256 //运行15ms的时候出错了,哪位大牛帮我看下!
#include<iostream>//为何这样就过了。感觉两个算法没什么不同啊??想不明白!!
using namespace std;
const int mod = 1024;
struct Mat
{
int n;
int m;
}kk,rr;
Mat Mul(Mat p,Mat q)
{
Mat r;
r.n = p.n*q.n + 6 * p.m*q.m;
r.m = p.n * q.m + p.m*q.n;
r.n %= mod;
r.m %= mod;
return r;
}
Mat mal(int n)
{
Mat p1;
p1 = kk;
if(n == 1) return p1;
else
{
if(n %2 ==0)
{
p1 = mal(n/2);
return Mul(p1,p1);
}
else
return Mul(mal(n-1),kk);
}
}//这里我真的想不明白是为何?递归的可以,为何下面的为何不可以啊 ??
//while(n != 1)
// {
// if(n %2 == 0)
// {
// p1 = Mul(p1,p1);
// n /= 2;
//}
// else
// {
// rr = Mul(rr,kk);
// n--;;
// }
// }
//return Mul(rr,p1);
//}
int main()
{
int n, t;
cin>>t;
while(t--)
{
cin>>n;
kk.n = 5;
kk.m = 2;
//rr.n = 1;
//rr.m = 0;
Mat answer;
answer = mal(n);
cout<<(2*answer.n - 1)%mod<<endl;
}
}
#include<iostream>
using namespace std;
const int mod = 1024;
struct Mat
{
int n;
int m;
}kk,rr;
Mat Mul(Mat p,Mat q)
{
Mat r;
r.n = p.n*q.n + 6 * p.m*q.m;
r.m = p.n * q.m + p.m*q.n;
r.n %= mod;
r.m %= mod;
return r;
}
Mat mal(int n)
{
Mat p1;
p1 = kk;
while(n != 1)
{
if(n %2 == 0)
{
p1 = Mul(p1,p1);
n /= 2;
}
else
{
rr = Mul(rr,kk);
n--;;
}
}
return Mul(p1,rr);
}
int main()
{
int n, t;
cin>>t;
while(t--)
{
cin>>n;
kk.n = 5;
kk.m = 2;
rr.n = 1;
rr.m = 0;
Mat answer;
answer = mal(n);
cout<<(2*answer.n - 1)%mod<<endl;
}
}