[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. 恢复oracle中误删除drop掉的表

    查看回收站中表 select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recycl ...

  2. How to change pager CSS in CGridView CListView in Yii

    类手册: http://www.yiiframework.com/doc/api/1.1/CLinkPager 其它参考: http://capstone3.blogspot.com/2012/06/ ...

  3. 问题-"Record not found or changed by another user"

    回答1:===============================================================问题:clientdataset“Record not found ...

  4. system partition table

    转载内容 摘录部分我的笔记的中doc,和大家一起感受Oracle 11g在分区方面的增强--System Partitioning 系统分区的特点 ●系统分区与其他分区相比,一个最根本的区别就是不需要 ...

  5. android 获取当前版本号/修改自定义的应用程序的版本号

    1.获取当前版本号 PackageManager pm = getPackageManager(); PackageInfo pi = pm.getPackageInfo(getPackageName ...

  6. PAT 1089. Insert or Merge (25)

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  7. 百度的TSDB——可针对tag查询,应该类似kairosDB

    天工架构 目前,天工平台的服务主要由物接入.物解析.物管理.规则引擎和时序数据库组成,并可无缝对接百度云天算智能大数据平台及基础平台产品,可提供千万级设备接入的能力,百万数据点每秒的读写性能,超高的压 ...

  8. weapon制作武器

    weapon制作武器 (weapon.pas/c/cpp) 解题报告 制作武器weapon.pas/c/cpp) 背景 WZland的紧急避难所很快就建好了,WZland的居民们陆续地来到这个紧急避难 ...

  9. Eclipse + Pydev 配置Python开发环境

    之前有人问 Eclipse + Pydev 的环境配置问题,在此记录一下. 前提条件:需要安装 Eclipse .jdk.Python.这三个软件都可以在官网上下载. 假设上述软件已经安装好了,下面是 ...

  10. heritrix 相关

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...