解决了,又莫名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