题目大意:给你两个一位数,要你求出其中的较大值(使用$Brainf**k$)

($Brainf**k$简介,相当于有一个数组和一个指针,","为把数组当前位赋值为读入的数,"."为输出当前位置的值,"<"为指针左移一位(最左端为$0$),">"为指针右移一位,"+"数组当前位置的值加一,"-"数组当前位置的值减一,"[]"循环,每次运行到"["或"]"时判断一下当前位置是否为$0$,是,退出循环,否,继续循环)

题解:我还是太菜,想了$20$分钟。我构造了一个序列(标号从$0$开始),如下(上面的数字表示这一位的值,$a$为输入的第一个数,$b$为输入的第二个数;下面的数字表示这个位置的标号)

读入时的数列(>+>,>,,):

$$0\qquad 1\qquad 0\qquad b\qquad 0\qquad 0\qquad 0\\
0\qquad 1\qquad 2\qquad 3\qquad 4\qquad 5\qquad 6$$

然后把$b$在第$6$位建一个备份(先把$b$复制到位置$5,6$,再把位置$5$复制到位置$3$)([->>+>+<<<]>>[-<<+>>]<<<):

$$0\qquad 1\qquad a\qquad b\qquad 0\qquad 0\qquad b\\
0\qquad 1\qquad 2\qquad 3\qquad 4\qquad 5\qquad 6$$

这时,我们把$a,b$循环$-1$,但是每次往回移动指针时,若该位置有值,就一直左移,然后向右移动两位([->-[<]>>]):

分类讨论(记$M$为$max(a,b)$,$A$为$M-a$,$B$为$M-b$):

1.正常情况(即$a,b$都不为零),那么指针会先移动到位置$0$,再移动到位置$2$(即$a$的位置),然后继续:

$$0\qquad 1\qquad a\qquad b\qquad 0\qquad 0\qquad b\\
0\qquad 1\qquad 2\qquad 3\qquad 4\qquad 5\qquad 6$$

2.若$a$为零,即$a<b$,那么指针会先移动到位置$2$(即原来$a$的位置),再移动到位置$4$,循环就会结束:

$$0\qquad 1\qquad 0\qquad B\qquad 0\qquad 0\qquad b\\
0\qquad 1\qquad 2\qquad 3\qquad 4\qquad 5\qquad 6$$

3.若$b$为零,即$a\geq b$,那么指针就先会停在位置$3$(即原来$b$的位置),再移动到位置$5$,循环结束:

$$0\qquad 1\qquad A\qquad 0\qquad 0\qquad 0\qquad b\\
0\qquad 1\qquad 2\qquad 3\qquad 4\qquad 5\qquad 6$$

现在,原来$a,b$的位置存的值为$A$和$B$,

所以这时的指针就会停在位置$4,5$,这时把指针向左移动$4$格,也就是说指针会停在位置$0,1$(<<<<),

然后若这个位置有值(也就是在位置$1$),就继续向左移动([<]),

所以现在指针停在位置$0$,再向右移动$3$格,就停在了位置$3$,即$max(a,b)-b$(>>>)。

最后把位置$3$的值(值为$max(a,b)-b$)加到位置$6$(值为$b$)就行了。
$$0\qquad 1\qquad 0\qquad 0\qquad 0\qquad 0\qquad M\\
0\qquad 1\qquad 2\qquad 3\qquad 4\qquad 5\qquad 6$$

卡点:我竟然一次过???

Brainf**k Code:

>+>,>,,[->>+>+<<<]>>[-<<+>>]<<<[->-[<]>>]<<<<[<]>>[->>>>+<<<<]>>>>.

  

