• 用32个int记录1024个任务状态,任务ID为1~1024,任务初始状态都是未完成

  • 函数功能:输入两个任务ID,将第一个任务设为已完成,并检测第二个任务是否已完成(完成返回1,未完成返回0)

  • 32个int,每个int32位,共32*32=1024位,刚好每一位表示一个任务的状态

import java.util.Scanner;

/**
 * 用32个int记录1024个任务状态,任务ID为1~1024,任务初始状态都是未完成
 * 函数功能:输入两个任务ID,将第一个任务设为已完成,并检测第二个任务是否已完成(完成返回1,未完成返回0)
 *
 * 32个int,每个int32位,共32*32=1024位,刚好每一位表示一个任务的状态
 */
public class T4GameTaskTag {


    public static void main(String[] args) {
        //tasks[0]:1~32号任务  tasks[1]:33~64号任务
        int[] tasks = new int[32];
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int id1 = in.nextInt();
            int id2 = in.nextInt();
            System.out.println(setAndCheck(tasks, id1, id2));
        }
    }

    public static int setAndCheck(int[] tasks, int id1, int id2) {
        if (!checkInParams(id1, id2)) {
            return -1;
        }
        //任务在tasks[n]  0~31
        int n = (id1 - 1) / 32;
        //设置id1的任务为已完成
        int bit = (id1 - 1) % 32;
        tasks[n] = tasks[n] | (1 << bit);
        //检查id2的任务是否已完成
        int n2 = (id2 - 1) / 32;
        int bit2 = (id2 - 1) % 32;
        //使用无符号右移:由于java没有无符号数
        return (tasks[n2] & (1 << bit2)) >>> bit2;
    }

    private static boolean checkInParams(int id1, int id2) {
        boolean b1 = id1 >= 1 && id1 <= 1024;
        boolean b2 = id2 >= 1 && id2 <= 1024;
        return b1 && b2;
    }
}