2015 Multi-University Training Contest 5 1009 MZL's Border

MZL's Border #

Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=5351#


 

Mean: 

给出一个类似斐波那契数列的字符串序列,要你求给出的f[n]字符串中截取前m位的字符串s中s[1...i] = s[s.size()-i+1....s.size()]的最大长度。

analyse:

  过计算可以发现,b字符串的前缀都是相同的,所以只要求出m的LBorder就行,和n是无关的,打表找出规律,找出对应不同的m,LBorder的值.

Time complexity: O(N)

 

Source code: 

import java.math.BigInteger;
import java.util.Scanner;


public class Main {

   static BigInteger[] fib1 = new BigInteger[1010];
   static BigInteger[] fib2 = new BigInteger[1010];
   static BigInteger[] fib3 = new BigInteger[1010];

   public static void main(String[] args) {
       fib1[1] = new BigInteger("2");
       fib1[2] = new BigInteger("2");
       fib2[1] = BigInteger.ONE;
       fib2[2] = BigInteger.ONE;
       fib3[1] = BigInteger.ZERO;
       fib3[2] = BigInteger.ONE;

       for (int i = 3; i <= 1005; i++) {
           fib1[i] = fib1[i - 1].add(fib1[i - 2]);
           fib2[i] = fib2[i - 1].add(fib2[i - 2]);
       }
       for (int i = 3; i <= 1005; i++) {
           fib3[i] = fib3[i - 1].add(fib2[i - 1]);
       }

       Scanner in = new Scanner(System.in);
       int t = in.nextInt();
       for (int cas = 0; cas < t; ++cas) {
           BigInteger m;
           int n = in.nextInt(), i;
           m = in.nextBigInteger();
           for (i = 1; i <= 1005; i++) {
               if (m.compareTo(fib1[i]) == 1) {
                   m = m.subtract(fib1[i]);
               } else break;
           }
           if (m.compareTo(fib1[i].divide(new BigInteger("2"))) == 1) {
               m = m.subtract(fib1[i].divide(new BigInteger("2")));
               BigInteger ans = m.add(fib3[i]);
               ans = ans.subtract(BigInteger.ONE);
               ans = ans.remainder(new BigInteger("258280327"));
               System.out.println(ans.toString());
           } else {
               BigInteger ans = m.add(fib3[i]);
               ans = ans.subtract(BigInteger.ONE);
               ans = ans.remainder(new BigInteger("258280327"));
               System.out.println(ans.toString());
           }
       }
   }
}

 

posted @   北岛知寒  阅读(222)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2014-08-05 矩阵乘法 --- hdu 4920 : Matrix multiplication
点击右上角即可分享
微信分享提示
主题色彩