题目链接:点击进入

题意

一个无限循环小数( 从小数点后 某一位 开始依次不断地重复出现前一个或一节数字的十进制无限小数,叫做循环小数 ),真实价值 = a * p - b * l ( a , b 是题目给的, l 是循环节的长度, p 是循环部分的长度( 即从那个 “某一位” 往后所有数字的长度 ),题目只给了这个给无限循环小数的前一部分,也就是说不确定循环是从哪开始,不知道循环节的长度 ),求最大的真实价值。
( 小数点前面部分不会对结果产生影响 ---- “ 没用 ” )

思路

将小数点后面部分当作字符串来处理,将此字符串翻转,然后 kmp 求前缀最小循环节,同时更新最大真实价值。

代码

#include<iostream>
#include<string>
#include<map>
#include<set>
//#include<unordered_map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<fstream>
#define X first
#define Y second
#define INF 0x3f3f3f3f
#define int long long
using namespace std;
typedef long long ll;
typedef unsigned long long llu;
const int maxn=1e7+10;
int n,a,b,Next[maxn];//Next[i]表示前面长度为i的子串中,前缀和后缀相等的最大长度。
char s[maxn],t[maxn];
//求str对应的next数组
void getNext(char const* str,int len)
{int i=0;Next[i]=-1;int j=-1;while(i<len ){if(j==-1||str[i]==str[j]){++i;++j;if(str[i]!=str[j])Next[i]=j;elseNext[i]=Next[j];}else                                 j=Next[j];}
}
signed main()
{scanf("%lld%lld",&a,&b);scanf("%s",s);int l1=strlen(s),pos=0,cnt=0;for(int i=0;i<l1;i++){if(s[i]=='.'){pos=i;break;}}for(int i=l1-1;i>pos;i--)t[cnt++]=s[i];getNext(t,cnt);int ans=-1e18;for(int i=1;i<=cnt;i++){int l=i-Next[i];int res=a*i-b*l;ans=max(ans,res);//假设S的长度为len,则S存在最小循环节,循环节的长度L为len-next[len]//如果len可以被len - next[len]整除,则表明字符串S可以完全由循环节循环组成,循环周期T=len/L。//如果不能,说明还需要再添加几个字母才能补全。需要补的个数是循环个数L-len%L=L-(len-L)%L=L-next[len]%L,L=len-next[len]。}printf("%lld",ans);return 0;
}

MUV LUV EXTRA -( kmp最小循环节 )相关推荐

  1. Problem A. MUV LUV EXTRA(kmp求最小循环节)

    LINK 最小化 a ∗ p − b ∗ l a*p-b*l a∗p−b∗l 其中 p p p表示循环节总长, l l l表示循环节长度 若循环节从 i i i位置开始,那么一定需要延续到末尾 考虑固 ...

  2. 2019 CCPC 秦皇岛 MUV LUV EXTRA kmp

    传送门 枚举循环节已出现的长度 p,最优的循环节就是最后 p 个字 符构成的字符串的最短周期. 考虑把字符串倒过来,使用 kmp 可以求出每个前缀的最短 周期,即求出了原串每个后缀的最短周期. #in ...

  3. hdu6740 MUV LUV EXTRA KMP算法

    题解:反向用next数组求循环节(前i个字符的)即可. 题目:https://vjudge.net/problem/HDU-6740 #include<bits/stdc++.h> #de ...

  4. J. MUV LUV EXTRA (KMP求最小循环节)

    原题链接 枚举后缀,KMP求每种后缀的最小循环节,更新最优解. #include <bits/stdc++.h> #define int long long using namespace ...

  5. MUV LUV EXTRA(Kmp找最小循环节)

    MUV LUV EXTRA [Link](Problem - J - Codeforces) 题意 给你a和b和一个小数,让你找 a × 循 环 节 出 现 到 结 尾 的 长 度 + b × 循 环 ...

  6. 2019 CCPC秦皇岛 J 题 MUV LUV EXTRA【KMP 求最小循环节】

    题意: 原题意是给出一个有理数的前一部分,求这个有理数的无限循环部分是什么.有一个值来评估猜的准确度.转换一下就成了下面的题意: 给出一个字符串s,有某一个子串,设p为该子串在s的某个后缀中的匹配长度 ...

  7. 2019CCPC秦皇岛赛区 hdu 6740 MUV LUV EXTRA(KMP next数组)

    传送门 MUV LUV EXTRA Time Limit: 2000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Othe ...

  8. 【HDU - 3746 】Cyclic Nacklace (KMP,最小循环节问题)

    题干: CC always becomes very depressed at the end of this month, he has checked his credit card yester ...

  9. J - MUV LUV EXTRA(KMP)

    感受 思 路 很 简 单 , 就 是 不 知 道 k m p 还 可 以 求 最 小 循 环 节 长 度 思路很简单,就是不知道kmp还可以求最小循环节长度 思路很简单,就是不知道kmp还可以求最小循 ...

最新文章

  1. async 队列性能测试
  2. html模块殃射,【Web前端问题】webpack打包后,module模块中的函数无法在html标签的事件中调用?...
  3. smarty模板基础知识
  4. 恶犬秒变萌汪:东京大学开源“治愈系” GAN 图片拼贴工具 | 技术头条
  5. React.createClass和extends Component的区别
  6. 《色彩解答》系列之二 色彩比例
  7. TCP和UDP的区别
  8. SpringBoot使用快递鸟进行电子面单的获取以及打印
  9. [非线性控制理论]8_三种鲁棒控制器的比较
  10. 推导手机QQ聊天记录db文件加密IMEI值
  11. Python批量扫描服务器指定端口状态
  12. PDF.js使用教程
  13. vue项目中使用Google Analytics (谷歌统计)
  14. 采集京东网数据的10个经典方法
  15. 566页19万字区级一网通办政务服务应用平台建设项目方案书
  16. 超详细!如何在windows安装Hyper-V虚拟机
  17. 什么是股票交易api接口?
  18. 随笔:数据库SQL执行顺序
  19. 关于使用通用mapper出现的错误
  20. 2020级李海扬、程志豪、杨本豪、周海涛——离散信源的熵的性质的简要介绍和证明

热门文章

  1. PDF怎么转换成word格式?这三个方法转换效率很高
  2. JasperReport中文无法显示
  3. 输出调节基本概念1.1——有界性与稳定性的定义及判断
  4. ‘AMap is undefined‘高德地图(3)vue-amap报错
  5. c++11 智能指针 (std::unique_ptr)(六)
  6. pve (群辉、软路由、win/linux)折腾日记
  7. Error: The apk for your currently selected variant (app-release.apk) is not signed
  8. mysql 下载安装教程以及密码初始化
  9. EarMaster 7中文版来啦
  10. 数据库管理-第八十一期 保姆级EMCC搭建教程(20230606)