算法五

打印日程表

算法描述

  • 多线程系统非常混乱,因为各种交错的执行时常出现
  • 针对这个问题,我们会模拟这样一个场景
  • 每个线程的输出会被描述成一个字符串
  • 例如,字符串“AB”表示:1个单位时间跑完后,线程会打印出“A”,另一个单位时间跑完后,线程打印出“B”,第三个单位时间跑完后,打印出“A”(返回到开始)
  • 你会接收到threads执行的描述、每个线程所分配的时间片(slices)
  • 每个slice将以这样的形式给出:“Thread# Time”,Thread# 是从0开始编号的,放在threads数组中,Time 是指每个线程执行所需的单位时间
  • slices的每个元素按照他们执行的顺序呈现
  • 每个线程被执行到特定位置后,下次再执行时,从该位置继续往下执行

参数定义

  • 类名 PrintScheduler
  • 方法 getOutput
  • 输入参数 vector <string>, vector <string>
  • 输出 string
  • 方法声明 string getOutput(vector <string> threads, vector <string> slices)

限制条件

  • threads包含[1,50]个元素
  • threads中的每个元素包含[1,50]个字符,每个字符都是大写字母
  • slices包含[1,50]个元素,都是以下格式:”Thread# Time”,其中Thread是整数,在[0,k-1]之间,其中k是threads元素的个数
  • Time是整数,在[1,50]之间

例子

  • 输入
    • threads: {“AB”,”CD”}
    • slices: {“0 1”,”1 1”,”0 1”,”1 2”}
  • 输出
    • ”ACBDC”

测试实例

测试实例

  • 实例一

    • 输入
      • threads = {“ABCDE”}
      • slices: {“0 20”,”0 21”}
    • 输出
      • ”ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEA”
  • 实例二

    • 输入
      • {“A”,”B”}
      • {“1 10”,”0 1”,”1 10”,”0 2”}
    • 输出
      • ”BBBBBBBBBBABBBBBBBBBBAA”
  • 实例二

    • 输入
      • {“A”}
      • {“0 1”}
    • 输出
      • ”A”
点赞