博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 898F 字符串hash
阅读量:4965 次
发布时间:2019-06-12

本文共 1872 字,大约阅读时间需要 6 分钟。

题意:给出一个字符串,要把它折分成三部分 a、b、c , 使得 a+b=c 。输出任何一种可行情况。

tags:字符串 hash

因为 a+b=c ,所以 lena、lenb 至少要有一个等于 lenc 或 lenc-1  。所以枚举 lenc,每次检验一下可不可行。

但每次都暴力检验肯定超时,这里把字符串hash 一下,根据 hash值 快速检验。

 

记一下模板:

const int mod = 1e9+7;ll  Hash[N], p[N], Base=10;void Init(string si){    int len = si.size();    Hash[0]=0;    for(int i=0; i
#include
using namespace std;#pragma comment(linker, "/STACK:102400000,102400000")#define rep(i,a,b) for (int i=a; i<=b; ++i)#define per(i,b,a) for (int i=b; i>=a; --i)#define mes(a,b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3f#define MP make_pair#define PB push_back#define fi first#define se secondtypedef long long ll;const int N = 1000005;const int mod = 1e9+7;ll Hash[N], p[N], Base=10;void Init(string si){ int len = si.size(); Hash[0]=0; for(int i=0; i
=10) a3-=10, flag=1; else flag=0; if(a3!=s3[len3-(lena-i)]-'0') return false; } return true;}bool solve(int lena, int lenb){ if(lena>lenc || lenb>lenc) return false; if(lena<0 || lenb<0) return false; if(si[lena]=='0' && lenb!=1) return false; if(si[lena+lenb]=='0' && len-lena-lenb!=1) return false; if( (get(1,lena)+get(lena+1, lena+lenb))%mod != get(lena+lenb+1, len) ) return false; //return true; return check(lena, lenb);}int main(){ cin>>si; Init(si); len=si.size(); for(lenc=1; lenc<=len-2; ++lenc) { if(solve(lenc, len-lenc*2)) { print(lenc, len-lenc*2); return 0; } if(solve(lenc-1, len-lenc-(lenc-1))) { print(lenc-1, len-lenc-(lenc-1)); return 0; } if(solve(len-lenc*2, lenc)) { print(len-lenc*2, lenc); return 0; } if(solve(len-lenc-(lenc-1), lenc-1)) { print(len-lenc-(lenc-1), lenc-1); return 0; } } return 0;}
View Code

转载于:https://www.cnblogs.com/sbfhy/p/8433653.html

你可能感兴趣的文章
【hdu 2544最短路】【Dijkstra算法模板题】
查看>>
【Calling Circles UVA - 247 】【Floyd + dfs】
查看>>
【改革春风吹满地 HDU - 2036 】【计算几何-----利用叉积计算多边形的面积】
查看>>
【Audiophobia UVA - 10048 】【Floyd算法】
查看>>
【Fishing Master HDU - 6709 】【贪心】
查看>>
【Bazinga HDU - 5510 】【考察strstr()的使用】【贪心】
查看>>
【Windows Of CCPC HDU - 6708】【打表,找规律】
查看>>
【Bit String Reordering UVALive - 6832 】【模拟】
查看>>
(转载)博弈汇总【巴什博奕,威佐夫博弈,尼姆博弈,斐波那契博弈】
查看>>
【数据结构作业】-【带头结点的单链表就地逆置】
查看>>
【Miscalculation UVALive - 6833 】【模拟】
查看>>
【Pet HDU - 4707 】【利用并查集找深度】
查看>>
《Java程序设计实验》 软件工程18-1,3 OO实验2
查看>>
【Herding HDU - 4709 】【数学(利用叉乘计算三角形面积)】
查看>>
【Difference Between Primes HDU - 4715】【素数筛法打表+模拟】
查看>>
【(图) 旅游规划 (25 分)】【Dijkstra算法】
查看>>
【表达式转换 (25 分)】
查看>>
【7-9 有重复的数据I (20 分)】【此题卡输入,需要自己写个输入挂】
查看>>
JRebel安装部署,激活
查看>>
OPENSSL使用方法
查看>>