F - Restoring the Expression CodeForces - 898F
字符串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的更多相关文章
- 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 解 从前往后枚举,放进 ...
- codeforces 898F Hash
F. Restoring the Expression time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Codeforces 898F - Restoring the Expression(字符串hash)
898F - Restoring the Expression 思路:字符串hash,base是10,事实证明对2e64取模会T(也许ull很费时),对1e9+7取模. 代码: #include< ...
- Contest Round #451 (Div. 2)F/Problemset 898F Restoring the Expression
题意: 有一个a+b=c的等式,去掉两个符号,把三个数连在一起得到一个数 给出这个数,要求还原等式,length <= 1e6 三个数不能含有前导0,保证有解 解法: 铁头过题法,分类然后各种判 ...
- F - Make It Equal CodeForces - 1065C
题目大意:有n座塔,塔高h[i],每次给定高度H对他们进行削切,要求每次削掉的所有格子数不能超过k个,输出最少削几次才能使所有塔的高度相同. 思路一:差分+贪心 对于每一个高度h,用一个数组让1~h的 ...
- Codeforces 884f F. Anti-Palindromize
题 OvO http://codeforces.com/contest/884/problem/F (Educational Codeforces Round 31 - F) 884f 解 题目标签 ...
- Codeforces 731 F. Video Cards(前缀和)
Codeforces 731 F. Video Cards 题目大意:给一组数,从中选一个数作lead,要求其他所有数减少为其倍数,再求和.问所求和的最大值. 思路:统计每个数字出现的个数,再做前缀和 ...
- Codeforces Round# 305 (Div 1)
[Codeforces 547A] #include <bits/stdc++.h> #define maxn 1000010 using namespace std; typedef l ...
- Expression Trees
Expression Trees 只是想简单说下表达式树 - Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译 ...
随机推荐
- PHP 字符串两边填充补零
str_pad顾名思义这个函数是针对字符串来说的这个可以对指定的字符串填补任何其它的字符串 例如:str_pad(带填补的字符串,填补后的长度,填补字符串,填补位置) 其中填补后的长度必须是个正整数, ...
- Nginx代理webSocket经常中断的解决方案, 如何保持长连接
背景 这天气够热的,要处理的事情也够多的.... 1 2 想看解决的,直接 ctrl+f搜索关键字‘配置点’ 开始前交代(想看原因的看这个,个人观点,不代表正确) 解说:今天用nginx反代通讯项目, ...
- alias 设置别名
我们在使用Linux中使用较长的命令而且要经常要使用时,总是会使用别名,这里就简单的介绍一下别名alias 指令:alias设置指令的别名 语法:# alias name='command line ...
- 安装 nginx
一.安装准备 首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++.gcc.openssl-devel.pcre-devel和zlib ...
- Spring事务管理——回滚(rollback-for)控制
探讨Spring事务控制中,异常触发事务回滚原理.文章进行了6种情况下的Spring事务是否回滚. 以下代码都是基于Spring与Mybatis整合,使用Spring声明式事务配置事务方法. 1.不捕 ...
- windows下如何查看端口,关闭端口,开启端口
如何查看端口 在Windows 2000/XP/Server 2003中要查看端口,可以使用NETSTAT命令: “开始">"运行”>“cmd”,打开命令提示符窗口.在 ...
- 点击对应不同name的button,显示不同name的弹窗(弹窗功能)
(通过html5方法自定义属性选择,因此会有兼容性,此方法可适用移动端) 将button的name,与弹窗的name设为变量,作为参数传递. Button的name可以是自定义name,HTML5自定 ...
- flume 详细介绍
http://blog.csdn.net/a2011480169/article/details/51544664 配有详细的例子. http://www.cnblogs.com/gongxijun/ ...
- ArcGIS案例学习笔记-聚类点的空间统计特征
ArcGIS案例学习笔记-聚类点的空间统计特征 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 目的:对于聚集点,根据分组字段case field,计算空间统计特征 ...
- spring中的IOC/DI的知识点
IOC(Inverse of control):控制反转;其实就是一个装对象的容器,以前我们在controller中调用service中的方法,都要先new 一个service对象,这样不符合模式设计 ...