IPSC 2011
来源:互联网 发布:苹果mac os x操作系统 编辑:程序博客网 时间:2024/05/21 08:46
非常厉害的一道题。。。
题目大意:
扔给你一种新语言,这种语言只有26个变量(A-Z)(为什么?因为只有26个字母呀。。。),每个变量可以存8个二进制位,你所能进行的操作只有一些基本的位运算+赋值+输入输出。
and R X 将R&X 的值赋给R
or R X 将R|X 的值赋给R
not R 将~R 的值赋给R
shl R C 将R<<C 的值赋给R
shr R C 将R>>C 的值赋给R
mov R X 将X 的值赋给R
get R 读入一个数,储存在R 中
put R 输出R的值
一些注意:
1、位运算只有&,|,~,<<,>>(注意:没有异或!)
2、赋值的时候只能是变量与变量之间,没有常量请你用此语言编写程序,完成下面两个子问题:
Easy : 读入正好7个非0即1的数,将读入的数取反输出
Hard : 读入正好19个非0即1的数,将读入的数取反输出限制条件:
Subtask 1中,使用not最多1次,代码长度<=100行
Subtask 2中,使用not最多2次,代码长度<=300行
让我们先忽略一下代码长度,因为那似乎是防止打表用的。。。
Subtask 1比较简单,直接全读进来然后通过“左移+或”就可以全存到一个变量里边,取反一次,最后返回到每个变量里输出就可以了。
关键在于Subtask 2比较蛋疼,一个基本想法就是如果我们可以2次取反而做到取反3个变量就好了。但是。。。这可以做到吗?
(以下不区分变量与bool型变量,因为位运算”&,|”是逐位进行的)
一个关键在于我们肯定是需要求出来一些公共的量(跟A,B,C都有关),而通过这些量我们可以针对不同情况分别对A,B,C取反。
然后。。。我们发现。。。我们需要一些脑洞。。。(因为太自由所以看不出来突破点。。。)
那我们就来猜一猜咯。既然是要针对不同情况而我们的模式都能应付,我们就猜最后~A,~B,~C的表达式是由’|’连接而成的表达式!
既然如此1->0就比较难搞了,因为这些表达式必须同时为0才可以。但我们发现1意味着当前变量占用了整体上的一个1,如果我们能够求出来整体上1的个数,再结合判断一下除当前变量外的其它变量是否能覆盖整体上1的个数的话我们就可以做到一个正确的都没有了!
具体来讲,我们猜测表达式大概是长这个样子:
这样的话注意到由于
好了,这样的话我们就有一个思路了,处理出来
而处理出来
这样的话,这道题目就(在我们的猜测下)搞完了!
当然我们是不会满足于此的!我们来考虑一下取反
我们只需要借鉴这道题目的思路,先求出来
那么对于
(我们可以把
(关于理解上的问题:我个人认为想成一个数轴去理解是比较好的)
通过暴力枚举我们可以先得出
设
这时候我们惊奇的发现问题被分成了两个与原问题相同的子问题!也就是说对于小区间
而且我们还得出了一个变量表示完整地覆盖整个区间(也就是1的个数是否在这个区间中,对于大区间来说就是
(一点吐槽:这种东西似乎只能当面试题玩玩。。。)
完结撒花!
(等等,还没有完结,因为以上内容大部分没有经过真正的检测,所以欢迎评论与交流!)
- IPSC 2011
- IPSC 2016 题解(待续)
- IPSC 2016 Practice Session 题解(待续)
- GJB438B-2009附录G与DI-IPSC-81427的差异——GJB438B学习笔记之五
- GJB438B-2009附录K与DI-IPSC-81429的差异——GJB438B学习笔记之六
- GJB438B-2009附录L与DI-IPSC-81438的差异——GJB438B学习笔记之七
- GJB438B-2009附录Q与DI-IPSC-81440的差异——GJB438B学习笔记之八
- GJB438B-2009附录R与DI-IPSC-81441的差异——GJB438B学习笔记之九
- GJB438B-2009附录S与DI-IPSC-81442的差异——GJB438B学习笔记之十
- GJB438B-2009附录T与DI-IPSC-81443的差异——GJB438B学习笔记之十一
- 2011
- 2011
- 2011
- 2011
- 2011
- 2011
- 2011
- 2011
- swift3.0中弹出框
- 大数据学习——Mahout入门
- win7下python2.7安装 pip,setuptools的正确方法(亲测)
- 测试人员面试自动化测试必问题
- helloworld
- IPSC 2011
- 数据库<5.2>
- 读程序 POJ2136 Vertical Histogram
- (线段树) 简单 区间求和
- LeetCode1.TwoSum(C)
- Spring学习:类的自动检测及bean的注册(注解)
- 活动选择问题
- 面向对象设计原则
- can-bus器件,控制器,收发器