HDU 4864(Task)

本文介绍了一种使用贪心算法解决特定任务分配问题的方法。通过按任务难度从大到小排序,并寻找与任务难度最接近的机器完成任务,实现了高效的任务分配。通过实例演示了算法的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:略。

思路:贪心。题目很特别的给出了获得金钱的计算公式为500*x+2*y,y<=100,所以可以按任务时间从大到小排序,

然后每个任务找出大于该任务难度且与难度最接近的机器完成该任务。

#include <set>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;

typedef long long LL;
const int N = 100005;

struct Task {
    int x, y;

    bool operator<(const Task &rhs) const {
        if(x == rhs.x)
            return y > rhs.y;
        return x > rhs.x;
    }
} task[N];

int main() {
    int n, m;
    while(cin >> n >> m) {
        multiset<int> S[105];
        LL ans = 0;
        int maxLevel = 0, count = 0;
        for(int i = 0; i < n; i++) {
            int x, y;
            scanf("%d%d", &x, &y);
            S[y].insert(x);
            maxLevel = max(maxLevel, y);
        }
        for(int i = 0; i < m; i++) {
            scanf("%d%d", &task[i].x, &task[i].y);
        }
        sort(task, task + m);
        for(int i = 0; i < m; i++) {
            int x = task[i].x;
            int y = task[i].y;
            for(int j = y; j <= maxLevel; j++) {
                if(S[j].empty())
                    continue;
                multiset<int>::iterator iter = S[j].lower_bound(x);
                if(iter == S[j].end() || *iter < x) {
                    continue;
                } else {
                    count++;
                    ans += 500ll * x + 2ll * y;
                    S[j].erase(iter);
                    break;
                }
            }
        }
        cout << count << " " << ans << endl;
    }
    return 0;
}


### 杭州电子科技大学操作系统实验一概述 Linux内核编译及添加系统调用是杭州电子科技大学操作系统课程中的一个重要实验内容[^3]。此实验旨在让学生深入了解Linux系统的内部工作原理以及如何扩展其功能。 #### 实验目标 通过本实验,学生能够掌握以下技能: - 编译完整的Linux内核源码树并安装新构建的内核镜像文件。 - 修改现有的系统调用来创建自定义版本或者新增加新的系统调用接口。 - 使用`gcc`工具链来交叉编译适用于不同架构的目标平台上的可执行程序。 - 测试所编写的新特性是否按预期正常运行。 #### 主要操作步骤 为了完成上述任务,具体的操作流程如下所示: 1. **准备环境** 安装必要的依赖包以支持后续的工作,比如`build-essential`, `libncurses-dev`等开发库。 2. **获取官方发布的稳定版内核源代码** 可以从kernel.org下载最新的稳定发行版本作为基础进行定制化改造。 3. **配置选项设置** 利用菜单驱动式的界面(`make menuconfig`)调整各项参数直至满足需求为止。 4. **实际改动部分——向系统引入额外的时间统计函数** - 在`arch/x86/entry/syscalls/syscall_64.tbl`中注册一个新的条目用于表示即将加入的服务项; - 更新头文件`include/linux/syscalls.h`声明原型以便其他组件引用; - 开发具体的业务逻辑位于`kernel/sys.c`之内实现期望的行为; - 构建整个项目结构并通过一系列单元检验确认无误之后部署至真实环境中试用。 5. **验证成果的有效性** 设计专门的应用场景模拟真实的请求过程从而评估性能指标是否达到标准范围以内。 ```c // syscall_64.tbl 中增加一行 335 64 sys_my_syscall __x64_sys_my_syscall // syscalls.h 添加声明 asmlinkage long sys_my_syscall(int pid); // sys.c 实现方法体 SYSCALL_DEFINE1(my_syscall, int, pid){ struct task_struct *task; unsigned long user_time, kernel_time; rcu_read_lock(); task = find_get_pid(pid); if (!task) { rcu_read_unlock(); return -ESRCH; /* No such process */ } getrusage(task, RUSAGE_BOTH, &ru); user_time = ru.ru_utime.tv_sec*HZ + ru.ru_utime.tv_usec/(1000000/HZ); kernel_time = ru.ru_stime.tv_sec*HZ + ru.ru_stime.tv_usec/(1000000/HZ); rcu_read_unlock(); // 将结果复制给用户空间缓冲区 copy_to_user(buf, (void*)&user_time, sizeof(unsigned long)); copy_to_user((char*)buf+sizeof(unsigned long), (void*)&kernel_time, sizeof(unsigned long)); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值