80分求解

P1962 斐波那契数列

没错
by Erina @ 2017-10-19 10:08:48


现在解决了,fast\_pow(int p)那里应该改成long long p
by 白桦树 @ 2017-10-19 10:28:24


```cpp #include<iostream> #include<cstdio> using namespace std; long long mo=1e9+7,t; struct ju{ long long m[110][110]; }E,a,sum; ju mul(ju q,ju w,int n,int ooo) { ju c; for(int i=0;i<n;i++) for(int j=0;j<ooo;j++) { c.m[i][j]=0; for(int k=0;k<ooo;k++) c.m[i][j]=(c.m[i][j]+(q.m[i][k]*w.m[k][j])%mo)%mo; } return c; } ju fast(ju b,long long o) { sum=E; while(o) { if(o&1) sum=mul(sum,b,3,3); b=mul(b,b,3,3); o>>=1; } return sum; } int main() { a.m[0][0]=a.m[1][0]=a.m[0][1]=a.m[1][2]=1; for(int i=0;i<3;i++) E.m[i][i]=1; ju ans; ans.m[0][0]=2;ans.m[0][1]=1;ans.m[0][2]=1; int k; scanf("%d",&k); if(k<=2) printf("1"); else { ju answer=mul(ans,fast(a,k-2),1,3); printf("%lld",answer.m[0][1]); } return 0; } 蜜汁80分...同楼主 ```
by 我是大傻逼 @ 2017-11-01 16:57:35


注意每一个都开long long n和快速幂里存次数的都要开long long
by memset0 @ 2017-12-17 14:39:21


#include<cstdio> using namespace std; const long long MOD=1000000007; struct Fib { long long a[2][2]; Fib operator*(const Fib&b) { Fib c; c.a[0][0]=(a[0][0]*b.a[0][0]%MOD+a[0][1]*b.a[1][0]%MOD)%MOD; c.a[0][1]=(a[0][0]*b.a[0][1]%MOD+a[0][1]*b.a[1][1]%MOD)%MOD; c.a[1][0]=(a[1][0]*b.a[0][0]%MOD+a[1][1]*b.a[1][0]%MOD)%MOD; c.a[1][1]=(a[1][0]*b.a[0][1]%MOD+a[1][1]*b.a[1][1]%MOD)%MOD; return c; } }A[40],ans; long long n; int main() { scanf("%lld",&n); n--; A[0].a[0][0]=A[0].a[0][1]=A[0].a[1][0]=1; for(long long i=1;((long long)1<<i)<=n;i++) A[i]=A[i-1]*A[i-1]; ans.a[0][0]=ans.a[1][1]=1; for(long long i=0;((long long)1<<i)<=n;i++) if(((long long)1<<i)&n) ans=ans*A[i]; printf("%lld\n",ans.a[0][0]); return 0; } 虽然整个程序中一个int都找不到了,但仍然只有80分,WA的还一样。 测试点2:On line 1 column 1, read 70712, expected 18836. 得分0 测试点10:On line 1 column 1, read 1, expected 55103. 得分0
by wucstdio @ 2018-02-23 08:26:34


```cpp #include<cstdio> using namespace std; const long long MOD=1000000007; struct Fib { long long a[2][2]; Fib operator*(const Fib&b) { Fib c; c.a[0][0]=(a[0][0]*b.a[0][0]%MOD+a[0][1]*b.a[1][0]%MOD)%MOD; c.a[0][1]=(a[0][0]*b.a[0][1]%MOD+a[0][1]*b.a[1][1]%MOD)%MOD; c.a[1][0]=(a[1][0]*b.a[0][0]%MOD+a[1][1]*b.a[1][0]%MOD)%MOD; c.a[1][1]=(a[1][0]*b.a[0][1]%MOD+a[1][1]*b.a[1][1]%MOD)%MOD; return c; } }A[40],ans; long long n; int main() { scanf("%lld",&n); n--; A[0].a[0][0]=A[0].a[0][1]=A[0].a[1][0]=1; for(long long i=1;((long long)1<<i)<=n;i++) A[i]=A[i-1]*A[i-1]; ans.a[0][0]=ans.a[1][1]=1; for(long long i=0;((long long)1<<i)<=n;i++) if(((long long)1<<i)&n) ans=ans*A[i]; printf("%lld\n",ans.a[0][0]); return 0; } ``` 虽然整个程序中一个int都找不到了,但仍然只有80分,WA的还一样。 测试点2:On line 1 column 1, read 70712, expected 18836. 得分0 测试点10:On line 1 column 1, read 1, expected 55103. 得分0
by wucstdio @ 2018-02-23 08:28:10


上一页 |