hdu5351 MZL's Border(规律题,java)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud

MZL‘s Border

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 905    Accepted Submission(s): 295

Problem Description

As is known to all, MZL is an extraordinarily lovely girl. One day, MZL was playing with her favorite data structure, strings.

MZL is really like Fibonacci Sequence, so she defines Fibonacci Strings in the similar way. The definition of Fibonacci Strings is given below.
  
  1) fib1=b
  
  2) fib2=a
  
  3) fibi=fibi−1fibi−2, i>2
  
For instance, fib3=ab, fib4=aba, fib5=abaab.

Assume that a string s whose length is n is s1s2s3...sn. Then sisi+1si+2si+3...sj is called as a substring of s, which is written as s[i:j].

Assume that i<n. If s[1:i]=s[n−i+1:n], then s[1:i] is called as a Border of s. In Borders of s, the longest Border is called as s‘ LBorder. Moreover, s[1:i]‘s LBorder is called as LBorderi.

Now you are given 2 numbers n and m. MZL wonders what LBorderm of fibn is. For the number can be very big, you should just output the number modulo 258280327(=2×317+1).

Note that 1≤T≤100, 1≤n≤103, 1≤m≤|fibn|.

Input

The first line of the input is a number T, which means the number of test cases.

Then for the following T lines, each has two positive integers n and m, whose meanings are described in the description.

Output

The output consists of T lines. Each has one number, meaning fibn‘s LBorderm modulo 258280327(=2×317+1).

Sample Input

2
4 3
5 5

Sample Output

1
2

  1 import java.io.OutputStream;
  2 import java.io.IOException;
  3 import java.io.InputStream;
  4 import java.io.PrintWriter;
  5 import java.util.StringTokenizer;
  6 import java.math.BigInteger;
  7 import java.io.IOException;
  8 import java.io.BufferedReader;
  9 import java.io.InputStreamReader;
 10 import java.io.InputStream;
 11
 12 /**
 13  * Built using CHelper plug-in
 14  * Actual solution is at the top
 15  *
 16  * @author [email protected]/fraud
 17  */
 18 public class Main {
 19     public static void main(String[] args) {
 20         InputStream inputStream = System.in;
 21         OutputStream outputStream = System.out;
 22         Scanner in = new Scanner(inputStream);
 23         PrintWriter out = new PrintWriter(outputStream);
 24         Task1009 solver = new Task1009();
 25         solver.solve(1, in, out);
 26         out.close();
 27     }
 28
 29     static class Task1009 {
 30         Scanner in;
 31         PrintWriter out;
 32
 33         public void solve(int testNumber, Scanner in, PrintWriter out) {
 34             this.in = in;
 35             this.out = out;
 36             run();
 37         }
 38
 39         void run() {
 40             BigInteger dp[] = new BigInteger[2010];
 41             BigInteger a[] = new BigInteger[2010];
 42             dp[0] = BigInteger.ONE;
 43             dp[1] = BigInteger.ONE;
 44             dp[2] = BigInteger.ONE;
 45             dp[3] = BigInteger.valueOf(3);
 46             dp[4] = BigInteger.valueOf(5);
 47             a[0] = BigInteger.ZERO;
 48             a[1] = BigInteger.ZERO;
 49             a[2] = BigInteger.ONE;
 50             a[3] = BigInteger.ONE;
 51             a[4] = BigInteger.valueOf(2);
 52             for (int i = 5; i < 2010; i++) {
 53                 dp[i] = dp[i - 1].add(dp[i - 2]);
 54                 a[i] = a[i - 2].add(dp[i - 2]);
 55             }
 56             for (int i = 1; i < 2010; i++) {
 57                 dp[i] = dp[i].add(dp[i - 1]);
 58             }
 59             BigInteger m;
 60             int t, n;
 61             t = in.nextInt();
 62             while (t != 0) {
 63                 t--;
 64                 n = in.nextInt();
 65                 m = in.nextBigInteger();
 66                 if (m.compareTo(BigInteger.ONE) == 0) {
 67                     out.println(1);
 68                     continue;
 69                 }
 70                 int i = 0;
 71                 for (i = 0; i < 2010; i++) {
 72                     if (dp[i].compareTo(m) >= 0) break;
 73                 }
 74                 i--;
 75                 out.println(a[i + 1].add(m.subtract(dp[i].add(BigInteger.ONE))).mod(BigInteger.valueOf(258280327)));
 76             }
 77         }
 78
 79     }
 80
 81     static class Scanner {
 82         BufferedReader br;
 83         StringTokenizer st;
 84
 85         public Scanner(InputStream in) {
 86             br = new BufferedReader(new InputStreamReader(in));
 87             eat("");
 88         }
 89
 90         private void eat(String s) {
 91             st = new StringTokenizer(s);
 92         }
 93
 94         public String nextLine() {
 95             try {
 96                 return br.readLine();
 97             } catch (IOException e) {
 98                 return null;
 99             }
100         }
101
102         public boolean hasNext() {
103             while (!st.hasMoreTokens()) {
104                 String s = nextLine();
105                 if (s == null)
106                     return false;
107                 eat(s);
108             }
109             return true;
110         }
111
112         public String next() {
113             hasNext();
114             return st.nextToken();
115         }
116
117         public int nextInt() {
118             return Integer.parseInt(next());
119         }
120
121         public BigInteger nextBigInteger() {
122             return new BigInteger(next());
123         }
124
125     }
126 }

