#include <iostream>
#include <vector>
using namespace std;
std::vector<unsigned int> bits(32, 0);
int checkTask(int a, int b) {
if (a < 1 || a > 1024 && b < 1 || b > 1024) {
return -1;
}
int idx1 = (a - 1) / 32;
int bit1 = (a - 1) % 32;
bits[idx1] |= (1u << bit1);
int idx2 = (b - 1) / 32;
int bit2 = (b - 1) % 32;
return (bits[idx2] >> bit2) & 1u;
}
int main() {
int a, b;
cin >> a >> b;
cout << checkTask(a, b) << endl;
return 0;
}
// 64 位输出请用 printf("%lld")
解题思路
主要的点是,将第一个任务存为已完成,然后判断第二个任务是否完成。用的是动态数组来存储任务是否完成。
第一步:先检查边界
第二步:将第一个任务在无符号整数数组上设置为 1。首先使用除法找到其对应 32 位的下标,再使用求余得到具体位数,通过与 1u(1u表示0000 0000 0000 0000 0000 0000 0000 0001)左移的方法将其设置为 1。举例:ID1 = 33,得出 idx1 = 1,bit1 = 0。
第三步:判断第二个任务是否完成。先做右移,再做按位与运算。



京公网安备 11010502036488号