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 = 1003;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 = 0, i = 0;for ( i = 0; i < lb; ++i ) {x += ( a[i] - '0' + b[i] - '0' );a[i] = '0' + x % 10;x /= 10;}while ( x && i < la ) {x += ( a[i] - '0' );a[i] = '0' + x % 10;x /= 10;++i;}if ( x ) a += '0' + x;return a; }inline string sub ( string a, string b ) {int la = a.size(), lb = b.size(), x = 0, i = 0;for ( i = 0; i < lb; ++i ) {if ( a[i] - x >= b[i] ) {a[i] = a[i] - x - b[i] + '0';x = 0;} else {a[i] = 10 + '0' + a[i] - b[i] - x;x = 1;}}while ( x && i < la ) {if ( a[i] != '0' ) {a[i] = a[i] - 1;x = 0;} else {a[i] = '9';++i;}}i = la - 1;while ( a[i] == '0' && i != 0 ) {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() - 1; i >= 0; --i ) {if ( a[i] != b[i] ) return a[i] > b[i];}return 0;}return a.size() > b.size(); }void make ( int n, string m ) {if ( n < 4 ) {ans = "0";return ;}if ( pd ( m, fib[n - 1] ) ) {string s1 = sub ( fib[n], "2" );if ( !pd ( m, s1 ) ) {ans = sub ( m, fib[n - 2] );} else {ans = sub ( m, fib[n - 1] );;}return ;} else make ( n - 1, m ); }void MOD ( string s, LL k ) {LL tem = 0;for ( int i = s.size() - 1; i >= 0; --i ) {tem = ( tem * 10 + s[i] - '0' ) % k;}cout << tem << endl; } int main() {fib[0] = "0";fib[1] = "1";for ( int i = 2; i <= 1000; ++i ) {fib[i] = add ( fib[i - 1] , fib[i - 2] );}cin >> T;while ( T-- ) {cin >> n >> m;reverse ( m.begin(), m.end() );make ( n, m );MOD ( ans, 258280327 );} }
View Code
转载于:https://www.cnblogs.com/keam37/p/4705003.html
HDU 5351 MZL's Border (规律,大数)相关推荐
- 2018 ICPC 焦作区域赛 Resistors in Parallel(找规律+大数)
传送门 题目大意 给出电阻的并联公式,规定一个含有平方因子的数的1R=0\frac{1}{R}=0R1=0.定义一个数的阻值为其所有的因子阻值并联求出的结果,问nnn以内并联后的最大的阻值是多少,输 ...
- HDU 6229 Wandering Robots 找规律+离散化
题目链接:Wandering Robots 题解:先讲一下规律,对于每一个格子它可以从多少个地方来有一个值(可以从自己到自己),然后答案就是统计合法格子上的数与所有格子的数的比值 比如说样例的3 0格 ...
- Doom 规律+大数
Doom 比赛的时候没有做出来,补题. 题意:题目定义了一个斐波那契串 1) fib1=b; 2) fib2=a; 3) fibi=fibi-1fibi-2,i>2 举例,fib3=ab,fib ...
- HDU - 1002 A + B Problem II(大数)
题目链接:点击查看 题目大意:大数加法 题目分析:第一次用Java写ACM,还是有点小激动滴,有几点需要注意的: 公共类名要写Main 不要提交包名 注意输入输出 上代码吧,纪念一下: import ...
- HDU - 6267 (概论/找规律/递推)
VJ地址 题目大意: 有n个节点 从0-(n-1),连边的规律为 即i点的父亲只能是比i小的数,而且是随机的,现在随机选择应该一个节点作为根,求这子树的和的期望是多少. 思路:可以知道总共有(n-1) ...
- HDU 5914 Triangle 数学找规律
Triangle 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5914 Description Mr. Frog has n sticks, who ...
- hdu 1998 奇数阶魔方 规律
题目链接 奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 2018 焦作 onsite E - Resistors in Parallel(数学或规律+大数)
题目链接:http://codeforces.com/gym/102028/problem/EE. Resistors in Parallel time limit per test 2.0 s me ...
- Resistors in Parallel(找规律+大数)
题意:https://codeforces.com/group/ikIh7rsWAl/contest/254825/problem/E 给你一个n,计算n / Sigma(1~n)的d(是n的只出现一 ...
- hdu 4043 FXTZ II [ 概率 + Java大数]
传送门 FXTZ II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
最新文章
- python 错误之SyntaxError: Missing parentheses in call to 'print'
- 递归/回溯:Subsets II求子集(有重复元素)
- mysql ibd文件还原_Mysql 通过ibd文件恢复数据
- 导入torchvision出现:AttributeError: module ‘torch.jit‘ has no attribute ‘unused‘错误
- SAP UI5 初学者教程之二十八 - SAP UI5 应用的集成测试工具 OPA 介绍试读版
- c语言鼠标移动响应,CSS鼠标响应事件经过、移动、点击示例介绍
- mysql schema数据混乱_MySQL之Schema与数据类型优化
- 软件测试用例设计方法-判定表法
- AppStore刷榜那些事儿:猪,也是这么想的
- linux dup用法,Linux:dup和dup2文件描述符及函数解析,dupdup2
- updateStateByKey算子入门案例
- 带动量的随机梯度下降法_梯度下降法(SGD)原理解析及其改进优化算法
- python爬虫入门案例,持续更新
- 基于codebook背景建模的运动目标检测
- 智能颈椎按摩仪的特点和功能
- java informix_Informix 数据库的数据类型
- python 列表写入excel_Python读写excel表格的方法一
- 如何在 Ubuntu 上配置 ROS和LPMS IMU传感器
- 华芯微特SWM181学习笔记--GPIO应用与环境搭建
- MIS迭代一:增删改查功能测试