【发布时间】:2012-03-09 05:36:05
【问题描述】:
一个计算机处理器有 N 个任务要执行 (1 ≤ N ≤ 50,000)。第 i 个任务需要 Ti 秒的处理时间(1 ≤ Ti ≤ 1,000,000,000)。处理器按如下方式运行任务:每个任务按顺序运行,从 1 到 N,持续 1 秒,然后处理器从任务 1 开始重复此操作。任务完成后,将不再运行迭代。为每个任务确定任务完成后经过的总运行时间。 输入
输入的第一行包含整数 N,接下来的 N 行包含整数 T1 到 TN。 输出
输出 N 行,其中第 i 行包含一个整数,表示任务 i 已处理所经过的时间。
例子
输入: 5 8 1 3 3 8
输出: 22 2 11 12 23
第二个任务在第一次迭代中完成,完成时间为 2 秒。在第三次迭代中,第三个和第四个任务分别在 11 秒和 12 秒完成。最后,在第八次迭代中,第一个和最后一个任务分别在 22 秒和 23 秒完成。
什么方法??
这是我的代码:
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
int total=0;
for(int i=0;i<n;i++)
{cin>>a[i];total+=a[i];}
int b[n];
int j=0;
for(int i=0;i<total;i++)
{
while(a[j%n]==0) j++;
a[j%n]-=1;
if(a[j%n]==0) b[j%n]=i+1; j++;
}
for(int i=0;i<n;i++)
cout<<b[i]<<endl;
system("pause");
return 0;
}
但这在 spoj 上没有被接受...
【问题讨论】:
-
我会根据您的缩进样式(或缺少缩进样式)拒绝它。但是嗯。
标签: c++ algorithm round-robin