HDU 5351 MZL's Border (规律,大数)
[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 (规律,大数)的更多相关文章
- HDU 5351——MZL's Border——————【高精度+找规律】
MZL's Border Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- 多校-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 ...
- hdu5351 MZL's Border(规律题,java)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud MZL's Border Time Limit: 2000/1000 MS (Ja ...
- 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: 给出一个类似斐波那契数列的字符串序列 ...
- Hdu 5352 MZL's City (多重匹配)
题目链接: Hdu 5352 MZL's City 题目描述: 有n各节点,m个操作.刚开始的时候节点都是相互独立的,一共有三种操作: 1:把所有和x在一个连通块内的未重建过的点全部重建. 2:建立一 ...
- Hdu 5348 MZL's endless loop (dfs)
题目链接: Hdu 5348 MZL's endless loop 题目描述: 给出一个无向图(有环,有重边),包含n个顶点,m条边,问能否给m条边指定方向,使每个顶点都满足abs(出度-入度)< ...
- hdu 5351 规律+大数
题目大意:定义了一种fib字符串,问第n个fib串的前m个字母前后相等串的最大长度,大约就是这样的 其实主要读完题意的时候并没有思路,但是列几个fib字符串就会发现,除了fib1以外,所有串的前面都是 ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- hdu 5349 MZL's simple problem
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5349 MZL's simple problem Description A simple proble ...
随机推荐
- MySQL 数据库中用户表中口令登陆设置
工具:MyEclipse8.5.apache-tomcat-6.0.43.MySQL5.6 问题:项目是同事发给我,正常运行之后,使用MySQL表里的管理员数据登陆时,提示“仅限于非总部工号登录!” ...
- A Tour of Go Making slices
Slices are created with the make function. It works by allocating a zeroed array and returning a sli ...
- 第一章 Windows NT System Components
Page 3. The focus(焦点) of this book is Windows NT file system and the interaction(交互) of the file sys ...
- Windows Azure功能更新: SDK 2.1发布,Traffic Manager集成
最近,Windows Azure又进行了更新 Windows Azure SDK 2.0发布没多久,2.1版(for .NET)就在今天发布了.2.1版本在管理功能上进行了重大改进,包括Visual ...
- 输出数组里面第N大的数
好像有些大公司出过面试题:找出数组里面第N大的数,当然有点变化,但本质部分是这样的. 要求是不能排序,时间复杂度不能超过O(n^2) 思路很多,我暂时就只会快排衍生的那种.如果对快速排序不太熟悉了,建 ...
- WPF 多线程
写法3 private void button1_Click(object sender, RoutedEventArgs e) { System. ...
- SilkTest天龙八部系列4-ChildWin
一直觉得SilkTest的ChildWin不好理解,今天大致看了一下,其实它和DialogBox每啥区别,也是一种window类型.帮助里面说,典型的ChildWin就是文档窗口.在Windows上, ...
- Thread和Runnable、run和start的区别
多线程可以通过两种方式来创建: 一.通过继承Thread类. 二.通过实现Runnable接口. 那么中两种方式到底有什么区别呢?那种方式更好些呢? 先看看几个简单的Demo: Demo1 publi ...
- 【转】GitHub删除一个仓库——2013-08-27 21
http://xiacijian.blog.163.com/blog/static/849931902012111195041170/ 1.进入要删除的仓库 2.找到 导航栏 Code NetWor ...
- Sample Ant Build File - WAR--reference
I am using the Spring SimpleFormController example to illustrate the build process. The figure below ...