题目大意:给你两个一位数,要你求出其中的较大值(使用$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. android 自定义图片圆形进度条

    感觉话一个圆形进度条挺简单的 ,但是却偏偏给了几张图片让你话,说实话我没接触过,感觉好难,还好百度有大把的资源,一番努力下终于画出来了. 代码如下. package com.etong.cpms.wi ...

  2. isolate-user-vlan隔离用户vlan的配置

    lab1 根据项目需求搭建好拓扑图: 首先,配置sw2,在E0/4/0接口上创建vlan20,并将该vlan接口配置成带有ip地址的类以太接口 其次,在E0/4/1接口上加入vlan2,同理,E0/4 ...

  3. linux的date常用命令

    1.显示现在时间 date 2.显示今天日期 date +"%F" date +"%Y-%m-%d" 3.现在时间转化为时间戳 date +%s 4.指定某日期 ...

  4. Linux 系统无法登录?你的程序有问题吧!

    今天遇到一个问题,有个用户连接不上服务器(无法ssh远程连接) su: failed to execute /bin/bash: Resource temporarily unavailable 谷歌 ...

  5. Python系列5之模块

    模块 1. 模块的分类 模块,又称构件,是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体). (1)自定义模块 自己定义的一些可以独立完成某个功能的一段程序语句,可以是 ...

  6. python装饰器+递归+冒泡排序

    冒泡排序 li = [33, 2, 10, 1,23,23523,5123,4123,1,2,0] for k in range(1,len(li)): for i in range(len(li) ...

  7. 初步学习pg_control文件之十一

    接前文  初步学习pg_control文件之十,再看这个 XLogRecPtr prevCheckPoint; /* previous check point record ptr */ 发生了che ...

  8. 【个人笔记】关于C++小数的处理

    无论是C-Style还是C++-Style的输出,小数都会四舍五入.如果想要截断两种比较好的方法.第一种:利用sscanf输出成字符串,再人为地putchar().第二种:已知钦定保留6位小数,那么可 ...

  9. 面向对象 公有私有 property classmethod staticmethod

    接口类(抽象类)--------就是一种规范 面向对象的私有与公有 对于每一个类的成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法 私有成员和公有成员的访问限制不 ...

  10. json格式化显示样式js代码分享

    最近开发中需要在页面展示json.特整理了下代码,送给大家,希望能帮到有同样需求的朋友们. 代码: <html> <script src="http://cdn.bootc ...