题目传送门: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 搜索的更多相关文章

  1. Codeforces 58E Expression (搜索)

    题意:给你一个可能不正确的算式a + b = c, 你可以在a,b,c中随意添加数字.输出一个添加数字最少的新等式x + y  = z; 题目链接 思路:来源于这片博客:https://www.cnb ...

  2. [GodLove]Wine93 Tarining Round #7

    比赛链接: http://vjudge.net/contest/view.action?cid=47643#overview 比赛来源: 2012 ACM/ICPC Asia Regional Han ...

  3. Emacs快捷键列表

    C = ControlM = Meta = Alt | EscDel = Backspace 基本快捷键(Basic)C-x C-f "find"文件, 即在缓冲区打开/新建一个文 ...

  4. EMACS快捷键

    C = Control M = Meta = Alt | Esc Del = Backspace 基本快捷键(Basic) C-x C-f "find"文件, 即在缓冲区打开/新建 ...

  5. Emacs快捷键(较全)

    C = Control M = Meta = Alt | Esc Del = Backspace 基本快捷键(Basic) C-x C-f "find"文件, 即在缓冲区打开/新建 ...

  6. lucene 范围搜索表达式(range expression)

    实际测试 lucene范围符号,大于等于或小于等于符号[],大于或小于符号{}   newIntRange或newLongRange一样     代码:           // test lucen ...

  7. jQuery find() 搜索所有段落中的后代 C# find() 第一个匹配元素 Func 有返回值 Action是没有返回值 Predicate 只有一个参数且返回值为bool 表达式树Expression

    所有p后代span Id为 TotalProject 的 select 标签 的后代 option标签 为选中的 text using System; using System.Collections ...

  8. Expression表达式 实现and、or搜索

    用法: [HttpPost] public ActionResult GetBannerList(int pageIndex, int pageSize, string search) { Resul ...

  9. WPF 自定义搜索框

      控件中的搜索图标下载地址:http://www.easyicon.net/1183666-Search_icon.html 搜索框设计过程比较简单: 1.先定义一个Rectangle作为背景 2. ...

随机推荐

  1. 网络基础 http 会话(session)详解

    http 会话(session)详解 by:授客 QQ:1033553122 会话(session)是一种持久网络协议,在用户(或用户代理)端和服务器端之间创建关联,从而起到交换数据包的作用机制 一. ...

  2. (网页)Http状态码大全(200、404、500等)(转CSDN)

    当我们从客户端向服务器发送请求时 服务器向我们返回状态码 状态码就是告诉我们服务器响应的状态 通过它,我们就可以知道当前请求是成功了还是出现了什么问题 状态码是由3位数字和原因短语组成的(比如最常见的 ...

  3. python2 与 python3 如何实现共存

    1.现在我本机系统已内置python2.6 2.下载进行源码安装 复制链接下载到 /root/mypackage,解压 接着 mkdir /usr/local/python3 然后在解压后的文件夹内执 ...

  4. vuejs组件库pk介绍

    vuejs可以说是近2年多以来最火的前端框架,随之而来就产生了非常多的组件库,我们来看看其中比较著名和人气旺盛的几个 1. Vuetify-符合material design设计理念, star数量7 ...

  5. log4net 写入日志到不同的位置

    某些业务需要根据不同的功能将日志记录到不同的位置,以便于区分. <?xml version="1.0" encoding="utf-8" ?> &l ...

  6. EF 更新部分字段写法

    EF 更新部分字段写法 1.EF默认是查询出来,修改后保存: 2.设置不修改字段的IsModified为false,此方法不需要先从数据库查询出实体来(最优方法): db.Set<T>() ...

  7. Windows 系统光盘刻录教程-光盘怎样刻录?刻录数据光盘用"轨道一次写入"还是"光盘一次写入"?

    刻录光盘需要 DVD-RW 的光驱,并且光盘需要 DVD-R 的光盘用于刻录.刻录工具可以使用https://cn.ultraiso.net/ 来进行刻录.选择软件目录 中 工具 ,选择 刻录光盘映像 ...

  8. windows任务管理器怎么知道多个IIS网站进程分别对应哪个网站

    摘要: 1.IIS网站对应的进程名一般叫w3wp.exe (windows2008系统为例,其他类似) 2.windows默认的任务管理器只能看到多个同名的进程名w3wp.exe,没法区别分别对应哪个 ...

  9. 【PAT】B1079 延迟的回文数(20 分)

    用了柳婼大佬博客的思路,但实现有不同 没有用string所以要考虑字符串末尾的'\0' 用的stl中的reverse逆置字符串 #include<stdio.h> #include< ...

  10. iframe无刷新跨域上传文件并获得返回值

    原文:http://geeksun.iteye.com/blog/1070607 需求:从S平台上传文件到R平台,上传成功后R平台返回给S平台一个值,S平台是在一个页面弹出的浮窗里上传文件,所以不能用 ...