CH5702 Count The Repetitions
题意
5702 Count The Repetitions 0x50「动态规划」例题
描述
定义 conn(s,n) 为 n 个字符串 s 首尾相接形成的字符串,例如:
conn("abc",2)="abcabc"
称字符串 a 能由字符串 b 生成,当且仅当从字符串 b 中删除某些字符后可以得到字符串 a。例如“abdbec”可以生成“abc”,但是“acbbe”不能生成“abc”。
给定两个字符串 s_1 和 s_2,以及两个整数 n_1 和 n_2,求一个最大的整数 m,满足conn(conn(s_2,n_2 ),m) 能由 conn(s_1,n_1) 生成。
s_1 和 s_2 长度不超过100,n_1 和 n_2 不大于 10^6。
输入格式
本题只有1个测试点,包含多组数据。每组数据由2行组成,第一行是s2,n2,第二行是s1,n1。
输出格式
对于每组数据输出一行表示答案m。
样例输入
ab 2
acb 4
acb 1
acb 1
aa 1
aaa 3
baab 1
baba 11
aaaaa 1
aaa 20
样例输出
2
1
4
7
12
来源
https://leetcode.com/problems/count-the-repetitions/description/
</article>
分析
发现可以求出最大的m',满足conn(s2,m')能由conn(s1,n1)生成,那么答案m=m'/n2。
由于m'≤1e8不能直接F[i,j]表示从s1[i]开始要多少字符生成conn(s2,j),观察到m'可以用二进制拆分,所以利用倍增优化。
设F[i,j]表示从s1[i]开始至少需要多少字符才能生成conn(s2,\(2^j\))。状态转移方程为:
\]
可以暴力预处理F[i,0]。总时间复杂度\(O(|s_2||s_1|^2+|s_1|\log(|s_1|*n_1/|s_2|))\)
代码
#include<bits/stdc++.h>
#define rg register
#define il inline
#define co const
typedef long long ll;
using namespace std;
string s1,s2;
int n1,n2;
ll f[100][28];
void Count_the_Repetitions(){
for(int i=0;i<s1.size();++i){
int pos=i;
f[i][0]=0;
for(int j=0;j<s2.size();++j){
int cnt=0;
while(s1[pos]!=s2[j]){
pos=(pos+1)%s1.size();
if(++cnt>=s1.size()) return cout<<0<<endl,void();
}
pos=(pos+1)%s1.size(),f[i][0]+=cnt+1;
}
}
for(int j=1;j<=27;++j)
for(int i=0;i<s1.size();++i)
f[i][j]=f[i][j-1]+f[(i+f[i][j-1])%s1.size()][j-1];
ll m=0;
for(int st=0;st<s1.size();++st){
ll x=st,ans=0;
for(int k=27;k>=0;--k)
if(x+f[x%s1.size()][k]<=s1.size()*n1)
x+=f[x%s1.size()][k],ans+=1<<k;
m=max(m,ans);
}
cout<<m/n2<<endl;
}
int main(){
ios::sync_with_stdio(0);
while(cin>>s2>>n2>>s1>>n1) Count_the_Repetitions();
return 0;
}
CH5702 Count The Repetitions的更多相关文章
- CH5702 Count The Repetitions[倍增dp]
http://contest-hunter.org:83/contest/0x50%E3%80%8C%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E3%80%8D%E4%B ...
- [Swift]LeetCode466. 统计重复个数 | Count The Repetitions
Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...
- 466. Count The Repetitions
Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...
- [LeetCode] Count The Repetitions 计数重复个数
Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...
- Leetcode: Count The Repetitions
Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...
- 【leetcode 字符串】466. Count The Repetitions
https://leetcode.com/problems/count-the-repetitions/description/ 找循环节 https://www.cnblogs.com/grandy ...
- 第七周 Leetcode 466. Count The Repetitions 倍增DP (HARD)
Leetcode 466 直接给出DP方程 dp[i][k]=dp[i][k-1]+dp[(i+dp[i][k-1])%len1][k-1]; dp[i][k]表示从字符串s1的第i位开始匹配2^k个 ...
- [LeetCode] 466. Count The Repetitions 计数重复个数
Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...
- LeetCode466. Count The Repetitions
题目链接 传送门 题意 定义一个特殊的串, 现在给出串S1和S2的参数, 问: S2最多可以多少个连接起来扔是S1的子序列, 求出这个最大值 解题思路 注意s1与S1的区别, 可以去看题目描述, 预处 ...
随机推荐
- codeforce 955c --Sad powers 思路+二分查找
这一题的题意是 定义一个数,该数特点是为a的p次方 (a>0,p>1) 再给你n个询问,每个询问给出一个区间,求区间内该数的数目. 由于给出的询问数极大(10e5) 所以,容易想到应该 ...
- MyBatis mapper parameterType
1. 传入简单类型 JAVA代码: public User get(Long id) { return (User) getSqlSession().selectOne("com.liu ...
- svg(二)---半瓶子晃荡
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 康拓展开-排列的hash
对于一个集合内所有元素的排列,康拓展开是一个无冲突的hash法.其规则便是将排列在逻辑上排好序,然后每个排列的序号即是hash值. 关键就在如何快速求出序号和快速还原啦. 首先我们确定一好集合内各元素 ...
- grpc(三)之grpc客户端使用连接池
本文使用commons-pool2来实现连接池应用 1.定义一个产生连接池的工厂,需要继承BasePooledObjectFactory,其用处是生产和销毁连接池中保存的对象.根据需求,现在池子里保存 ...
- jquery+jquery.rotate实现图片旋转效果
首先要下载jquery.min.js 和jquery.rotate.js文件 1.下载地址: https://www.jb51.net/jiaoben/554113.html 2.导入文件 <s ...
- let,const 声明的变量不会绑定给window对象 而var会
先来看一道题 let id = 2; let json = { id: 1, show:function(){ setTimeout(function(){ console.log(this.id); ...
- coursera-斯坦福-机器学习-吴恩达-笔记week1
1 Introduction 1.1 概念:一个程序被认为能从经验E中学习,解决任务 T,达到性能度量值P,当且仅当, 有了经验E后,经过P评判, 程序在处理 T 时的性能有所提升. 1.2 机器学习 ...
- linux c使用socket进行http 通信,并接收任意大小的http响应(五)
http.c data2.c http_url.c http.h data2.h http_url.h主要实现的功能是通过URL结构体来实现HTTP通信,你可以把这三个文件独立出来,作为HTTP通信模 ...
- 如何破解MyEclipse 10.x
本文以MyEclipse Professional 10.6 为例来介绍如何破解MyEclipse 10.x. 本文使用的破解补丁对MyEclipse Standard/ Professional/ ...