hdu5351 MZL's Border(规律题,java)

时间: 2024-10-13 05:02:09

hdu5351 MZL's Border(规律题,java)的相关文章

hdu5351(2015多校5)--MZL&#39;s Border(打表,,找规律)

题目链接:点击打开链接 题目大意:给出b1 = 'b' , b2 = 'a' , bi = b(i-1)b(i-2),将i-1和i-2链接起来,记录一个串的s[1-i] 和s[n-i+1-n]相同的话 Border,当i为最长是为LBorder,现在给让求在bn这个串上的前m个字符组成的子串的LBorder 通过计算可以发现,b字符串的前缀都是相同的,所以只要求出m的LBorder就行,和n是无关的,打表找出规律,找出对应不同的m,LBorder的值,因为存在大数,用java写 dp[i]第i层

HDU 5351 MZL&#39;s Border(java 找规律)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5351 Problem Description As is known to all, MZL is an extraordinarily lovely girl. One day, MZL was playing with her favorite data structure, strings. MZL is really like Fibonacci Sequence, so she defin

HDU 5351——MZL&#39;s Border——————【高精度+找规律】

MZL's Border Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 944    Accepted Submission(s): 306 Problem Description As is known to all, MZL is an extraordinarily lovely girl. One day, MZL was pl

HDU 5351 MZL&#39;s Border(找规律+高精度)

MZL's Border Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 895    Accepted Submission(s): 287 Problem Description As is known to all, MZL is an extraordinarily lovely girl. One day, MZL was p

HDOJ 5351 MZL&#39;s Border 找规律

打出前i个串的kmp的fail指针: p: ab 0 0 0 p: aba 0 0 0 1 p: abaab 0 0 0 1 1 2 p: abaababa 0 0 0 1 1 2 3 2 3 p: abaababaabaab 0 0 0 1 1 2 3 2 3 4 5 6 4 5 p: abaababaabaababaababa 0 0 0 1 1 2 3 2 3 4 5 6 4 5 6 7 8 9 10 11 7 8 p: abaababaabaababaababaabaababaabaab

HDU 5351 MZL&#39;s Border(规律)

MZL's Border Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 835    Accepted Submission(s): 268 Problem Description As is known to all, MZL is an extraordinarily lovely girl. One day, MZL was p

多校-HDU 5351 MZL&#39;s Border 数学

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]) 规律题,虽然我不知道为什么. 1 import java.io.*; 2 import java.util.*; 3 import java.math.*; 4 public class Main{ 5 //Scanner cin = Scanner(System.i

hdu 5351 MZL&#39;s Border 打表+高精度

MZL's Border Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 462    Accepted Submission(s): 127 Problem Description As is known to all, MZL is an extraordinarily lovely girl. One day, MZL was pl

hdu5344 MZL&#39;s xor(水题)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud MZL's xor Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 488    Accepted Submission(s): 342 Problem Description MZL loves xor very muc