CF58E Expression 搜索
题目传送门:http://codeforces.com/problemset/problem/58/E
题意:给出一个形如$x+y=z$(不一定正确)的式子,试输出一个$a+b=c$的式子,满足:$1.$等式成立;$2.$等式由给出的$x+y=z$等式加入若干数字得到;$3.$在满足前两个要求的前提下式子最短。若有多组输出任意一组均可。给出的等式中所有的数大小均不超过$10^6$
与虫食算一题很相似。
考虑从最后一位开始进行搜索。对于其中某一位,至多只有两种情况:加入一个数使这一位上运算成立,或者这一位上本就运算成立,无需加入数。
所以答案范围在$10^{14}$之内,搜索可以完成
注意本题的细节:在运算某一位时,如果某一个数结果为$0$,而更高位上还需要补数字,这是不可行的。
因为各种魔改所以代码极其难看
#include<bits/stdc++.h> using namespace std; ][] , ans[][] , nA , nB , nC , minN = , cnt , t[]; //now是当前加了哪些数 //ans是最终答案加了哪些数 void dfs(int a , int b , int c , int num , int jw , int cou , bool ifA , bool ifB){ //abc记录当前三个数还有多少没有算 //num记录加了几个数 //cou表示加法共有几位 //ifA与ifB表示是否还能够再a或b上加数 if(!a && !b && !c && !jw){ minN = num; cnt = cou; memcpy(ans , now , sizeof(now)); return; } //注意:下面的四个dfs前的if中的条件都有c!=0!!! + b % - c % + jw == && c) dfs(a / , b / , c / , num , , cou + , a ? : , b ? : ); + b % - c % + jw == && c) dfs(a / , b / , c / , num , , cou + , a ? : , b ? : ); else{ ) return; now[num][] = ++cou; if(!ifA && c){ now[num][] = ; now[num][] = (c % - b % - jw + ) % ; bool f = ifB; ; dfs(a , b / , c / , num , (now[num][] + b % + jw - c % ) / , cou , ifA , ifB); ifB = f; } if(!ifB && c){ now[num][] = ; now[num][] = (c % - a % + - jw) % ; bool f = ifA; ) ifA = ; dfs(a / , b , c / , num , (now[num][] + a % + jw - c % ) / , cou , ifA , ifB); ifA = f; } now[num][] = ; now[num][] = (a % + b % + jw) % ; ; ; dfs(a / , b / , c , num , (a % + b % + jw - now[num][]) / , cou , ifA , ifB); } } int main(){ int a , b , c; bool f; scanf("%d+%d=%d" , &a , &b , &c); dfs(a , b , c , , , , , ); //一个很迷的输出 ; ] - ) p++; ; i <= cnt ; i++) ] == i){ t[i] = ans[p++][]; ] - ) p++; } else{ t[i] = a % ; a /= ; } f = ; for(int i = cnt ; i ; i--) if(f || t[i]){ putchar(t[i] + '); f = ; } putchar('+'); p = ; ] - ) p++; ; i <= cnt ; i++) ] == i){ t[i] = ans[p++][]; ] - ) p++; } else{ t[i] = b % ; b /= ; } f = ; for(int i = cnt ; i ; i--) if(f || t[i]){ putchar(t[i] + '); f = ; } putchar('='); p = ; ] - ) p++; ; i <= cnt ; i++) ] == i){ t[i] = ans[p][]; p++; ] - ) p++; } else{ t[i] = c % ; c /= ; } f = ; for(int i = cnt ; i ; i--) if(f || t[i]){ putchar(t[i] + '); f = ; } ; }
CF58E Expression 搜索的更多相关文章
- Codeforces 58E Expression (搜索)
题意:给你一个可能不正确的算式a + b = c, 你可以在a,b,c中随意添加数字.输出一个添加数字最少的新等式x + y = z; 题目链接 思路:来源于这片博客:https://www.cnb ...
- [GodLove]Wine93 Tarining Round #7
比赛链接: http://vjudge.net/contest/view.action?cid=47643#overview 比赛来源: 2012 ACM/ICPC Asia Regional Han ...
- Emacs快捷键列表
C = ControlM = Meta = Alt | EscDel = Backspace 基本快捷键(Basic)C-x C-f "find"文件, 即在缓冲区打开/新建一个文 ...
- EMACS快捷键
C = Control M = Meta = Alt | Esc Del = Backspace 基本快捷键(Basic) C-x C-f "find"文件, 即在缓冲区打开/新建 ...
- Emacs快捷键(较全)
C = Control M = Meta = Alt | Esc Del = Backspace 基本快捷键(Basic) C-x C-f "find"文件, 即在缓冲区打开/新建 ...
- lucene 范围搜索表达式(range expression)
实际测试 lucene范围符号,大于等于或小于等于符号[],大于或小于符号{} newIntRange或newLongRange一样 代码: // test lucen ...
- jQuery find() 搜索所有段落中的后代 C# find() 第一个匹配元素 Func 有返回值 Action是没有返回值 Predicate 只有一个参数且返回值为bool 表达式树Expression
所有p后代span Id为 TotalProject 的 select 标签 的后代 option标签 为选中的 text using System; using System.Collections ...
- Expression表达式 实现and、or搜索
用法: [HttpPost] public ActionResult GetBannerList(int pageIndex, int pageSize, string search) { Resul ...
- WPF 自定义搜索框
控件中的搜索图标下载地址:http://www.easyicon.net/1183666-Search_icon.html 搜索框设计过程比较简单: 1.先定义一个Rectangle作为背景 2. ...
随机推荐
- 微信小程序踩过的一些坑
前言 迄今为止,正儿八经的上线了真正意义上的程序,但是这个小程序却着实不小. 之所以不小,是因为这个类似于社区的小程序,已经做了大部分都有的功能了 举例说明,具体的一些功能点: 1.帖子列表页面:会有 ...
- Docker第二章:docker基础1--镜像,容器&仓库
镜像介绍及操作:http://www.haveneed.cn/article-detials/115 容器介绍及操作:http://www.haveneed.cn/article-detials/11 ...
- Retrofit 代理模式
https://blog.csdn.net/H176Nhx7/article/details/78139406
- 怎么查找Jenkins的个人api token
程序中可变部分解释:其中server.build_job方法传入的参数channel为分渠道构建参数,也即jenkins job的参数,这个参数随不同的日常job不同是不同的,实际编写脚本的过程中这个 ...
- matlab练习程序(Levenberg-Marquardt法最优化)
上一篇博客中介绍的高斯牛顿算法可能会有J'*J为奇异矩阵的情况,这时高斯牛顿法稳定性较差,可能导致算法不收敛.比如当系数都为7或更大的时候,算法无法给出正确的结果. Levenberg-Marquar ...
- Redis系列(二):Redis的数据类型及命令操作
原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...
- 第五章 绘图基础(LINEDEMO)
LINEDEMO程序绘制一个矩形.两条直线.一个椭圆和一个圆角矩形.该程序表明,定义了封闭矩形的这些函数确实对这些区域进行了填充,因为椭圆后面的线被隐藏了. /*------------------- ...
- Linux 小知识翻译 - 「文件系统的种类」
现在的Linux,主流的文件系统是 「ext3」.但是,文件系统除此之外,还有「ReiserFS」「XFS」「ZFS」等等. 此外,Windows的主流文件系统是「NTFS」,CD-ROM的主流文件系 ...
- The resource configuration is not modifiable in this context.
项目中使用了Jersey RESTful 框架, 更新代码后服务能正常起来, 在页面登录时验证码不显示 后台报错 java.lang.IllegalStateException: The resour ...
- if语句的嵌套以及条件运算符和条件表达式(初学者)
1.当if语句中的执行语句又是if语句时,则构成了if语句的嵌套情形. 其一般形式可表示为: if() { if()……; } 或: if() if()语句1: else 语句2: else if() ...