题目: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的更多相关文章

  1. CF1056E Check Transcription 字符串哈希

    传送门 暴力枚举\(0\)的长度,如果对应的\(1\)的长度也是一个整数就去check是否合法.check使用字符串哈希. 复杂度看起来是\(O(st)\)的,但是因为\(01\)两个数中数量较多的至 ...

  2. Codeforces1056E.Check Transcription(枚举+Hash)

    题目链接:传送门 题目: E. Check Transcription time limit per test seconds memory limit per test megabytes inpu ...

  3. CodeForces 1056E - Check Transcription - [字符串hash]

    题目链接:https://codeforces.com/problemset/problem/1056/E One of Arkady's friends works at a huge radio ...

  4. 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 ...

  5. Mail.Ru Cup 2018 Round 3 Solution

    A. Determine Line Water. #include <bits/stdc++.h> using namespace std; ]; int main() { while ( ...

  6. -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HO 解决办法

    最近在使用maven,项目测试的时候出现了这么一个错.-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2 ...

  7. SQL Server 合并复制遇到identity range check报错的解决

        最近帮一个客户搭建跨洋的合并复制,由于数据库非常大,跨洋网络条件不稳定,因此只能通过备份初始化,在初始化完成后向海外订阅端插入数据时发现报出如下错误: Msg 548, Level 16, S ...

  8. SharePoint 2103 Check user permission on list

    一.需求: check user 对SharePoint list 的permission 代码如下: private static string GetListPermission(SPList l ...

  9. 用SVN check out项目后第三方库丢失

    曾经用Cornerstone check out 一份项目下来,但其中第三方.a库始终丢失,项目报错,研究后找到了以下解决方法: 首先,Xcode默认忽略.a 文件.所以无法提交到svn服务器,但是很 ...

随机推荐

  1. C#之委托(二)

    其实在上一篇委托(一)中,创建委托还是太繁琐了点.代码量过多,可能会妨碍我们对代码和逻辑的理解.有些时候可能处理逻辑的代码都笔声明委托的代码要少,这就不可避免的增加了重复代码的量.所以在c#2中极大的 ...

  2. mysql恢复备份导出

    MySQL-5.7 备份与恢复   一.备份分类 按介质分类: 物理备份指通过拷贝数据库文件方式完成备份,适用于数据库很大,数据重要且需要快速恢复的数据库. 逻辑备份指通过备份数据库的逻辑结构和数据内 ...

  3. UVa 11582 Colossal Fibonacci Numbers! 紫书

    思路是按紫书上说的来. 参考了:https://blog.csdn.net/qwsin/article/details/51834161  的代码: #include <cstdio> # ...

  4. 20191105 《Spring5高级编程》笔记-第10章

    第10章 使用类型转换和格式化进行验证 在应用程序开发中,数据验证通常与转换和格式化一起被提及.因为数据源的格式很可能与应用程序中所使用的格式不同. 名词缩写: SPI(Service Provide ...

  5. js之模板方法模式

    模板方法模式的定义和组成: 模板方法模式是一种只需使用继承就可以实现的非常简单的模式. 模板方法模式由两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类.通常在抽象父类中封装了子类的算法框架 ...

  6. 前端 CSS的选择器 属性选择器

    属性选择器,字面意思就是根据标签中的属性,选中当前的标签. 属性选择器 通常在表单控件中 使用比较多 根据属性查找 /*用于选取带有指定属性的元素.*/ <!DOCTYPE html> & ...

  7. HTML5-video(播放暂停视频;打开关闭声音;进度条)

    <!DOCTYPE html> <html> <head> <title>HTML5-video(播放暂停视频:打开关闭声音:进度条)</titl ...

  8. 一步一步玩控件:自定义TabControl——从山寨Safari开始

    作者:野比 (conmajia@gmail.com) 时间:May, 2012 封面图片为野比原创,请勿未经允许私自引用 #1-1 嗯,各位,又是我,生物钟颠倒的家伙. 今天我要山寨的是大名鼎鼎的Ap ...

  9. addEventListener 的三个参数

    addEventListener 有三个参数:第一个参数表示事件名称(不含 on,如 "click"):第二个参数表示要接收事件处理的函数:第三个参数为 useCapture,本文 ...

  10. C++11常用特性总结

    非原创,转载出处 http://www.cnblogs.com/feng-sc C++11已经出来很久了,网上也早有很多优秀的C++11新特性的总结文章,在编写本博客之前,博主在工作和学习中学到的关于 ...