HDU 6740 kmp最小循环节
题意:
给一个无线循环小数的前几位,给n,m
选择其中一种出现在前几位的循环节方式(a个数),循环节的长度b
使得n*a-m*b最大
样例:
2 1
12.1212
输出 6
选择2,2*1-1*1=1;
选择12,2*4-2*1=6;
选择21,2*3-2*1=4;
选择212,2*3-3*1=3;
选择1212,2*4-4*1=4;
思路:
将小数部分,倒过来,求每个点的最小循环节,kmp中i-next[i]代表最小循环节
当倒过来的小数部分,n*i-m*(i-next[i])中的最大就是答案
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define il inline
#define it register int
#define inf 0x3f3f3f3f
#define lowbit(x) (x)&(-x)
#define mem(a,b) memset(a,b,sizeof(a))
#define mod 998244353
const int maxn=1e7+;
ll n,m;
int nexts[maxn];
char s[maxn],s2[maxn];
int p2=;
il void GetNext(int l){
int i=;
int j=-;
nexts[]=-;
while(i<l){
if(j==- || s2[i]==s2[j]){
i++;
j++;
nexts[i] = j;
}
else
j = nexts[j];
}
return;
}
int main(){
while(~scanf("%lld%lld",&n,&m)){
scanf("%s",s);
int l=strlen(s);p2=;
int i;
for(i=;i<l;i++){
if(s[i]=='.'){
break;
}
}
for(int k=l-;k>i;k--){
s2[p2++]=s[k];
}
GetNext(p2);
ll maxx=-1e18;
for(i=;i<=p2;i++){
maxx=max(maxx,(ll)i*n-(ll)(i-nexts[i])*m);
//cout<<i<<" "<<(i-nexts[i])<<endl;
}
printf("%lld\n",maxx);
}
return ;
}
kmp模板
inline void getnext(char *ss){
mem(ne,);
int l=strlen(ss);
int i=,j=-;ne[]=-;
while(i<l){
if (j == - || ss[i] == ss[j])
{
i++;
j++;
ne[i] = j;
}
else{
j = ne[j];
}
}
return;
}
inline int kmp(char *ss,char *s){
int l=strlen(s),ls=strlen(ss);
int i=,j=,ans=;
while(i<l){
if(j==-||s[i]==ss[j])
{
i++;
j++;
}
else
j=ne[j];
if(j==ls)
{
ans++;
j=ne[j];
}
}
return ans;
}
待补全
模板
int next[maxn];
string str[maxn];
void get_next(string s){
memset(next,,sizeof(next));
int len=s.length();
int i,j;
j=next[]=-;
i=;
while(i<len){
while(j!=-&&s[i]!=s[j]) j=next[j];
next[++i]=++j;
}
}
bool kmp(string a,string b){
int lena=a.length();
int lenb=b.length();
get_next(b);
int i=,j=;
while(i<lena){
while(j!=-&&a[i]!=b[j]) j=next[j];
i++,j++;
if(j>=lenb) return true;
}
return false;
}
HDU 6740 kmp最小循环节的更多相关文章
- hdu 3746 Cyclic Nacklace(kmp最小循环节)
Problem Description CC always becomes very depressed at the end of this month, he has checked his cr ...
- HDU - 4333 Revolving Digits(拓展kmp+最小循环节)
1.给一个数字字符串s,可以把它的最后一个字符放到最前面变为另一个数字,直到又变为原来的s.求这个过程中比原来的数字小的.相等的.大的数字各有多少. 例如:字符串123,变换过程:123 -> ...
- hdu3746(kmp最小循环节)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 题意:问在一个字符串末尾加上多少个字符能使得这的字符串首尾相连后能够循环 题解:就是利用next ...
- Cyclic Nacklace hdu3746 kmp 最小循环节
题意:给出一段字符串 求最少在最右边补上多少个字符使得形成循环串(单个字符不是循环串) 自己乱搞居然搞出来了... 想法是: 如果nex[len]为0 那么答案显然是补len 否则 答案为循环 ...
- HDU1358 Period —— KMP 最小循环节
题目链接:https://vjudge.net/problem/HDU-1358 Period Time Limit: 2000/1000 MS (Java/Others) Memory Lim ...
- HDU3746 Cyclic Nacklace —— KMP 最小循环节
题目链接:https://vjudge.net/problem/HDU-3746 Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others) M ...
- Common Divisors CodeForces - 182D || kmp最小循环节
Common Divisors CodeForces - 182D 思路:用kmp求next数组的方法求出两个字符串的最小循环节长度(http://blog.csdn.net/acraz/articl ...
- UVAlive 3026 KMP 最小循环节
KMP算法: 一:next数组:next[i]就是前面长度为i的字符串前缀和后缀相等的最大长度,也即索引为i的字符失配时的前缀函数. 二:KMP模板 /* pku3461(Oulipo), hdu17 ...
- 【KMP+最小循环节】F. Cyclic Nacklace
https://www.bnuoj.com/v3/contest_show.php?cid=9147#problem/F [题意] 给定一个字符串,问在字符串后最少添加多少个字母,得到的新字符串能是前 ...
随机推荐
- Educational Codeforces Round 82 (Rated for Div. 2) A-E代码(暂无记录题解)
A. Erasing Zeroes (模拟) #include<bits/stdc++.h> using namespace std; typedef long long ll; ; in ...
- 【E20200105-1】Centos 7.x 下vsftpd配置文件常用配置详解
centos 7 下vsftp的安装和配置可以参见<[E20200102-1]centos 7 下vsftp的安装和配置> ########匿名用户(anonymous)设置####### ...
- ipa文件信息检查工具
项目地址:https://github.com/ryjwinner/softwares/raw/master/iOS-checkIPA.jar 项目简介: 针对近期大量iOS app需要签名,但多家签 ...
- 手把手带你开发一款 IIS 模块后门
https://cloud.tencent.com/developer/article/1507913 首先准备工具 VS2017 IIS 开始开发 先打开 VS 创建一个 winfrom 项目然后添 ...
- 前端面试必备技巧(二)css盒模型及BFC
CSS盒模型 基本概念:标准模型+IE模型及区别 CSS如何设置这两种模型? JS如何设置获取盒模型对应的宽和高? 实例题(根据盒模型解释边距重叠) BFC边距重叠解决方案 (1)BFC的基本概念:b ...
- LaTeX技巧011:LaTtex中如何产生直立体希腊字母?
%\usepackage{upgreek}\upmu \uppi
- HBuilderX开发app实现自动更新版本
需求说明:使用MUI+Vue等技术并且通过HBuilderX打包开发移动app,在有版本更新时需要自动提示用户有新版本,并且可以点击下载自动安装. 思路说明: 应用打开时(使用Vue的生命周期mo ...
- 判断IE版本的HTML语句[if lte IE 9]……[endif]
我们常常会在网页的HTML里面看到形如[if lte IE 9]……[endif]的代码,表示的是限定某些浏览器版本才能执行的语句,那么这些判断语句的规则是什么呢?请看下文: <!--[if ! ...
- jQuery图片剪裁插件Cropper.js的使用
插件下载地址及文档说明 1.引入必要的js和css核心文件 <link rel="stylesheet" href="../css/cropper.css" ...
- 2019-08-10 纪中NOIP模拟B组
T1 [JZOJ1235] 洪水 题目描述 一天, 一个画家在森林里写生,突然爆发了山洪,他需要尽快返回住所中,那里是安全的. 森林的地图由R行C列组成,空白区域用点“.”表示,洪水的区域用“*”表示 ...