题意:

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

思路:

观察给出的计算子串值的式子,我们要让匹配长度尽量长,子串尽量短才能让这个值尽量大。
我们发现如果固定了子串匹配的后缀,那么这个最大的值的子串就确定了,它就是这个后缀的最小循环节。
那么做法就很明显了,我们枚举每一个后缀,求出它们的最小循环节,计算值来更新答案就行了。
后缀的最小循环节不太好操作,可以提前把 s s s反转。

代码:

用KMP来求最小循环节。
不论是不是完整的循环串,字符串s的长度为len,则s的最小循环节长度为len-next[len]。注意用的是字符串长度的next[len].

/** @file J.cpp* @path D:\code\ACM\gym\CCPC_Qinhuangdao\J.cpp* @author Xiuchen* @date  2020-10-21 20:54:11
*/#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<cmath>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<unordered_map>
//#define DEBUG
#define M_PI 3.14159265358979323846
#define dbg(x) cout << #x << " = "<< (x) << endl
#define dbg2(x1,x2) cout << #x1 << " = " << x1 << " " << #x2 << " = " << x2 << endl
#define dbg3(x1,x2,x3) cout<< #x1 << " = " << x1 << " " << #x2 << " = " << x2 << " " << #x3 << " = " << x3 <<endl
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3fLL;
const int maxn = 1e7 + 100;
int gcd(int a, int b){return b ? gcd(b, a % b) : a;
}
ll a, b;
int n = 0, nxt[maxn];
char t[maxn], s[maxn], ss[maxn];
void kmp_pre(){int i, j;j = nxt[0] = -1;i = 0;while(i < n){while(-1 != j && s[i] != s[j]) j = nxt[j];nxt[++i] = ++j;}
}
int main(){#ifdef DEBUGfreopen("input.txt", "r", stdin);
//  freopen("output.txt", "w", stdout);
#endifscanf("%lld%lld", &a, &b);scanf("%s", t + 1);int lent = strlen(t + 1);bool flag = false;for(int i = 1; i <= lent; i++){if(flag) ss[++n] = t[i];if(t[i] == '.') flag = true;}for(int i = 1; i <= n; i++) s[i - 1] = ss[n - i + 1];s[n] = '\0';kmp_pre();ll ans = a - b;for(int i = 1; i <= n; i++) ans = max(ans, a * i - b * (i - nxt[i]));printf("%lld\n", ans);return 0;
}

2019 CCPC秦皇岛 J 题 MUV LUV EXTRA【KMP 求最小循环节】相关推荐

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

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

  2. 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位置开始,那么一定需要延续到末尾 考虑固 ...

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

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

  4. 2019年秦皇岛J题:MUV LUV EXTRA(KMP后缀数组)

    Problem Description 鉴纯夏是一名成绩不太好的高中生.一天她在数学考试中碰到了一道求某条线段长度的问题.因为她并不会做这道题,所以她准确地作图后用尺子量出了这条线段的长度.不幸的是, ...

  5. 2019 CCPC 秦皇岛 MUV LUV EXTRA kmp

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

  6. hdu6740 MUV LUV EXTRA KMP算法

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

  7. HDU 6740 MUV LUV EXTRA(求循环节)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6740 中文题意链接:http://acm.hdu.edu.cn/contests/contest_sh ...

  8. 2019 CCPC 秦皇岛: MUV LUV EXTRA

    MUV LUV EXTRA (本篇主要内容,kmp求最短循环节) 题目传送门: MUV LUV EXTRA 题意: 给你一个字符串和两个整数a和b.在小数点后,找到一个循环节 l,循环长度为p.求 a ...

  9. MUV LUV EXTRA 2019CCPC秦皇岛站J

    MUV LUV EXTRA 2019CCPC秦皇岛站J (hdu重现赛) 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6740 思路 kmp求循环节 ...

最新文章

  1. 端到端TVM编译器(上)
  2. 在.net下使用WebBrower控件时屏蔽弹出新窗口
  3. audio 小程序 放大_码code | 小程序新能力释放,人人都能拥有对话机器人
  4. springMVC3学习(四)--訪问静态文件如js,jpg,css
  5. linux 硬软链接区别
  6. 启动数据库报错(1)ORA-01157,ORA-01110
  7. 分类分布(categorical分布)
  8. C语言 函数不定长参数 ##__VA_ARGS__经典案例 - C语言零基础入门教程
  9. excite-punastranvirtual.lab振动噪声仿真
  10. php短网址案例,php生成短网址原理与实例
  11. nginx proxy模块
  12. 干货!技术分享:如何写好一篇论文
  13. QQ音乐会员免费领取
  14. [Python] 练习代码
  15. Sidetree协议
  16. CCF201809-3 元素选择器
  17. 【字节搜索校招/社招/实习内推】
  18. 自助广告插件系统 7.4版本 高颜值网站广告代码
  19. 运动目标检测--三种方法比较
  20. 白山搜索引擎优化收费_白山SEO-白山网站优化-白山新站整站快速排名-【

热门文章

  1. 4S店的金融服务费,并不全是在坑你
  2. Web应用安全权威指南读书思维导图
  3. 天载杠杆炒股大盘热度较高
  4. 连接局域网中计算机与传输介质的网络设备是,局域网传输介质与连接设备.PPT...
  5. openresty 缓存
  6. DevExpress控件 LookupEdit 模糊查询
  7. axios箭头函数和this问题处理
  8. signed main()
  9. 微语录(2011-01-10---2011-01-16)
  10. GoPro实时图片传输