题目大意:定义了一种fib字符串,问第n个fib串的前m个字母前后相等串的最大长度,大约就是这样的
其实主要读完题意的时候并没有思路,但是列几个fib字符串就会发现,除了fib1以外,所有串的前面都是一样的,后面的串就只是在前面串的基础上再贴一个串而已,因此很明显,这里的n其实读下来并没有什么用,基本只是用来告诉我们总串长是第1000个fib数列的数,因此要大数,我就试着写了java大数。然后这个结果就直接列一些,打表就会发现规律了```然后就没有然后了。恩,别忘了mod
1 import java.math.BigInteger; 2 import java.util.*; 3 import java.io.*; 4 public class Main{ 5 static BigInteger fib[] = new BigInteger[1005]; 6 static BigInteger Mod=new BigInteger("258280327"); 7 public static void init(){ 8 fib[1]=new BigInteger("1"); 9 fib[2]=new BigInteger("1"); 10 for(int i=3;i<=1000;++i){ 11 fib[i]=fib[i-1].add(fib[i-2]); 12 } 13 } 14 public static void main(String[] args){ 15 Scanner input = new Scanner(System.in); 16 init(); 17 int T=input.nextInt(); 18 while(T--!=0){ 19 int n=input.nextInt(); 20 BigInteger m=input.nextBigInteger(); 21 m=m.add(BigInteger.ONE); 22 int i; 23 for(i=1;i<=1000;++i){ 24 int f=m.compareTo(fib[i]); 25 if(f<0)break; 26 } 27 System.out.println((m.subtract(fib[i-2].add(BigInteger.ONE))).mod(Mod)); 28 } 29 input.close(); 30 } 31 }
java大数还是非常好的恩```
时间: 2024-09-29 23:41:44