题意:给你两个字符串a,b,不区分大小写,将b分成三段,重新拼接,问是否能得到A;

思路:暴力枚举两个断点,然后check的时候需要字符串hash,O(1)复杂度N*N;

题目链接:传送门

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<queue>
#include<algorithm>
#include<stack>
#include<cstring>
#include<vector>
#include<list>
#include<set>
#include<map>
using namespace std;
#define LL long long
#define pi (4*atan(1.0))
#define eps 1e-8
#define bug(x) cout<<"bug"<<x<<endl;
const int N=5e3+,M=2e6+,inf=1e9+;
const LL INF=1e18+,mod=1e9+; string a,b,c;
unsigned int ma[N][N],mc[N][N];
int check(int l1,int r1,int l2,int r2,int l3,int r3)
{
int s=,e=r1-l1;
if(ma[s][e]!=mc[l1][r1])return ;
s=e+,e=s+r2-l2;
if(ma[s][e]!=mc[l2][r2])return ;
s=e+,e=s+r3-l3;
if(ma[s][e]!=mc[l3][r3])return ;
return ;
}
void output(int l1,int r1,int l2,int r2,int l3,int r3)
{
for(int i=l1;i<=r1;i++)
printf("%c",b[i]);
printf("\n");
for(int i=l2;i<=r2;i++)
printf("%c",b[i]);
printf("\n");
for(int i=l3;i<=r3;i++)
printf("%c",b[i]);
printf("\n");
}
int main()
{
cin>>a>>b;
int n=a.size();c="";
for(int i=;i<n;i++)
if(a[i]>='A'&&a[i]<='Z')a[i]=a[i]-'A'+'a';
for(int i=;i<n;i++)
if(b[i]>='A'&&b[i]<='Z')c+=b[i]-'A'+'a';
else c+=b[i];
int tot=;
for(int i=;i<n;i++)
{
unsigned int seed = ; // 31 131 1313 13131 131313 etc..
unsigned int has= ;
for(int j=i;j<n;j++)
{
has=has*seed+(a[j]);
ma[i][j]=(has & 0x7FFFFFFF);
}
}
for(int i=;i<n;i++)
{
unsigned int seed = ; // 31 131 1313 13131 131313 etc..
unsigned int has= ;
for(int j=i;j<n;j++)
{
has=has*seed+(c[j]);
mc[i][j]=(has & 0x7FFFFFFF);
}
}
for(int i=;i<=n-;i++)
{
for(int j=i;j<=n-;j++)
{
if(check(,i-,i,j,j+,n-))
{
printf("YES\n");
output(,i-,i,j,j+,n-);
return ;
}
if(check(,i-,j+,n-,i,j))
{
printf("YES\n");
output(,i-,j+,n-,i,j);
return ;
}
if(check(i,j,,i-,j+,n-))
{
printf("YES\n");
output(i,j,,i-,j+,n-);
return ;;
}
if(check(i,j,j+,n-,,i-))
{
printf("YES\n");
output(i,j,j+,n-,,i-);
return ;;
}
if(check(j+,n-,,i-,i,j))
{
printf("YES\n");
output(j+,n-,,i-,i,j);
return ;
}
if(check(j+,n-,i,j,,i-))
{
printf("YES\n");
output(j+,n-,i,j,,i-);
return ;;
}
}
}
printf("NO\n");
return ;
}

