腾讯2017秋招笔试编程题:游戏任务标记 [python]

'''
[编程题] 游戏任务标记
时间限制:1秒
空间限制:32768K
游戏里面有很多各式各样的任务,其中有一种任务玩家只能做一次,这类任务一共有1024个,
任务ID范围[1,1024]。请用32个unsigned int类型来记录着1024个任务是否已经完成。初始状态都是未完成。 
输入两个参数,都是任务ID,需要设置第一个ID的任务为已经完成;并检查第二个ID的任务是否已经完成。 
输出一个参数,如果第二个ID的任务已经完成输出1,如果未完成输出0。如果第一或第二个ID不在[1,1024]范围,则输出-1。 
输入描述:
输入包括一行,两个整数表示任务ID.




输出描述:
输出是否完成


输入例子1:
1024 1024


输出例子1:
1
'''



'''
解题思路:设置权重
  本题的难点使用32个unsigned int类型来记录着1024个任务是否已经完成,也就是说每一个无符号整型要可以代表32个任务是否完成。
  而无符号整型的范围是0~2^32-1。
  如果我们把1024个任务按顺序平均分成32个小组,每个小组就有32个任务。
  我们给每个小组内的32个任务按顺序赋予权值,权值的大小为 2^0,2^1...2^31。
  如果该小组内的第1,3,7个任务完成,其余任务没完成,则记录该组任务完成情况的无符号数为 2^0 + 2^2 + 2^6。
  按照这个思路是可以实现给定任务id来判断任务完成情况的,具体实现比较复杂,我这里不赘述,
  当然,如果只需完成这道题目,不必考虑地如此复杂,对上述思路进行适当简化就能做出来了。
'''


'''
代码运行结果:
答案正确:恭喜!您提交的程序通过了所有的测试用例

'''


id1, id2 = [int(each) for each in input().split()]

tasks = [0]*32
weights = [2**i for i in range(32)]
if id1 > 1024 or id2 > 1024:
    print(-1)
else:
    id1 -= 1
    id1_remain = id1 % 32
    id1_pos = id1 // 32
    tasks[id1_pos] = weights[id1_remain]
    id2 -= 1
    id2_remain = id2 % 32
    id2_pos = id2 // 32
    if tasks[id2_pos] == weights[id2_remain]:
        print(1)
    else:
        print(0)


你可能感兴趣的:(腾讯2017秋招笔试编程题)