0%

腾讯2017招聘第二题

游戏任务标记

题目描述

游戏里面有很多各式各样的任务,其中有一种任务玩家只能做一次,这类任务一共有1024个,任务ID范围[1,1024]。请用32个unsigned int类型来记录着1024个任务是否已经完成。初始状态都是未完成。 输入两个参数,都是任务ID,需要设置第一个ID的任务为已经完成;并检查第二个ID的任务是否已经完成。 输出一个参数,如果第二个ID的任务已经完成输出1,如果未完成输出0。如果第一或第二个ID不在[1,1024]范围,则输出-1。

输入描述:

输入包括一行,两个整数表示人物ID.

输出描述:

输出是否完成

解法分析

用32个unsigned int型的数,一共1024个构造一个hash table.将第一个数存入表中, 判断第二个数是否在表中.
怎么觉得略简单.在牛客网做题中直接判断两个数是否相等居然也是可以的.我一定有哪里没有注意到.

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int main() {
unsigned int assign_list[32] = {0};
int i, j;
cin >> i >> j;
if(0 <= i && i <= 1024 && 0 <= j && j <= 1024)
{
assign_list[i/32] |= 1 << (i % 32);
if(assign_list[i/32] & assign_list[j/32])
{
cout << 1;
}
else
cout << 0;
}
else
cout << -1;
return 0;
}