字符串hash:  base设置为10

枚举'='可能出现的位置,从1/2处开始到大概1/3处结束,当然大概的1/3不用计算,直接到最后就行,因为本题必然有解,输出直接结束即可。

根据'='号位置,'+'最多有四种位置,因为 等式的和位数确定,有进位和不进位,左和右,最多2X2,然后剪掉j的非法位置(这里没计算除了len=3以外的j有无非法位置的可能,剪了再说)

比较需要注意的地方是等式中非个位数字不能以'0'开头,开始只以为不以'0'开头即可,WA在了 1+0=0 ,改了j后又WA了0+0=0

代码

 #include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
#include <map>
using namespace std; typedef long long ll;
map< ll ,ll > done;
map<ll ,int > mp;
const ll MOD=1e9+;
const int maxLen=1e6+;
char s[maxLen];
ll P[maxLen];
ll sum[maxLen]; template<class T>
inline bool scan_d(T &ret){
char c; int sgn;
if(c=getchar(),c==EOF) return ;//EOF
while(c!='-'&&(c<''||c>'')) c=getchar();
sgn=(c=='-')?-:;
ret=(c=='-')?:(c-'');
while(c=getchar(),c>=''&&c<='') ret=ret*+(c-'');
ret*=sgn;
return ;
} inline void out(int x){
if(x>) out(x/);
putchar(x%+'');
} ll gcd(ll a,ll b){
return b==?a:gcd(b,a%b);
} ll Qpow(ll a,ll n){
ll ret=;
ll tmp=a%MOD;
while(n){
if(n&) ret=(ret*tmp)%MOD;
tmp=(tmp*tmp)%MOD;
n>>=;
}
return ret;
} ll getF(ll t){
if(t==) return mp[t]=;
if(mp.count(t)) return mp[t];
mp[t]=Qpow(,t-);
for(int i=;i*i<=t;++i){
if(t%i==){
mp[t]=(mp[t]-getF(i)+MOD)%MOD;
if(i*i!=t) mp[t]=(mp[t]-getF(t/i)+MOD)%MOD;
}
}
return mp[t]=(mp[t]-getF()+MOD)%MOD;
} int main()
{
P[]=;
for(int i=;i<maxLen;++i){
P[i]=P[i-]*%MOD;
}
scanf("%s",s+);
int len=strlen(s+);
sum[]=;
for(int i=;i<=len;++i){
sum[i]=(sum[i-]*+s[i]-'')%MOD;
}
//for(int i=1;i<=len;++i)
// printf("%d : %I64d\n",i,sum[i]);
int flag=;
for(int i=len/;i<len;++i){
if(s[i+]==''&&len-i>) continue;
int sumlen=len-i;
for(int j:{sumlen,sumlen-,i-sumlen,i-sumlen+}){
if(j>=i||j<) continue;
if(s[j+]==''&&i-j>) continue; //printf("i : %d j : %d\n",i,j);
ll a=(sum[j]-sum[]*P[j]%MOD+MOD)%MOD;
ll b=(sum[i]-sum[j]*P[i-j]%MOD+MOD)%MOD;
ll c=(sum[len]-sum[i]*P[len-i]%MOD+MOD)%MOD;
if((a+b)%MOD==c%MOD){
for(int k=;k<=j;++k)
putchar(s[k]);
putchar('+');
for(int k=j+;k<=i;++k)
putchar(s[k]);
putchar('=');
for(int k=i+;k<=len;++k)
putchar(s[k]);
puts("");
flag=;
break;
}
}
if(flag) break;
}
return ;
}

