李思晓又一个WordPress站点

浏览: 111

游戏任务标记 牛客-幽流书堂曲径通幽巅峰公子 ,隰有苌楚巴伐利亚玫瑰。夹岸百里,婀娜其实。 每周学习一个算法。游戏里面有很多各式各样的任务?


游戏任务标记 牛客-幽流书堂

曲径通幽巅峰公子 ,隰有苌楚巴伐利亚玫瑰。夹岸百里,婀娜其实。 每周学习一个算法。
游戏里面有很多各式各样的任务,其中有一种任务玩家只能做一次,这类任务一共有1024个,任务ID范围[1曾毅的老婆,1024]。请用32个unsigned int类型来记录着1024个任务是否已经完成祁可欣微博。马小翠浙江公务员招考初始状态都是未完成。 输入两个参数,都是任务ID,需要设置第一个ID的任务为已经完成;并检查第二个ID的任务是否已经完成。 输出一个参数,如果第二个ID的任务已经完成输出1,如果未完成输出0。如果第一或第二个ID不在[1,1024]范围,则输出-1。
1到1024一共1024个任务王丽达老公 ,unsigned类型占用4字节即32位,32个unsigned值占用1024位,所以显然是要充分利用整型数值的每位资源。
自从之前作过Gameloft的精度压缩后,就想再找一个这类充分利用整型资源存储信息的题,真是踏破铁鞋无觅处。
unsigned数组中每一项存储32个任务的进度信息野猫驯养法,我们可以从高位开始存储,也可以从低位。低位起更方便。然后再声明一个长度为32的unsigned类型数组,当我们想要查询某一任务的进度,首先应该根据ID除以32确定其所在的下标,再根据余数从低位向高位数相应的位数,从而找到该值。找到之后就可以对其进行修改或查询的操作了。题目中还有一个容错功能的需求力王中王 ,所以我定义了两个宏。为了防止宏出现不可预料的错误,我在最外层嵌套了一层圆括号。
//Author: Koan#include<iostream>#define MAX(a, b) ((a > b) ? a : b)#define MIN(a, b) ((a < b) ? a : b)using namespace std;int main(){ int ninmuid1, ninmuid2; unsigned ninmu[32] = {0}; cin >> ninmuid1 >> ninmuid2; if(MAX(ninmuid1, ninmuid2) > 1024 || MIN(ninmuid1, ninmuid2) < 1) cout << -1; else { ninmu[ninmuid1 / 32] |= (1 << ninmuid1 % 32);//将任务进度置1 cout << (ninmu[ninmuid2 / 32] & (1 << ninmuid2 % 32)) 2588港币? 1 : 0;//输出当前任务进度 } return 0;}
需要提示的一点是,由于宏是单纯的字符串替换尊贵囚徒,不经过编译,没有类型检查天和骨通贴膏 ,所以一定要注意自己的声明是否会产生优先级错误等问题。
以上。
全文详见:https://p66p.cn/5597.html

TOP