第6.6节 priority_queue 问题 A: 任务调度

news/2024/7/7 19:09:59

问题 A: 任务调度

题目描述

  • 读入任务调度序列,输出n个任务适合的一种调度方式。

输入

  • 输入包含多组测试数据。
  • 每组第一行输入一个整数n(n<100000),表示有n个任务。
  • 接下来n行,每行第一个表示前序任务,括号中的任务为若干个后序任务,表示只有在前序任务完成的情况下,后序任务才能开始。若后序为NULL则表示无后继任务。

输出

  • 输出调度方式,输出如果有多种适合的调度方式,请输出字典序最小的一种。

样例输入

4
Task0(Task1,Task2)
Task1(Task3)
Task2(NULL)
Task3(NULL)

样例输出

Task0 Task1 Task2 Task3

思考

  • 设置优先级,第一行输出的第一个把优先级设置为0,之后的优先级数值一次是前1个优先级数值加1,优先级依次降低。按照优先级高的排序依次输出。

AC

#include <stdio.h>
#include <string.h>
#include <queue>
#include <map>
using namespace std;
struct fruit{
	int num;	//编号 
	int task;	//任务 
	friend bool operator < (fruit f1,fruit f2){
		if(f1.task != f2.task)	return f1.task >f2.task;	//按照优先级 
		else	return f1.num >f2.num;	//按照编号 
	}
}f1,f2;
int main(){
	char str[100001];
	int n;
	while(scanf("%d",&n)!=EOF){
		getchar();
		priority_queue<fruit> q;
		map<int ,int> p;	//存放优先级
		for(int i=0;i<n;i++){
			scanf("%s",str);
			int i1=4,n1=0;
			while(str[i1] != '(')	//第一个任务
				n1=n1*10+str[i1++]-'0';
			fruit f;
			f.num=n1;
			if(i==0){	//是否为第一个任务 
				f.task=0;
				q.push(f);	//压入前序任务 
			}else	f.task = p[f.num];
			int i2=6,n2=0;
			if(str[i2]=='N')	continue;
			while(i2<strlen(str)){
				if(str[i2] >= '0' && str[i2] <='9')	//字符转换为整型
					n2=n2*10+str[i2]-'0';
				if(str[i2] == ',' || str[i2] ==')'){
					if(p[n2]==0){	//队列中没有 
						fruit ff;
						ff.num = n2;
						ff.task=f.task+1;
						q.push(ff);	//压入后续任务
						n2=0;
						p[n2]=ff.task;
					}
				}
				i2++;
			} 
		} 
		while(q.size()>=1){
			fruit f=q.top();	//访问队首元素 
			q.pop();	//令队首元素出队 
			printf("Task%d ",f.num); 
		}
	} 	
	return 0;
}

http://www.niftyadmin.cn/n/4388905.html

相关文章

CountDownLatch----线程计数器

问题 最近我在处理一批数据&#xff0c;用多线程来处理&#xff0c;我想知道大概多久能处理完。比如我先用多线程处理 100 条数据&#xff0c;统计下用时&#xff0c;然后根据总的数据量就可以大概估算出处理完这批数据要多久。 使用 CountDownLatch 计时 思路&#xff1a;用两…

PHP多进程初探 --- 开篇

[原文地址&#xff1a;https://blog.ti-node.com/blog...] 实际上PHP是有多线程的&#xff0c;只是很多人不常用。使用PHP的多线程首先需要下载安装一个线程安全版本&#xff08;ZTS版本&#xff09;的PHP&#xff0c;然后再安装pecl的pthread扩展。 实际上PHP是有多进程的&…

c++ 输入一个分数输出最简分式_分式及增长量的大小比较

大小比较。一定要结合选项&#xff01;比如题干问你&#xff0c;某一年哪个月最高&#xff0c;我们不需要从1月算到12月&#xff0c;我们只需要算选项中提到的四个月即可。分式大小比较&#xff1a;分子大分母小的大&#xff0c;分子小分母大的小&#xff1b;分子分母同大同小的…

Tachyon brief intro

作者&#xff1a;刘旭晖 Raymond 转载请注明出处 Email&#xff1a;colorant at 163.com BLOG&#xff1a;http://blog.csdn.net/colorant/ Tachyon是AmpLab的Li Haoyuan所开发的一个基于内存的分布式文件系统&#xff0c;出发点是作为AMPLAB的BDAS的一个组成部分 总体设计思想…

使用Python3开发的一款Android截屏神器

Android设备截屏神器 只需要一根数据线将手机连上电脑&#xff08;已打开USB调式并已允许调试&#xff09; 便可以在电脑上轻松的对手机进行截屏了&#xff0c;再也不需要先截个图然后登录个QQor微信将截屏发送至电脑了。 同时支持Windows和Mac平台哦 需要安装Python3.7 不会安…

python职业发展方向_软件测试行业职业发展路径-技术方向

大家好&#xff0c;我是小文&#xff0c;今天给大家介绍下软件测试行业的职业发展路径&#xff0c;很多同学不清楚这个行业的职业发展&#xff0c;工作职责&#xff0c;特别是刚入行的从业者。接下来我带大家一起了解下我们的软件测试行业。小文讲测试-软件测试行业职业发展路径…

NoSQL Intro

在过去几年&#xff0c;关系型数据库一直是数据持久化的唯一选择&#xff0c;数据工作者考虑的也只是在这些传统数据库中做筛选&#xff0c;比如SQL Server、Oracle或者是MySQL。甚至是做一些默认的选择&#xff0c;比如使用.NET的一般会选择SQL Server&#xff1b;使用Java的可…

联发科有没有高端处理器_联发科或将成华为芯片主要供应商,中高端市场也采用联发科芯片...

美国商务部对于华为的“实体清单”管控限制将会进一步收紧&#xff0c;而这将对华为的芯片生产造成一定的负面影响&#xff0c;作为华为的麒麟处理器供应商&#xff0c;台积电已经在美国商务部收紧管控限制之前承接华为麒麟芯片的大批量订单&#xff0c;外媒爆料称台积电通过协…