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 [题意] 给定一个字符串,问在字符串后最少添加多少个字母,得到的新字符串能是前 ...
随机推荐
- cin,cin.get(),cin.getline(),gets(),getchar()函数的用法
1.cin>> 用法a:最基本的流输入用法,接受一个数字或字符,自动跳过输入的空格. 用法b:接受一个字符串,但是遇到除开头外的空格则会终止输入. #include<iostream ...
- PAT 基础编程题目集 6-7 统计某类完全平方数 (20 分)
本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144.676等. 函数接口定义: int IsTheNumber ( const int N ); 其中 ...
- 51Nod 1284 2 3 5 7的倍数 (容斥定理)
给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数. 例如N = 10,只有1不是2 3 5 7的倍数. Input 输入1个数N(1 <= N <= 10^18). Outpu ...
- 金蝶云星空Python案例地址
https://club.kingdee.com/forum.php?mod=viewthread&tid=1235461
- Oracle 中关于 Group By 子句与多行函数嵌套搭配使用的注意事项
目录 你需要知道的 啥叫单行函数 啥叫多行函数 如何理解这个概念 Group by 子句使用规则 看一道 071 考题 你需要知道的 提到 Group by 子句,你需要先理解一个东西:函数的分类.提 ...
- RHEL 8 安装 Oracle 19c 注意问题
RedHat Enterprise Linux 8 版本静默安装 Oracle 数据库软件时,需注意的问题 来自博客园AskScuti 1. 提示缺少库文件 libnsl.so.1 2. 因着OS版本 ...
- C#调用C++类库例子
一.新建一个解决方案,并在解决方案下添加一个.netframework的项目,命名为FrameworkConsoleTest.再添加一个C++的动态链接库DLL项目,命名为EncryptBase. 二 ...
- java - 锁的种类及详解
锁类型 锁根据其特性能够划分出各种各样的锁类型,该文主要介绍以下锁的作用及特性 乐观锁/悲观锁 独享锁/共享锁 互斥锁/读写锁 可重入锁 公平锁/非公平锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 ...
- nginx proxy_set_header Host $host 和 proxy_set_header Host $http_host 的作用对比
转载自https://www.jianshu.com/p/7a8a7eb3707a 1.浏览器直接访问服务,获取到的 Host 包含浏览器请求的 IP 和端口 测试服务器,centos 7 sudo ...
- JS调用函数的两种方式
<script type="text/javascript"> window.onload = init; //onload 表示页面全部加载完毕后,再调用init() ...