题目: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. 【HANA系列】SAP HANA快捷键大全

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA快捷键大全   ...

  2. 剑指offer--day10

    1.1 题目:二叉搜索树的后序遍历序列:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 1.2 思路: 以{ ...

  3. 应用安全-安全设备-Waf系列-软Waf-安全狗(Safedog)

    安装 - Linux 下载 http://download.safedog.cn/safedog_linux64.tar.gz wget http://download.safedog.cn/safe ...

  4. static定义属性

    static关键字在Java程序开发过程中主要进行属性和方法的定义. static 定义属性: 类中的最主要的组成就是属性和方法,那么在说static之前,先看看一下问题: 范例:定义一个描述球的信息 ...

  5. 医院里的CR、DR、CT、磁共振、B超都是什么?

    转自 百度知道MR CT CR DR DSA X线 都事医学影像疾病诊断的一种. MRI 是磁共振影像检查,可以获得横断面,矢状面和冠状面的影像.空间分辩率好. CT 是一种X线诊断设备,是一种复杂的 ...

  6. 一个阿里云apache服务器配置两个或多个域名forLinux

    一个阿里云apache服务器配置两个或多个域名for Linux: 默认已经配置好了阿里云提供的一键web安装,可以参考:http://www.42iot.com/?id=8 修改/alidata/s ...

  7. HDU 6538 Neko and quadrilateral(极角排序+旋转坐标系)

    这道题简直太好了,对于计算几何选手需要掌握的一个方法. 首先对于求解四边形面积,我们可以将四边形按对角线划分成两个三角形,显然此时四边形的面积最大最小值就变成了求解里这个对角线最近最远的点对. 对于此 ...

  8. 扩展欧几里得算法详解(exgcd)

    一.前言 本博客适合已经学会欧几里得算法的人食用~~~ 二.扩展欧几里得算法 为了更好的理解扩展欧几里得算法,首先你要知道一个叫做贝祖定理的玄学定理: 即如果a.b是整数,那么一定存在整数x.y使得$ ...

  9. 攻防世界--key

    测试文件:https://adworld.xctf.org.cn/media/task/attachments/c6cf449ae4b7498eba5027c533386a40.exe 1.准备 获取 ...

  10. 利用python处理txt文件

    前段时间做公司一个自动翻译项目需要处理大量的文案字段,手工去做简直不大可能(懒),因此借用python脚本自动化处理掉了,在此记录一下. import linecache def outputfile ...