打印任务排序

标题:打印任务排序 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
某个打印机根据打印队列执行打印任务。打印任务分为九个优先级,分别用数字1~9表示,数字越大优先级越高。打印机每次从队列头部取出第一个任务A,然后检查队列余下任务中有没有比A优先级更高的任务,如果有比A优先级高的任务,则将任务A放到队列尾部,否则就执行任务A的打印。请编写一个程序,根据输入的打印队列,输出实际的打印顺序

from collections import deque

while True:
    try:
        nums = list(map(int, input().split(",")))
        nums_list = list(enumerate(nums))
        queue = deque()
        for num in nums_list:
            queue.append((num[0], num[1]))
        ans, count = list(), 0
        while True:
            if len(queue) <= 1:
                break
            task = queue.popleft()
            cur_max = max(queue, key=lambda x: x[1])
            if task[1] >= cur_max[1]:
                ans.append((task[0], count))
                count += 1
            else:
                queue.append(task)
        ans.append((queue[0][0], count))
        print(",".join(map(lambda x: str(x[1]), sorted(ans, key=lambda x: x[0]))))

    except:
        break

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str[] = scanner.nextLine().split(",");
        Queue<Integer> queue = new LinkedList<>();
        int i = 0;
        int h[] = new int[str.length];
        for (String data : str) {
            Integer tmp = Integer.valueOf(data);
            queue.add(i);
            h[i++] = tmp;
        }

        int k = 0;
        int vis[] = new int[str.length];
        Arrays.fill(vis, 0);
        int ans[] = new int[str.length];
        while (!queue.isEmpty()) {
            int cur = queue.poll();
            for (i = 0; i < str.length; i++) {
                if (h[cur] < h[i] && vis[i] == 0) {
                    break;
                }
            }
            if (i == str.length) {
                ans[cur] = k++;
                vis[cur] = 1;
            } else {
                queue.add(cur);
            }
        }
        for (i = 0; i < str.length - 1; i++) {
            System.out.print(ans[i] + ",");
        }
        System.out.println(ans[str.length - 1]);
    }
}
//manfen
import sys 
for line in sys.stdin:
    rankQueue = line.strip().split(",")
    


def rank(rq):
    top_rank = max(int(rank) for rank in rq)
    
    rq_ls = ["" for i in range(len(rq))]
    pos_ls = [i for i in range(len(rq))]

    curr_pos = 0
    curr_prior = 0
    while rq:
        if int(rq[0]) == top_rank:
            rq_ls[pos_ls.pop(0)] = str(curr_prior)
            curr_prior += 1
            rq.pop(0)
            if rq:
                top_rank = max(int(rank) for rank in rq)
                curr_pos = pos_ls[0]
        else:
            rq.append(rq.pop(0))
            pos_ls.append(pos_ls.pop(0))
            #pos_ls.append(curr_pos)
            curr_pos = pos_ls[0]
    return ",".join(rq_ls)

print(rank(rankQueue))




全部评论

相关推荐

05-12 17:28
已编辑
门头沟学院 硬件开发
ldf李鑫:不说公司名祝你以后天天遇到这样的公司
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务