题目: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. Java 之 回调方法

    打个比方,我们点外卖都有到达提醒的服务,顾客自己选择提醒的方式.可以是电话提醒.短信提醒.也可以敲门提醒,这里,“提醒”这个行为是美团或饿了么这样的平台提供的,相当于库函数,但是提醒的方式是由顾客决定 ...

  2. (4.31)quotename函数

    操作sql server尤其是写存储过程时,要用到各种各样的函数,今天就总结一个quotename()的用法. 1.语法: quotename(‘character_string’[,‘quote_c ...

  3. MySQL-第十一篇JDBC典型用法

    1.JDBC常用方式      1>DriverManager:管理JDBC驱动的服务类.主要用于获取Connection.其主要包含的方法: public static synchronize ...

  4. hdu-2389.rain on your parade(二分匹配HK算法)

    Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 655350/165535 K (Java/Ot ...

  5. java学习day3运算符

    一.算数运算符 1.对于除号“/”,它的整数除和小数除是有区别的:当整数除以整数的时候,会把结果的小数部分舍弃,只保留整数部分,例如: int x=3510; x=x/1000; 输出结果为x=3; ...

  6. [AHOI2013]作业 (莫队+分块)

    [AHOI2013]作业 (莫队+分块) 题面 给定了一个长度为n的数列和若干个询问,每个询问是关于数列的区间[l,r],首先你要统计该区间内大于等于a,小于等于b的数的个数,其次是所有大于等于a,小 ...

  7. docker pull使用 代理

    [root@fdfs- ~]# cat /usr/lib/systemd/system/docker.service [Unit] Description=Docker Application Con ...

  8. python 二维数组转一维数组

    三种方法 比如 a = [[1, 2], [3, 4], [5, 6]] 列表推导式 [i for j in a for i in j] 库函数 from itertools import chain ...

  9. 5105 pa3 Distributed File System based on Quorum Protocol

    1 Design document 1.1 System overview We implemented a distributed file system using a quorum based ...

  10. SQL 常用语句(一)

    --SQL 语句为表添加字段并设置默认值 alter table TableName add ColumnName int --字段类型 not null --是否为空 --默认值 --SQL 语句为 ...