一个计算机处理器有 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 接受...