[CF1056E]Check Transcription
题目:Check Transcription
传送门:http://codeforces.com/contest/1056/problem/E
分析:
1)显然有个$O( \frac{t}{max(cnt_0,cnt_1)}*t)$暴力:枚举替代$0$的字符串,计算替代$1$的字符串长度,判断是否可行。
2)我们字符串匹配不必一个一个字符比较,可以用哈希。这样复杂度就降为了$O( \frac{t}{max(cnt_0,cnt_1)}*s)$,由于$max(cnt_0,cnt_1)>=\frac{s}{2}$,这样复杂度就大约是$O(t)$
3)哈希基于概率,有可能会冲突,简单的做法是双哈希,就是这么暴力,如果还不行,那就再来一遍。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
const int maxN=1e6+;
const ULL HAP[]={,};
ULL ts[][],fac[][maxN],Ha[][maxN];
char s[maxN],t[maxN];
int ans,cnt[];
bool check(int op,int l,int r){
bool pd=true;
for(int j=;j<;++j)
pd&=ts[op][j]==Ha[j][r]-Ha[j][l-]*fac[j][r-l+];
return pd;
}
void HashInit(int n){
for(int j=;j<;++j){
fac[j][]=;for(int i=;i<=n;++i)fac[j][i]=fac[j][i-]*HAP[j];
for(int i=;i<=n;++i)Ha[j][i]=Ha[j][i-]*HAP[j]+t[i];
}
}
int main(){
scanf("%s%s",s+,t+);
int ls=strlen(s+),lt=strlen(t+);
for (int i=;i<=ls;++i)++cnt[s[i]-''];
HashInit(lt);
for (int l0=,l1;l0*cnt[]<lt;++l0)if ((lt-l0*cnt[])%cnt[]==){
l1=(lt-l0*cnt[])/cnt[];
bool p0=,p1=,p=;int k=;
for(int i=;i<=ls;++i){
if (!p) break;
if (s[i]==''){
if(p0){
p0=;
for(int j=;j<;++j)ts[][j]=Ha[j][k+l0-]-Ha[j][k-]*fac[j][l0];
if(!p1 && l0==l1) p=!check(,k,k+l0-);
}else p=check(,k,k+l0-);
k+=l0;
}else{
if(p1){
p1=;
for(int j=;j<;++j)ts[][j]=Ha[j][k+l1-]-Ha[j][k-]*fac[j][l1];
if(!p0 && l0==l1) p=!check(,k,k+l1-);
}else p=check(,k,k+l1-);
k+=l1;
}
}
if (p) ++ans;
}
printf("%d",ans);
return ;
}
[CF1056E]Check Transcription的更多相关文章
- CF1056E Check Transcription 字符串哈希
传送门 暴力枚举\(0\)的长度,如果对应的\(1\)的长度也是一个整数就去check是否合法.check使用字符串哈希. 复杂度看起来是\(O(st)\)的,但是因为\(01\)两个数中数量较多的至 ...
- Codeforces1056E.Check Transcription(枚举+Hash)
题目链接:传送门 题目: E. Check Transcription time limit per test seconds memory limit per test megabytes inpu ...
- CodeForces 1056E - Check Transcription - [字符串hash]
题目链接:https://codeforces.com/problemset/problem/1056/E One of Arkady's friends works at a huge radio ...
- CF1056:Check Transcription(被hack的hash)
One of Arkady's friends works at a huge radio telescope. A few decades ago the telescope has sent a ...
- Mail.Ru Cup 2018 Round 3 Solution
A. Determine Line Water. #include <bits/stdc++.h> using namespace std; ]; int main() { while ( ...
- -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HO 解决办法
最近在使用maven,项目测试的时候出现了这么一个错.-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2 ...
- SQL Server 合并复制遇到identity range check报错的解决
最近帮一个客户搭建跨洋的合并复制,由于数据库非常大,跨洋网络条件不稳定,因此只能通过备份初始化,在初始化完成后向海外订阅端插入数据时发现报出如下错误: Msg 548, Level 16, S ...
- SharePoint 2103 Check user permission on list
一.需求: check user 对SharePoint list 的permission 代码如下: private static string GetListPermission(SPList l ...
- 用SVN check out项目后第三方库丢失
曾经用Cornerstone check out 一份项目下来,但其中第三方.a库始终丢失,项目报错,研究后找到了以下解决方法: 首先,Xcode默认忽略.a 文件.所以无法提交到svn服务器,但是很 ...
随机推荐
- Python 使用openpyxl导出Excel表格的时候,使用save()保存到指定路径
在使用openpyxl导出Excel表格的使用,如何指定导出的路径呢. 使用sava(filename),会保存到当前执行文件的路径下. 使用sava("/tmp/{}.xlsx" ...
- 在layui中,新的页面怎么获取另一个页面传过来的数据,并可以对数据进行判断,layui中的后台分页(table)。
例如:打开一个新页面的同时,传数据. layer.open({ type: 2, title: '新增项目', shadeClose: false, shade: [0.3], maxmin: tru ...
- Flutter修改状态栏颜色以及字体颜色
Flutter沉浸式状态栏 void main() { runApp(MyApp()); if (Platform.isAndroid) { // 以下两行 设置android状态栏为透明的沉浸.写在 ...
- jquery点击来回切换
做个笔记偶尔用有时记不住 方法一: <div id="test"> test </div> $('#test').mouseover(function () ...
- 在SSIS 的 64 位版本中不支持 Excel 连接管理器[转]
Microsoft sql server 2008 R2——> SQL SERVER Business Intelligence Development Studio 使用EXCEL数据源或目标 ...
- String hashCode 这个数字,很多人不知道!
作者:coolblog segmentfault.com/a/1190000010799123 1. 背景 某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 ...
- Ubuntu 中查找软件安装的位置
Ubuntu 中查找软件安装的位置 执行该程序 直接执行该程序,有时候一些程序执行时会显示出自己的位置,比如: 用命令 ps -e 找到该程序的名字 用 find 或 whereis 命令查找文件位置 ...
- 《图解HTTP》阅读总结
前言:<图解HTTP>是一本图文并茂的好书,讲解地很详尽.目前我只完整地读了一遍,很多地方知其然不知其所以然,接下来打算抽空再读一次.这篇博文只是做个粗略记录,第二遍读完会再来编辑细化. ...
- Linux性能优化从入门到实战:06 CPU篇:快速定位CPU瓶颈
CPU性能指标 (1)CPU使用率:1) 用户态CPU使用率(包括用户态 user 和低优先级用户态 nice).2) 系统CPU使用率.3) 等待 I/O 的CPU使用率.4) 软中断和硬 ...
- python中常用的时间操作
python中常用的时间模块有time和datetime,以下是这两个模块中常用的方法: #先引入模块 import timefrom datetime import datetiem, timezo ...