题目传送门: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. screen mac linux下一种让程序后台运行的方法

    1: screen 场景的意思.字面意思就是软件运行在不同场景 (1)创建会话 使用命令“screen -S RunWork”来创建一个screen会话,命令执行之后,就会得到一个新的shell窗口, ...

  2. django学习之命令

    1.启动一个django项目: $ django-admin startproject <project-name> 2.创建一个应用: $ python manage.py starta ...

  3. JavaWeb后台购物车类的具体实现

    相信大家肯定都在电商网站买过东西,当我们看中一件喜欢又想买的东西时,这时候你又不想这么快结账,这时候你就可以放入购物车: 就像我们平时去超市买东西一样,会推着购物车去买东西: 那么我们接下来看看jav ...

  4. 【PAT】B1082 射击比赛(20 分)

    水提水题,直接贴代码啦 #include<cstdio> #include<algorithm> using namespace std; struct ppp{ int id ...

  5. Mysql基础之 binary关键字

    where子句的字符串比较是不区分大小写的,但是可以使用binary关键字设定where子句区分大小写

  6. January 09th, 2018 Week 02nd Tuesday

    Use the smile to change the world. Don't let the world change your smile. 用你的笑容去改变这个世界,别让这个世界改变了你的笑容 ...

  7. 17秋 软件工程 团队第五次作业 Alpha Scrum6

    17秋 软件工程 团队第五次作业 Alpha Scrum6 今日完成的任务 世强:APP内通知消息发送; 港晨:APP前端登陆界面编写: 树民:Web后端数据库访问模块代码实现: 伟航:Web后端Re ...

  8. Java设计模式之十三 ---- 观察者模式和空对象模式

    前言 在上一篇中我们学习了行为型模式的备忘录模式(Memento Pattern)和状态模式(Memento Pattern).本篇则来学习下行为型模式的最后两个模式,观察者模式(Observer P ...

  9. CRM项目之stark组件(1)

    admin组件 admin组件的简单使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py ...

  10. WebService Client Generation Error with JDK8

    java.lang.AssertionError: org.xml.sax.SAXParseException; systemId: jar:file:/path/to/glassfish/modul ...