首页 > 其他分享 >KMP循环节

KMP循环节

时间:2024-10-09 22:49:02浏览次数:5  
标签:ll KMP 循环 ans 长度 define

KMP循环节 在icpc

2019 China Collegiate Programming Contest Qinhuangdao Onsite J. MUV LUV EXTRA


由题易得,要求这个数的小数部分的\(S=a×循环长度−b×循环节的长度\),让这个S尽可能的大。
又因为对于循环长度我们可以用kmp算法来求出最小循环节,所以我们可以枚举循环长度去找最小的S.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
#define pii pair<int, int>
#define all(a) a.begin(), a.end()
#define debug(x) cout << #x << " = " << x << endl
#define sz(a) ((int)a.size())
const int mod = 998244353, N = 2e7 + 10, G = 3;
ll ne[N];
void get_Next(string s, ll next[])
{
    int j = 0;
    next[0] = 0; 
    for (int i = 1; i < s.length(); i++)
    { 
        while (j > 0 && s[i] != s[j])
            j = next[j - 1]; 
        if (s[i] == s[j])
            j++;     
        next[i] = j; 
    }
}

void solve()
{
    ll a, b;
    cin >> a >> b;
    string s;
    cin >> s;
    ll l = s.length();
    reverse(all(s));
    get_Next(s, ne);
    ll ans = -1e18;
    for (int i = 0; i < l; i++)
    {
        if (s[i] == '.')
            break;
        ans = max(ans, 1ll * a * (i + 1) - 1ll * b * (i + 1 - ne[i]));
    }
    cout << ans << endl;
}

int main()
{
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int t = 1;
    while (t--)
    {
        solve();
    }
    return 0;
}

标签:ll,KMP,循环,ans,长度,define
From: https://www.cnblogs.com/-3449/p/18455354

相关文章

  • 深度学习:循环神经网络RNN
    目录一、神经网络的历程1.传统神经网络存在的问题2.提出一种新的神经网络二、RNN基本结构1.RNN基本结构2.RNN的独特结构3.RNN的局限性一、神经网络的历程1.传统神经网络存在的问题无法训练出具有顺序的数据。模型搭建时没有考虑数据上下之间的关系。因为传统神经网......
  • 实验2_C语言分支与循环基础应用编程
    实验一#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1397#defineN2476#defineN321intmain(){intcnt;intrandom_major,random_no;srand(time(NULL));cnt=0;while(cnt<N){......
  • 实验2 C语言分支与与循环基础应用编程——1
    一、实验目的1.能正确使用if语句实现分支结构2.能正确使用while语句、do...while语句实现循环结构3.能在具体问题场景中正确区分、使用continue和break4.能灵活、组合使用c语句编程解决简单应用问题 二、实验准备1.分支语句if和循环语句while、do...while的用法......
  • 实验二 C语言分支与循环基础应用编程
    实验二C语言分支与循环基础应用编程实验任务1——抽学号#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1397#defineN2476#defineN321intmain(){ intcnt; intrandom_major,random_no; srand(time(NULL));//以当前系统......
  • 洛谷题单指南-字符串-P3375 【模板】KMP
    原题链接:https://www.luogu.com.cn/problem/P3375题意解读:给定两个字符串:原串s,模式串p,求p在s中出现的所有位置,并输出p的长度为1~p.size()的子串的最长相同真前、后缀的长度。解题思路:KMP模版题,分两问,第一问通过KMP核心算法实现,第二问输出模式串的Next数组内容,接下来一一解读。......
  • 《神经网络》—— 循环神经网络RNN(Recurrent Neural Network)
    文章目录一、RNN简单介绍二、RNN基本结构1.隐藏中的计算2.输出层的计算3.循环三、RNN优缺点1.优点2.缺点一、RNN简单介绍循环神经网络(RecurrentNeuralNetwork,RNN)是一种用于处理序列数据的神经网络架构。与传统的前馈神经网络(FeedforwardNeuralNetwork......
  • RNN(循环神经网络)简介及应用
    一、引言在深度学习领域,神经网络被广泛应用于各种任务,从图像识别到语音合成。但对于序列数据处理的任务,如自然语言处理(NLP)、语音识别或时间序列预测等,传统的前馈神经网络(FeedforwardNeuralNetworks)显得力不从心。这是因为序列数据中存在着时间上的依赖关系,即序列中的每个元......
  • java学习笔记3-高级循环-练习题
    黑马java有关数组的几道感觉比较难的题目,记录一下。第一题现有一个整数数组,数组中的每个元素都是[0-9]之间的数字,从数组的最大索引位置开始到最小索引位置,依次表示整数的个位、十位、百位。。。依次类推。请编写程序计算,这个数组所表示的整数值。例如:数组:{2,1,3,5,4}......
  • 实验2 C语言分支与循环基础应用编程-1
    任务一#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1397#defineN2476#defineN321intmain(){intcnt;intrandom_major,random_no;srand(time(NULL));//以当前系统时间作为随机种子cnt=0;......
  • C++——将一个数组中的数循环左移两位,例如:数组中原来的数为:1 2 3 4 5,移动后变成 3 4 5
    没注释的源代码#include<iostream>usingnamespacestd;intmain(){   inta,b[100];   cout<<"请输入数组个数:";   cin>>a;   cout<<"请输入"<<a<<"个数组:";   for(inti=0;i<a;i++)   {       cin&......