| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
3070,为什么会WA呢?我已经想了很长时间了,真的崩溃了我的代码是这样的:
#include <iostream>
using namespace std;
__int64 base[][2] ={{1, 1},{1, 0}};
__int64 res[2][2] = {1, 0, 0, 1};
void multi(__int64 a[][2], __int64 b[][2])
{
__int64 temp1 = a[0][0]*b[0][0] + a[0][1]*b[1][0];
__int64 temp2 = a[0][0]*b[0][1] + a[0][1]*b[1][1];
__int64 temp3 = a[1][0]*b[0][0] + a[1][1]*b[1][0];
__int64 temp4 = a[1][0]*b[0][1] + a[1][0]*b[1][1];
a[0][0] = temp1%10000;
a[0][1] = temp2%10000;
a[1][0] = temp3%10000;
a[1][1] = temp4%10000;
}
int cal(__int64 n)
{
if(n == 0)
return 0;
else
if(n == 1)
return 1;
else
if(n == 2)
return 1;
__int64 level = n - 1;
//cout<<level<<endl;
base[0][0] = 1;
base[0][1] = 1;
base[1][0] = 1;
base[1][1] = 0;
res[0][0] = 1;
res[0][1] = 0;
res[1][0] = 0;
res[1][1] = 1;
//cout<<level<<endl;
while(level>1)
{
if(level%2 == 1)
multi(res, base);
multi(base, base);
level/=2;
}
multi(res, base);
int result = res[0][0];
//cout<<result<<endl;
return result%10000;
}
int main()
{
__int64 n;
while(cin>>n&&n!= - 1)
cout<<cal(n)<<endl;
return 0;
}
小的测试数据是对的,换大一点的为什么就不行了呢?
郁闷
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator