[HDU 5351 MZL's Border]
题意
  定义字符串$f_1=b,f_2=a,f_i=f_{i-1}f_{i-2}$。

  对$f_n$的长度为$m$的前缀$s$,

  求最大的$k$满足$s[1]=s[m-k+1],s[2]=s[m-k+2]...s[k]=s[m]$


Solution

  先列出前几个字符串

  $f_3=ab,f_4=aba,f_5=abaab,f_6=abaababa,f_7=abaababaabaab$。

  对于n,m。

  假设$f_{n-1}$的长度大于等于$m$,那么相当于求n-1,m。

  假设$f_{n-1}$的小于$m$

  由斐波那契的性质,答案要么是$m-length(f_{n-1})$,

  要么是$m-length(f_{n-2})$

  通过对前几个字符串的分析可以发现,当$m+1<length(f_n)$时答案是后者。

  于是只要先把前1000个字符串的长度求出来。需要使用高精度。

  然后直接按照上面的规则判断就行了。

#include <bits/stdc++.h>
#define lson x << 1
#define rson x << 1 | 1
#define LL long long
#define se second
#define fi first
#define LL long long
using namespace std; const int N = ; string fib[N], m, ans; inline string add ( string a, string b )
{
if ( a.size() < b.size() ) swap ( a, b );
int la = a.size(), lb = b.size(), x = , i = ;
for ( i = ; i < lb; ++i ) {
x += ( a[i] - '' + b[i] - '' );
a[i] = '' + x % ;
x /= ;
}
while ( x && i < la ) {
x += ( a[i] - '' );
a[i] = '' + x % ;
x /= ;
++i;
}
if ( x ) a += '' + x;
return a;
} inline string sub ( string a, string b )
{
int la = a.size(), lb = b.size(), x = , i = ;
for ( i = ; i < lb; ++i ) {
if ( a[i] - x >= b[i] ) {
a[i] = a[i] - x - b[i] + '';
x = ;
} else {
a[i] = + '' + a[i] - b[i] - x;
x = ;
}
}
while ( x && i < la ) {
if ( a[i] != '' ) {
a[i] = a[i] - ;
x = ;
} else {
a[i] = '';
++i;
}
}
i = la - ;
while ( a[i] == '' && i != ) {
a.erase ( a.begin() + i );
--i;
}
return a;
} int T, n; inline bool pd ( string a, string b )
{
if ( a.size() == b.size() ) {
for ( int i = a.size() - ; i >= ; --i ) {
if ( a[i] != b[i] ) return a[i] > b[i];
}
return ;
}
return a.size() > b.size();
} void make ( int n, string m )
{
if ( n < ) {
ans = "";
return ;
}
if ( pd ( m, fib[n - ] ) ) {
string s1 = sub ( fib[n], "" );
if ( !pd ( m, s1 ) ) {
ans = sub ( m, fib[n - ] );
} else {
ans = sub ( m, fib[n - ] );;
}
return ;
} else make ( n - , m );
} void MOD ( string s, LL k )
{
LL tem = ;
for ( int i = s.size() - ; i >= ; --i ) {
tem = ( tem * + s[i] - '' ) % k;
}
cout << tem << endl;
}
int main()
{
fib[] = "";
fib[] = "";
for ( int i = ; i <= ; ++i ) {
fib[i] = add ( fib[i - ] , fib[i - ] );
}
cin >> T;
while ( T-- ) {
cin >> n >> m;
reverse ( m.begin(), m.end() );
make ( n, m );
MOD ( ans, );
}
}

HDU 5351 MZL's Border (规律,大数)的更多相关文章

  1. HDU 5351——MZL's Border——————【高精度+找规律】

    MZL's Border Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  2. 多校-HDU 5351 MZL's Border 数学规律

    f[1] = 'b', f[2] = 'a', f[i] = f[i - 1] + f[i - 2] 斐波那契数列的字符串,给你n和m,前m位中,最长的前缀等于后缀的长度是多少.1≤n≤1000, 1 ...

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

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud MZL's Border Time Limit: 2000/1000 MS (Ja ...

  4. 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: 给出一个类似斐波那契数列的字符串序列 ...

  5. Hdu 5352 MZL's City (多重匹配)

    题目链接: Hdu 5352 MZL's City 题目描述: 有n各节点,m个操作.刚开始的时候节点都是相互独立的,一共有三种操作: 1:把所有和x在一个连通块内的未重建过的点全部重建. 2:建立一 ...

  6. Hdu 5348 MZL's endless loop (dfs)

    题目链接: Hdu 5348 MZL's endless loop 题目描述: 给出一个无向图(有环,有重边),包含n个顶点,m条边,问能否给m条边指定方向,使每个顶点都满足abs(出度-入度)< ...

  7. hdu 5351 规律+大数

    题目大意:定义了一种fib字符串,问第n个fib串的前m个字母前后相等串的最大长度,大约就是这样的 其实主要读完题意的时候并没有思路,但是列几个fib字符串就会发现,除了fib1以外,所有串的前面都是 ...

  8. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

  9. hdu 5349 MZL's simple problem

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5349 MZL's simple problem Description A simple proble ...

随机推荐

  1. 算法导论学习-Dynamic Programming

    转载自:http://blog.csdn.net/speedme/article/details/24231197 1. 什么是动态规划 ------------------------------- ...

  2. wave文件(*.wav)格式、PCM数据格式, goldwave 可以播放pcm raw audio

    1. 音频简介 经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等. 44100HZ 16bit stereo: 每秒钟有 44100 次采 ...

  3. iOS 开发 NSLog调试小技巧

    NSLog其实是一个非常损耗性能的东西,当你在开发了很长时间的一个项目中,想必为了方便调试,里面会有很多的NSLog输出,为了优化性能,同时又方便调试,可以在pch中定义一个宏,既可以替换原有的NSL ...

  4. 在Visual Studio中使用Pseudovariables来帮助调试

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在Visual Studio中使用Pseudovariables来帮助调试.

  5. window下 Mongodb无法访问28107的有关问题(转)

    原文链接:http://www.myexception.cn/go/1956868.html Mongodb无法访问28107的问题 0:环境 os:window7 64位 mongodb版本:3.0 ...

  6. jQuery Mobile方向感应事件

    在现在的智能手机中,都有对方向变换的自动感知功能,比如当手机方向从水平方向切换到垂直方向时,则会触发该事件.在jQuery Mobile中,可以通过orientationchange事件进行绑定,并且 ...

  7. TCP并发server,每个客户一个子进程

    今天笔者带来的是server型号第一,这是最经常使用的模型的最基本的一个–TCP并发server,每个客户一个子进程. 首先简单介绍:TCP并发server,每个客户一个子进程,并发server调用f ...

  8. MySQL对于datetime 源码分析

    http://tsecer.blog.163.com/blog/static/150181720160117355684/   一.时间比较的语法分析 在mysql中,通常时间是一个必不可少的类型,而 ...

  9. [转] React Native Navigator — Navigating Like A Pro in React Native

    There is a lot you can do with the React Native Navigator. Here, I will try to go over a few example ...

  10. bit,byte,char,string区别与基本类型认识

    bit.byte.位.字节.汉字的关系 1 bit     = 1  二进制数据        1 byte  = 8  bit        1 字母 = 1  byte = 8 bit       ...