Brainf**k(一位数求max)的更多相关文章

  1. hdu6003 Problem Buyer 贪心 给定n个区间,以及m个数,求从n个区间中任意选k个区间,满足m个数都能在k个区间中找到一个包含它的区间,如果一个区间包含了x,那么 该区间不能再去包含另一个数,即k>=m。求最小的k。如果不存在这样的k,输出“IMPOSSIBLE!”。

    /** 题目:hdu6003 Problem Buyer 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6003 题意:给定n个区间,以及m个数,求从n个区 ...

  2. CF 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和(数位DP)

    题意: 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和 分析:考虑用状态压缩 , 10给位0~9 , 如果之前出现过了某个数字x ,那就拿当 ...

  3. [HDU] 5306 Gorgeous Sequence [区间取min&求和&求max]

    题解: 线段树维护区间取min求和求max 维护最小值以及个数,次小值 标记清除时,分情况讨论 当lazy>max1 退出 当max1>lazy>max2(注意不要有等号) 更新 否 ...

  4. hdu Anniversary party 树形DP,点带有值。求MAX

    Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  5. 单调队列优化dp,k次移动求最长路

    洛谷2254 给你k次移动 每次移动给你一个时间段 a,b和方向dir 地图上有障碍物 为了不撞上障碍物你可以施法让箱子停下来 问箱子可以走的最长路 ((以下是洛谷的题解)) /*首先考虑对于时间t来 ...

  6. AcWing 1019. 庆功会 多重背包求max

    //多重背包 max #include <iostream> using namespace std; ; int n, m; int f[N]; int main() { cin > ...

  7. POJ-3111 K Best---二分求最大化平均值

    题目链接: https://cn.vjudge.net/problem/POJ-3111 题目大意: 卖宝救夫:Demy要卖珠宝,n件分别价值vi 重 wi,她希望保留k件使得 最大. 解题思路: # ...

  8. EM算法——有隐含变量时,极大似然用梯度法搞不定只好来猜隐含变量期望值求max值了

    摘自:https://www.zhihu.com/question/27976634 简单说一下为什么要用EM算法 现在一个班里有50个男生,50个女生,且男生站左,女生站右.我们假定男生的身高服从正 ...

  9. BrainF**k的编译器

      按照语法编写了这个"编译器"(对于解释性语言而言"编译"二字的确很奇怪).   功能:     1."编译".运行一个后缀为 '.bf' ...

随机推荐

  1. Hadoop(25)-高可用集群配置,HDFS-HA和YARN-HA

    一. HA概述 1. 所谓HA(High Available),即高可用(7*24小时不中断服务). 2. 实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA机制:HDFS的HA ...

  2. Hadoop(13)-MapReduce框架原理--Job提交源码和切片源码解析

    1.MapReduce的数据流 1) Input -> Mapper阶段 这一阶段的主要分工就是将文件切片和把文件转成K,V对 输入源是一个文件,经过InputFormat之后,到了Mapper ...

  3. MongoDB在单机上搭建分片副本集群(windows),版本二

    配置可以参考前面一篇 https://www.cnblogs.com/a-horse-mosaic/p/9284010.html 副本集是一组服务器,其中有一个主服务器(primary),用于处理客户 ...

  4. JavaSE库存管理系统项目实战

    需求分析 企业库房用于存放成品.半成品.原材料.工具等物资,一般情况下,这些物资统称为物料.库存管理常见业务包括物资的入库.出库.盘点.退货.报废以及财务核算等,业务逻辑比较复杂,库房信息系统项目开发 ...

  5. c#vs连接SQL sever数据库入门操作

    对于需要连接数据库的项目,可以参考的简单初级代码.实现打开数据库,读入数据功能 using System; using System.Collections.Generic; using System ...

  6. HyperLedger Fabric 1.4 交易流程(6.3)

    区块链最主要的特性之一是去中心化,没有了中心机构的集中处理,为了达成数据的一致性,就需要网络中全民参与管理,并以某种方法达成共识,所以区块链的交易流程也就是共识的过程.       在Fabric中, ...

  7. JAVA中堆栈和内存分配详解(摘抄)

    在Java中,有六个不同的地方可以存储数据: 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存 ...

  8. Notepad++删除空行的多种实现办法

    Notepad++支持基础的正则表达式,同时由于自身丰富的插件和功能,所以删除空行或有空格的空行,有多种实现办法,条条大路通罗马,闪电博客抛砖引玉,供大家参考. 一.删除空行(不包括有空格类符号的空行 ...

  9. guacamole实现剪切复制

    主要功能是实现把堡垒机的内容复制到浏览器端,把浏览器端的文本复制到堡垒机上. 借助一个中间的文本框,现将堡垒机内容复制到一个文本框,然后把文本框内容复制出来.或者将需要传递到堡垒机的内容先复制到文本框 ...

  10. 台湾ML笔记--1.1什么时候适合使用ML

    适用情况: 1 exists some 'underlying pattern' to be learned --so 'performance measure' can be imporoved 例 ...