Leecoder466 Count The Repetitons
Leecoder466 Count The Repetitons
题目大意
定义\([s,n]\)为连续\(n\)个串\(s\)构成的串
现在给定\(s_1,n_1,s_2,n_2\),求最大的\(m\)满足\([[s_2,n_2],m]\)是\([s_1,n_1]\)的子序列
\(|s_1|,|s_2| \le 100,n_1,n_2\le 10^6\)
首先,\([s_2,n_2]\)我们是不能直接求出来的
但是很明显\([[s_2,n_2],m] = [s_2,n_2m]\)
所以现在我们只需要求最大的\(m'\)使得\([s_2, m']\)为\([s_1,n_1]\)的子序列
那么就有
\]
我们发现,直接求\(m'\)是不容易实现的,因为他的上界很大,可能到达$\frac{|s_1| \times n_1}{n_2} $
考虑把\(m'\)二进制分解之后分位贪心
设\(f_{i,j}\)表示从\(s_1\)的第\(i\)位开始匹配\(2^j\)个\(s_2\)需要的字符个数
那么则有
\]
至于\(f_{i,0}\)我们可以使用最朴素的算法,直接暴力匹配,
注意判断无解的情况直接输出\(0\)就好了
这样我们就预处理完了
求答案就直接暴力枚举开头位置
然后利用倍增数组从高位向低位贪心,另外当前用了多少字符的初始值应该是\(i\)而不是\(0\)
class Solution {
int len1,len2;
char s1[505],s2[505];
long long f[31][505];
public:
int getMaxRepetitions(string S1, int n1, string S2, int n2) {
memset(f,0,sizeof(f));
len1 = S1.size();
len2 = S2.size();
for(int i = 0;i < len1;++i) s1[i] = S1[i];
for(int i = 0;i < len2;++i) s2[i] = S2[i];
// printf("%d %d\n",len1,len2);
for(int i = 0;i < len1;++i){
int pos = i;
for(int j = 0;j < len2;++j){
int cnt = 0;
while(s1[pos] != s2[j]){
pos = (pos + 1) % len1;
if(++cnt >= len1) return 0;
}
pos = (pos + 1) % len1;
f[0][i] += cnt + 1;
}
}
// for(int i = 0;i < len1;++i)printf("%d ",f[0][i]);puts("");
for(int j = 1;j <= 30;++j){
for(int i = 0;i < len1;++i){
f[j][i] = f[j - 1][i] + f[j - 1][(i + f[j - 1][i]) % len1];
}
}
long long ans = 0;
for(int i = 0;i < len1;++i){
long long t = i,sum = 0;
for(int j = 30;j >= 0;--j){
if((t + f[j][t % len1]) <= (len1) * n1){
t += f[j][t % len1];
sum += 1 << j;
}
}
//printf("%d %lld\n",i,sum);
ans = max(ans,sum);
}
return ans / n2;
}
};
Leecoder466 Count The Repetitons的更多相关文章
- nodejs api 中文文档
文档首页 英文版文档 本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可. Node.js v0.10.18 手册 & 文档 索引 | 在单一页面中浏览 | JSON格 ...
- C#中Length和Count的区别(个人观点)
这篇文章将会很短...短到比你的JJ还短,当然开玩笑了.网上有说过Length和count的区别,都是很含糊的,我没有发现有 文章说得比较透彻的,所以,虽然这篇文章很短,我还是希望能留在首页,听听大家 ...
- [PHP源码阅读]count函数
在PHP编程中,在遍历数组的时候经常需要先计算数组的长度作为循环结束的判断条件,而在PHP里面对数组的操作是很频繁的,因此count也算是一个常用函数,下面研究一下count函数的具体实现. 我在gi ...
- EntityFramework.Extended 实现 update count+=1
在使用 EF 的时候,EntityFramework.Extended 的作用:使IQueryable<T>转换为update table set ...,这样使我们在修改实体对象的时候, ...
- 学习笔记 MYSQL报错注入(count()、rand()、group by)
首先看下常见的攻击载荷,如下: select count(*),(floor(rand(0)*2))x from table group by x; 然后对于攻击载荷进行解释, floor(rand( ...
- count(*) 与count (字段名)的区别
count(*) 查出来的是:结果集的总条数 count(字段名) 查出来的是: 结果集中'字段名'不为空的记录的总条数
- BZOJ 2588: Spoj 10628. Count on a tree [树上主席树]
2588: Spoj 10628. Count on a tree Time Limit: 12 Sec Memory Limit: 128 MBSubmit: 5217 Solved: 1233 ...
- [LeetCode] Count Numbers with Unique Digits 计算各位不相同的数字个数
Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. Examp ...
- [LeetCode] Count of Range Sum 区间和计数
Given an integer array nums, return the number of range sums that lie in [lower, upper] inclusive.Ra ...
随机推荐
- Liferay OSGi注解(Annotation) - 使用手册(译文)
mark过来好好用 上Neil的博客地址Liferay OSGi注解(Annotation) - 使用手册(译文) @Component是注入服务 @Reference是获取服务(在Liferay框架 ...
- QPS 提升60%,揭秘阿里巴巴轻量级开源 Web 服务器 Tengine 负载均衡算法
前言 在阿里七层流量入口接入层(Application Gateway)场景下, Nginx 官方的Smooth Weighted Round-Robin( SWRR )负载均衡算法已经无法再完美施展 ...
- android GUI 流程记录
ViewRootImpl 与 wms ViewRootImple里的 WindowSeesion是WindowManagerService的proxy, 通过这个句柄来调用WMS的功能而W是 wms用 ...
- Linux下的python安装
centos7安装python3 以及tab补全功能 1.安装python3 1.1下载python源码包 网址:https://www.python.org/downloads/release/ ...
- Go语言开发教程
Go语言简述 兴起:2009年Gogle发布的第二款开源编程语言 特征: 语法简单:语法标准比较严格,适合开发人员短时间高效的服务端开发. 并发模型:Goroutine是Go最显著的特征,使用类协程的 ...
- poj1087&&hdu1526 最大流
多源多汇. 比较明显的建图.对于电器,可以从源点与各个电器相连,容量为1,表示这个电器有1个,然后对于各种接头,那可以各个接头与汇点相连,容量为1,表示每个接头只能用一次. 然后对于能够相互转换的接头 ...
- 随机数专题 Day08
package com.sxt.arraytest2; import java.util.Arrays; /* * 随机数专题 * Math类的random()方法 * m~n的随机数 * 公式:(i ...
- 【牛腩视频】之SQL触发器 标签: 数据库 2015-05-23 09:44 1339人阅读 评论(40) 收藏
之前在学习机房管理系统.net版的时候,已经写过了关于数据库的操作,但是现在开始学习牛腩,才发现之前自己理解的太浅显,很多东西看似好像会了,不去实际操作一下,不把代码从头到尾敲出来,到头来还是不会,所 ...
- SDUT-2772_数据结构实验之串一:KMP简单应用
数据结构实验之串一:KMP简单应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定两个字符串string1和str ...
- oracle函数 CHR(n1)
[功能]:将ASCII 码转换为字符. [参数]:n1,为0 ~ 255,整数 [返回]:字符型 [示例] SQL> select chr(54740) zhao,chr(65) chr65 f ...