F - Restoring the Expression CodeForces - 898F的更多相关文章

  1. Codeforces Round #451 (Div. 2) [ D. Alarm Clock ] [ E. Squares and not squares ] [ F. Restoring the Expression ]

    PROBLEM D. Alarm Clock 题 OvO http://codeforces.com/contest/898/problem/D codeforces 898d 解 从前往后枚举,放进 ...

  2. codeforces 898F Hash

    F. Restoring the Expression time limit per test 2 seconds memory limit per test 256 megabytes input ...

  3. Codeforces 898F - Restoring the Expression(字符串hash)

    898F - Restoring the Expression 思路:字符串hash,base是10,事实证明对2e64取模会T(也许ull很费时),对1e9+7取模. 代码: #include< ...

  4. Contest Round #451 (Div. 2)F/Problemset 898F Restoring the Expression

    题意: 有一个a+b=c的等式,去掉两个符号,把三个数连在一起得到一个数 给出这个数,要求还原等式,length <= 1e6 三个数不能含有前导0,保证有解 解法: 铁头过题法,分类然后各种判 ...

  5. F - Make It Equal CodeForces - 1065C

    题目大意:有n座塔,塔高h[i],每次给定高度H对他们进行削切,要求每次削掉的所有格子数不能超过k个,输出最少削几次才能使所有塔的高度相同. 思路一:差分+贪心 对于每一个高度h,用一个数组让1~h的 ...

  6. Codeforces 884f F. Anti-Palindromize

    题  OvO http://codeforces.com/contest/884/problem/F (Educational Codeforces Round 31 - F) 884f 解 题目标签 ...

  7. Codeforces 731 F. Video Cards(前缀和)

    Codeforces 731 F. Video Cards 题目大意:给一组数,从中选一个数作lead,要求其他所有数减少为其倍数,再求和.问所求和的最大值. 思路:统计每个数字出现的个数,再做前缀和 ...

  8. Codeforces Round# 305 (Div 1)

    [Codeforces 547A] #include <bits/stdc++.h> #define maxn 1000010 using namespace std; typedef l ...

  9. Expression Trees

    Expression Trees 只是想简单说下表达式树 - Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译 ...

随机推荐

  1. django for 循环中,获取序号

    模板的for循环中,如何获取序号? 想过用enumerate,但是在模板中会报错 Could not parse the remainder xxx: 后来搜到 forloop.counter,完美解 ...

  2. chattr 改变文件、目录属性 (chmod、passwd等涉及文件修改的命令提示Operation not permitted)

    与chmod这个命令相比,chmod只是改变文件的读写.执行权限,更底层的属性控制是由chattr来改变的. lsattr查看文件或目录属性 chattr命令的用法:chattr [ -RVf ] [ ...

  3. MyEclipse反向生成Java代码 ,Reverse Engineering-->Java Source Folder-->没有提供任何条目

    在web项目名称上,手动执行一遍Add Hibernate Capabilities,然后再去DB Browser中进行反向生成pojo实体类和hbm.xml映射文件!,具体生成反向代码的配置如下图所 ...

  4. 自定义标签在IE6-8的困境

    或许未来前端组件化之路都是自定义标签,但这东西早在20年前,JSTL已在搞了.现在Web Component还只有webkit支持.但一个组件库,还需要一个特殊的标识它们是一块的.不过这个XML已经帮 ...

  5. LeetCode OJ 22. Generate Parentheses

    题目 Given n pairs of parentheses, write a function to generate all combinations of well-formed parent ...

  6. FBackup:个人用途与商业用途都是免费的

    當自己在備份電腦資料時,若沒有使用備份及還原軟體時,我想很多人的作法就是「想到應該要備份了,然後進行備份檔案的壓縮.壓縮好之後複製到不同的磁碟機或燒錄光碟」,等要用的時候,再拿出來還原.若是這樣,其實 ...

  7. ArcMap导入图层出现General function failure问题 [转]

      ArcMap导入图层出现General function failure问题 [转] Link: http://www.cnblogs.com/angelx/p/3391967.html 问题描述 ...

  8. 前端CSS3笔记

    第1章CSS3简介 如同人类的的进化一样,CSS3是CSS2的“进化”版本,在CSS2基础上,增强或新增了许多特性, 弥补了CSS2的众多不足之处,使得Web开发变得更为高效和便捷. 1.1   CS ...

  9. isPlainObject的解释

    参考: http://www.365mini.com/page/jquery_isplainobject.htm 先来看下使用案例: //在当前页面内追加换行标签和指定的HTML内容 function ...

  10. BindingFlags 枚举

    https://msdn.microsoft.com/zh-cn/library/cexkb29a 官方解释: 指定控制绑定和由反射执行的成员和类型搜索方法的标志. 此枚举有一个 FlagsAttri ...