codeforces gym 101164 K Cutting 字符串hash的更多相关文章

  1. codeforces gym 100971 K Palindromization 思路

    题目链接:http://codeforces.com/gym/100971/problem/K K. Palindromization time limit per test 2.0 s memory ...

  2. Codeforces Gym 100338B Spam Filter 字符串哈希+贝叶斯公式

    原题链接:http://codeforces.com/gym/100338/attachments/download/2136/20062007-winter-petrozavodsk-camp-an ...

  3. Codeforces Gym 100187K K. Perpetuum Mobile 构造

    K. Perpetuum Mobile Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/pro ...

  4. 【题解】 Codeforces Edu41 F. k-substrings (字符串Hash)

    题面戳我 Solution 我们正着每次都要枚举从长到短,时间复杂度承受不了,但是我们可以发现一个规律,假设某次的答案为\(x\),那么这个字符串为\(A+X+B\)组成,无论中间的\(X\)是重叠还 ...

  5. codeforces gym 100286 I iSharp (字符串模拟)

    题目链接 给定一个字符串.输入是int& a*[]&, b, c*; 输出是 int&&[]* a;int& b;int&* c; 输入格式里逗号后面一 ...

  6. Codeforces Gym 100523K K - Cross Spider 计算几何,判断是否n点共面

    K - Cross SpiderTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/v ...

  7. codeforces gym 100357 K (表达式 模拟)

    题目大意 将一个含有+,-,^,()的表达式按照运算顺序转换成树状的形式. 解题分析 用递归的方式来处理表达式,首先直接去掉两边的括号(如果不止一对全部去光),然后找出不在括号内且优先级最低的符号.如 ...

  8. Codeforces Gym 100851 K King's Inspection ( 哈密顿回路 && 模拟 )

    题目链接 题意 : 给出 N 个点(最多 1e6 )和 M 条边 (最多 N + 20 条 )要你输出一条从 1 开始回到 1 的哈密顿回路路径,不存在则输出 " There is no r ...

  9. CodeForces - 727E Games on a CD 字符串Hash

    题意:有n个单词,每个单词长度为k,顺时针将它们写成一个圆圈串.现在知道g个长度为k的单词,是否可以从这g个单词中选择n个形成这个圆圈串?如果有多个答案,任意输出一个. 思路 可以发现,如果枚举第一个 ...

随机推荐

  1. [转载]oracle 数据类型详解---日期型

    1.常用日期型数据类型1.1.DATE这是ORACLE最常用的日期类型,它可以保存日期和时间,常用日期处理都可以采用这种类型.DATE表示的日期范围可以是公元前4712年1月1日至公元9999年12月 ...

  2. ID3和C4.5分类决策树算法 - 数据挖掘算法(7)

    (2017-05-18 银河统计) 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来判断其可行性的决策分析方法,是直观运用概率分析的一种图解法.由于这种决策分支画 ...

  3. maven 项目 查询部分关心的字段

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...

  4. python类的组合

    类的组合,即在类实例化时,将另一个类的实例作为参数传入,这样可以将两个实例关联起来. 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好. 例如,描述一个机器人类,这个大类是由很多 ...

  5. mysql、oracle分库分表方案之sharding-jdbc使用(非demo示例)

    选择开源核心组件的一个非常重要的考虑通常是社区活跃性,一旦项目团队无法进行自己后续维护和扩展的情况下更是如此. 至于为什么选择sharding-jdbc而不是Mycat,可以参考知乎讨论帖子https ...

  6. MYSQL之MHA集群

    环境 manager 192.168.137.141 master1 192.168.137.144 master2 192.168.137.145 slave 192.168.137.141 vip ...

  7. day24,25组合 封装 多态

    面向对象的精髓:将数据和处理数据的代码绑定成一个对象 只要获取到对象相应的数据和方法都有了 一.组合 什么叫组合? 多个对象放在一起叫组合 组合的作用也是降低代码的冗余 # 学生会增加各种各样的新的属 ...

  8. PID算法控制简单理解

    1 传统的位式控制算法 用户期望值Sv(设定值)经控制算法输出一个输出信号OUT,输出信号加载到执行部件上(像MOS管等)对控制对象进行控制(步进电机.加热器等),控制对象的当前值(Pv)如速度通过传 ...

  9. CSS的再深入(更新中···)

    在上一章我们提到了一个新的概念,叫做块级样式,讲到这里就要科普一下: 标签又分为两种: (1)块级标签 元素特征:会独占一行,无论内容多少,可以设置宽高··· (2)内敛标签(又叫做行内标签) 元素特 ...

  10. Python3基础 list + *运算 扩充列表

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...