样例TLE。。。来自一个蒟蒻的求助

P1939 矩阵加速(数列)

解决了,又莫名WA,说是 Too long on line 11(20).?!!!!!
by Bingberg @ 2022-08-18 23:52:30


求大佬们过目。。。
by Bingberg @ 2022-08-18 23:53:10


@[Bingberg](/user/174927) 检查一下有没有忘记输出回车
by hjsxhst2022 @ 2022-08-19 10:00:42


加了“\n”还是WA了两个点。。。 ``` #include<bits/stdc++.h> #define int unsigned long long //typedef long long int using namespace std; const int maxN = 4; const int Mod = 1e9 + 7; struct mat{int m[maxN][maxN];}unit; inline int read(){ int s = 0, f = 1; char ch = getchar(); while(!isdigit(ch)){ if(ch == '-')f = -1; ch = getchar(); } while(isdigit(ch)){ s = s * 10 + ch - '0'; ch = getchar(); } return s * f; } inline void write(int x){ if(x < 0)putchar('-'), x = -x; if(x >= 10)write(x / 10); putchar(x % 10 + '0'); } void init(){ memset(unit.m, 0, sizeof(unit.m)); for(int i = 1; i <= maxN; i++) { unit.m[i][i] = 1; } } mat operator * (const mat &a, const mat &b){ mat ans; for(int i = 1; i < maxN; i++){ for(int j = 1; j < maxN; j++){ int tmp = 0; for(int k = 1; k < maxN; k++){ tmp = (tmp + a.m[i][k] * b.m[k][j] % Mod) % Mod; } ans.m[i][j] = tmp; } } return ans; } mat mat_quick_multi(mat a, int b){ init(); mat ans = unit; while(b){ if(b & 1)ans = (ans * a); a = (a * a); b >>= 1; } return ans; } signed main() { mat a;memset(a.m, 0, sizeof(a.m)); a.m[1][1] = 1; a.m[2][1] = 1; a.m[3][1] = 0; a.m[1][2] = 0; a.m[2][2] = 0; a.m[3][2] = 1; a.m[1][3] = 1; a.m[2][3] = 0; a.m[3][3] = 0; int T = read(); while(T--){ int n = read(); if(n <= 3){ cout << 1; continue; } mat ans1 = mat_quick_multi(a, n - 2); printf("%lld\n", (ans1.m[1][1] + ans1.m[1][2]) % Mod); } return 0; } ``` 求大佬指教
by Bingberg @ 2022-08-19 11:01:07


@[Bingberg](/user/174927) 您在main函数里的n<=3 的特判里没有加上换行符;加上的话就可以过了
by weisumouyingjinpai @ 2022-08-25 10:47:20


谢谢大佬们
by Bingberg @ 2022-09-03 14:25:20


|