f[1] = 'b', f[2] = 'a', f[i] = f[i - 1] + f[i - 2]
斐波那契数列的字符串,给你n和m,前m位中,最长的前缀等于后缀的长度是多少。1≤n≤1000, 1≤m≤length(f[n])
规律题,虽然我不知道为什么。
import java.io.*;
import java.util.*;
import java.math.*;
public class Main{
//Scanner cin = Scanner(System.in);
static BigInteger f[] = new BigInteger[1005];
public static void main(String[] args){
f[1] = new BigInteger("1");
f[2] = new BigInteger("2");
for(int i = 3; i <= 1001; i++){
//f[i].valueOf(f[i - 1);
//f[i] = f[i - 1];
f[i] = f[i - 1].add(f[i - 2]);
//f[i].add(f[i - 2]);
//System.out.println(f[i]);
}
Scanner cin = new Scanner(System.in);
int T = cin.nextInt();
int n;
BigInteger m;
for(int cas = 1; cas <= T; cas++){
n = cin.nextInt();
m = cin.nextBigInteger();
BigInteger mm = m.add(new BigInteger("1"));
int p = 0;
for(int i = 1; i <= 1001; i++){
if(f[i].compareTo(mm) > 0){
p = i;
break;
}
}
BigInteger ans = m.subtract(f[p - 2]);
System.out.println(ans.mod(new BigInteger("258280327")));
} }
}