老实说,我觉得我的代码没那么糟糕这是我想出的第五个版本,我认为这是迄今为止最好的但是当我在foo.bar控制台上运行测试时,它会说“超过了时间限制”
你看到我能让这个更快的方法吗我现在不知所措。。。。。
这是自述文件:
排队等候
你几乎准备好了去摧毁羊排末日
设备,但保护底层系统的安全检查点
羊排的数量将会是个问题你可以拿一个
没有任何警报,这是伟大的!除了作为
兰姆达指挥官的助手,你知道检查站是
即将接受自动审查,这意味着你的破坏
会被发现你的伪装被揭穿-除非你能欺骗
自动审查系统。
为了欺骗系统,您需要编写一个程序来返回相同的
警卫们在检查完后会得到的安全支票
检查了所有工人幸运的是,兰姆达指挥官的
对效率的渴望不允许排长队,所以
检查站警卫已经找到了加快通过率的方法。
卫兵们没有检查每一个经过的工人
相反,在记录每个人的安全ID的同时检查每个排队的人,然后
让这条线填满。一旦他们做了,他们就会过去
再次排队,这次离开最后一个工人他们继续
这样做,每次都会让一个工人离开生产线,但是
记录他们检查过的人的安全ID,直到他们跳过
整条线,在这一点上,他们异或所有工人的ID
记在支票上,然后离开去吃午饭。幸运的是
工人的有序性使他们总是排成数字
订购时不要有任何间隙。
例如,如果行中的第一个worker具有id 0和安全性
检查点行包含三个工人,流程如下:
0 1 2/3 4/5 6/7 8其中Guards的xor(^)校验和是
0^1 ^2 ^3 ^4 ^6==2。
同样,如果第一个worker有id 17,而检查点有4个
工人,流程如下:17 18 19 20/21 22 23/24 25
26/27 28 29/30 31 32产生校验和
17^18^19^20^21^22^23^25^26^29==14。
所有工人ID(包括第一个工人)都在0到之间
2000000000,并且检查点行将始终至少为
一个工人长。
根据这些信息,编写一个函数应答(start,length),它
将通过输出相同的
警卫通常会在午饭前提交支票你刚刚
有足够的时间找出第一个要检查的工人的ID
(开始)和自动
检查发生,因此程序必须生成正确的校验和
只有这两个价值观。
语言文字
要提供python解决方案,请编辑solution.py以提供java
解决方案,编辑solution.java
测试用例
输入:
(int)开始=0
(int)长度=3输出:
(内景)2
输入:
(int)开始=17
(int)长度=4输出:
(内景)14
使用verify[file]测试您的解决方案,并查看它是如何工作的。当你
已完成代码编辑,请使用submit[文件]提交
回答。如果您的解决方案通过了测试用例,它将被删除
从你的主文件夹。
我的解决方案是:
def answer(start, length):
f = 0
r = 0
while f < length:
for i in range(start, (start+length) - f):
r ^= i
f += 1
start = range(start, start+length)[-1] + 1
return r
最佳答案
提示1
异或5^6^7^8等于异或(1^2^3^4^5^6^7^8)^(1^2^3^4)。
换言之,您应该集中精力寻找一个函数,它是前n个自然数的异或,然后您可以使用此函数来查找任何整数范围的异或。
提示2
要查找前n个自然数的异或,请考虑二进制表示:
000
001
010
011
100
101
110
111
把注意力集中在一个位上,想想当你计算所有数字的异或时得到的模式。