【枚举】【字符串哈希】Gym - 101164K - Cutting
给你A B两个串,让你切B串两刀,问你能否把切开的三个串拼成A。
哈希显然。
#include<cstdio>
#include<cstring>
using namespace std;
typedef unsigned long long ull;
const ull MOD1=2000000011;
const ull MOD2=1000000007;
const ull base1=10007;
const ull base2=10009;
int n;
char a[10010],b[10010]/*,d[10010],e[10010]*/;
ull b1s[10010],b2s[10010];
ull hs[3][10010];
const int c[7][4]={{0,0,0,0},{0,1,2,3},{0,1,3,2},{0,2,1,3},{0,2,3,1},{0,3,1,2},{0,3,2,1}};
int main(){
b1s[0]=b2s[0]=1;
scanf("%s%s",b+1,a+1);
// memcpy(d,b,sizeof(b));
// memcpy(e,a,sizeof(a));
n=strlen(a+1);
for(int i=1;i<=n;++i){
b1s[i]=b1s[i-1]*base1%MOD1;
b2s[i]=b2s[i-1]*base2%MOD2;
}
ull hs2[3]={0};
for(int i=1;i<=n;++i){
if(a[i]<='Z'){
a[i]+=32;
}
if(b[i]<='Z'){
b[i]+=32;
}
hs2[1]=(hs2[1]*base1%MOD1+b[i]-'a')%MOD1;
hs2[2]=(hs2[2]*base2%MOD2+b[i]-'a')%MOD2;
hs[1][i]=(hs[1][i-1]*base1%MOD1+a[i]-'a')%MOD1;
hs[2][i]=(hs[2][i-1]*base2%MOD2+a[i]-'a')%MOD2;
}
ull hs1[3][4];
int len[4];
len[0]=0;
for(int i=1;i<=n-2;++i){
for(int j=i+1;j<=n-1;++j){
len[1]=i;
len[2]=j-i;
len[3]=n-j; hs1[1][1]=hs[1][i];
hs1[1][2]=(hs[1][j]-hs[1][i]*b1s[len[2]]%MOD1+MOD1)%MOD1;
hs1[1][3]=(hs[1][n]-hs[1][j]*b1s[len[3]]%MOD1+MOD1)%MOD1;
hs1[2][1]=hs[2][i];
hs1[2][2]=(hs[2][j]-hs[2][i]*b2s[len[2]]%MOD2+MOD2)%MOD2;
hs1[2][3]=(hs[2][n]-hs[2][j]*b2s[len[3]]%MOD2+MOD2)%MOD2; for(int k=1;k<=6;++k){
if(((hs1[1][c[k][1]]*b1s[len[c[k][2]]+len[c[k][3]]]%MOD1+hs1[1][c[k][2]]*b1s[len[c[k][3]]]%MOD1)%MOD1+hs1[1][c[k][3]])%MOD1 == hs2[1] &&
((hs1[2][c[k][1]]*b2s[len[c[k][2]]+len[c[k][3]]]%MOD2+hs1[2][c[k][2]]*b2s[len[c[k][3]]]%MOD2)%MOD2+hs1[2][c[k][3]])%MOD2 == hs2[2]){
puts("YES");
for(int l=1;l<=3;++l){
if(c[k][l]==1){
for(int m=1;m<=len[1];++m){
putchar(a[m]);
}
}
else if(c[k][l]==2){
for(int m=len[1]+1,mm=1;mm<=len[2];++m,++mm){
putchar(a[m]);
}
}
else{
for(int m=len[1]+len[2]+1,mm=1;mm<=len[3];++m,++mm){
putchar(a[m]);
}
}
puts("");
}
return 0;
}
} }
}
puts("NO");
return 0;
}
【枚举】【字符串哈希】Gym - 101164K - Cutting的更多相关文章
- 【NOIP模拟】Grid(字符串哈希)
题目背景 SOURCE:NOIP2016-RZZ-1 T3 题目描述 有一个 2×N 的矩阵,矩阵的每个位置上都是一个英文小写字符. 现在需要从某一个位置开始,每次可以移动到一个没有到过的相邻位置,即 ...
- CF1056E Check Transcription 字符串哈希
传送门 暴力枚举\(0\)的长度,如果对应的\(1\)的长度也是一个整数就去check是否合法.check使用字符串哈希. 复杂度看起来是\(O(st)\)的,但是因为\(01\)两个数中数量较多的至 ...
- HASH 字符串哈希 映射转化
哈希HASH的本质思想类似于映射.离散化. 哈希,通过给不同字符赋不同的值.并且钦定一个进制K和模数,从而实现一个字符串到一个模意义下的K进制数上. 它的主要目的是判重,用于$DFS$.$BFS$判重 ...
- Codeforces Round #543 (Div. 2) F dp + 二分 + 字符串哈希
https://codeforces.com/contest/1121/problem/F 题意 给你一个有n(<=5000)个字符的串,有两种压缩字符的方法: 1. 压缩单一字符,代价为a 2 ...
- 【CodeForces】961 F. k-substrings 字符串哈希+二分
[题目]F. k-substrings [题意]给定长度为n的串S,对于S的每个k-子串$s_ks_{k+1}...s_{n-k+1},k\in[1,\left \lceil \frac{n}{2} ...
- 【BZOJ3555】企鹅QQ(字符串哈希)
[BZOJ3555]企鹅QQ(字符串哈希) 题面 BZOJ 题解 把前缀哈希一下,后缀哈希一下 枚举哪个位置不选,然后检查一下相同就行了.. 为什么我的\(Hash\)老是\(WA\), 为什么\(Z ...
- UVA - 11475 Extend to Palindrome —— 字符串哈希 or KMP or 后缀数组
题目链接:https://vjudge.net/problem/UVA-11475 题意: 给出一个字符串,问在该字符串后面至少添加几个字符,使得其成为回文串,并输出该回文串. 题解: 实际上是求该字 ...
- Luogu P4503 [CTSC2014]企鹅QQ(字符串哈希)
P4503 [CTSC2014]企鹅QQ 题面 题目背景 \(PenguinQQ\) 是中国最大.最具影响力的 \(SNS(Social Networking Services)\) 网站,以实名制为 ...
- HDU 1880 魔咒词典(字符串哈希)
题目链接 Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一 ...
随机推荐
- OpenCVSSDpython目标探测对象检测
1.请参考大牛博客链接 https://www.aiuai.cn/aifarm822.html
- bzoj 1912 tree_dp
这道题我们加一条路可以减少的代价为这条路两端点到lca的路径的长度,相当于一条链,那么如果加了两条链的话,这两条链重复的部分还是要走两遍,反而对答案没有了贡献(其实这个可以由任意两条链都可以看成两条不 ...
- bzoj 1084 DP
首先对于m==1的情况非常容易处理(其实这儿因为边界我错了好久...),直接DP就好了,设f[i][k]为这个矩阵前i个选k个矩阵的最大和,那么f[i][k]=max(f[j][k-1]+sum[j+ ...
- eCharts_数据过多底部滚动条实现数据展示
效果图: 实现原理: 1.添加dataZoom属性 效果实现代码: <!DOCTYPE html> <html> <head> <meta charset=& ...
- js函数定义方法
1.函数声明 其语法为 function functionName(){ //函数体 } 首先是function关键字,然后是函数名,其重要特征是函数声明提升,即在执行代码之前会先读取函数声明,使其在 ...
- Struts2+Hibernate实现图书管理系统
效果图 部分代码 Books.java package entity; import java.util.Date; public class Books { //书籍编号 private Strin ...
- 2017-2018-1 20179205《Linux内核原理与设计》第五周作业
<Linux内核原理与设计>第五周作业 视频学习及操作分析 一.用户态.内核态和中断 内核态在CPU执行中对应高执行级别,执行级别为0级,具有特权指令,可以访问任意物理地址:用户态执行级别 ...
- 使用IDEA从github中下载fastdfs-client-java
由于在pom文件中加入依赖坐标无法将fastdfs-client-java下载下来,后来通过查资料,发现在中央仓库中没有定义该坐标.为此,使用idea从github下载fastdfs-client-j ...
- 流程控制--while
/* while 是在有条件控制的情况下 进行的循环 */ [root@localhost test1]# vim .py //ADD #!/usr/bin/python n = while True ...
- vim常用命令(复习版)(转)
原文链接:http://blog.csdn.net/love__coder/article/details/6739670 1.光标移动 上:k 下:j 左:l 『字母L小写』 右:h 上一行行首:- ...