codeforces gym 101164 K Cutting 字符串hash
题意:给你两个字符串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的更多相关文章
- codeforces gym 100971 K Palindromization 思路
题目链接:http://codeforces.com/gym/100971/problem/K K. Palindromization time limit per test 2.0 s memory ...
- Codeforces Gym 100338B Spam Filter 字符串哈希+贝叶斯公式
原题链接:http://codeforces.com/gym/100338/attachments/download/2136/20062007-winter-petrozavodsk-camp-an ...
- Codeforces Gym 100187K K. Perpetuum Mobile 构造
K. Perpetuum Mobile Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/pro ...
- 【题解】 Codeforces Edu41 F. k-substrings (字符串Hash)
题面戳我 Solution 我们正着每次都要枚举从长到短,时间复杂度承受不了,但是我们可以发现一个规律,假设某次的答案为\(x\),那么这个字符串为\(A+X+B\)组成,无论中间的\(X\)是重叠还 ...
- codeforces gym 100286 I iSharp (字符串模拟)
题目链接 给定一个字符串.输入是int& a*[]&, b, c*; 输出是 int&&[]* a;int& b;int&* c; 输入格式里逗号后面一 ...
- 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 ...
- codeforces gym 100357 K (表达式 模拟)
题目大意 将一个含有+,-,^,()的表达式按照运算顺序转换成树状的形式. 解题分析 用递归的方式来处理表达式,首先直接去掉两边的括号(如果不止一对全部去光),然后找出不在括号内且优先级最低的符号.如 ...
- Codeforces Gym 100851 K King's Inspection ( 哈密顿回路 && 模拟 )
题目链接 题意 : 给出 N 个点(最多 1e6 )和 M 条边 (最多 N + 20 条 )要你输出一条从 1 开始回到 1 的哈密顿回路路径,不存在则输出 " There is no r ...
- CodeForces - 727E Games on a CD 字符串Hash
题意:有n个单词,每个单词长度为k,顺时针将它们写成一个圆圈串.现在知道g个长度为k的单词,是否可以从这g个单词中选择n个形成这个圆圈串?如果有多个答案,任意输出一个. 思路 可以发现,如果枚举第一个 ...
随机推荐
- 大数据学习路线:Zookeeper集群管理与选举
大数据技术的学习,逐渐成为很多程序员的必修课,因为趋势也是因为自己的职业生涯.在各个技术社区分享交流成为很多人学习的方式,今天很荣幸给我们分享一些大数据基础知识,大家可以一起学习! 1.集群机器监控 ...
- 我是这样手写 Spring 的(麻雀虽小五脏俱全)
人见人爱的 Spring 已然不仅仅只是一个框架了.如今,Spring 已然成为了一个生态.但深入了解 Spring 的却寥寥无几.这里,我带大家一起来看看,我是如何手写 Spring 的.我将结合对 ...
- Mysql初级第三天(wangyun)
1.JDBC简介 1).数据库驱动 2).SUN公司为统一数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC. 3).JDBC全称:Java Database Connectivity( ...
- \r\n回车换行\r回车\n换行的区别
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是打完一行换行的时候 ...
- Storm学习笔记1:Storm基本组件
Storm概念及组件 Nimbus:负责资源分配和任务调度. Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程. Worker:运行具体处理组件逻辑的进程 ...
- Python3 freetds.conf odbcinst.ini odbc.ini 之间的关系
Python3 freetds.conf odbcinst.ini odbc.ini 之间的关系 三者分别是FreeTDS和UnixODBC的配置文件: 1,FreeTDS中的freetds.conf ...
- SSL/TLS代理(termination proxy)
A TLS termination proxy (or SSL termination proxy) is a proxy server that is used by an institution ...
- 让bat批处理后台运行,不显示cmd窗口(完全静化)
背景:由于我有某云的服务器(win server), 上面挂有好几个程序, 为了更好的监控他们, 我使用了一个最笨的方法, 就是下面的方法. 实现:我要监控的程序有三个, 成为ABC吧, 下面先把三个 ...
- Codeforces Round #479 (Div. 3)题解
CF首次推出div3给我这种辣鸡做,当然得写份博客纪念下 A. Wrong Subtraction time limit per test 1 second memory limit per test ...
- Python中的对象行为与特殊方法(二)类型检查与抽象基类
类型检查 创建类的实例时,该实例的类型为类本身: class Foo(object): pass f = Foo() 要测试实例是否属于某个类,可以使用type()内置函数: >>> ...