本题的关键在于:每有一个雪人融化成为“0”的体积,就把它移到整个数组的最前面去。这样可以减少用时。第一次交的时候卡在这个上面了,time limit exceeded!
#include<iostream>
#include<vector>
using namespace std;
int N;
const int size = 100000;
int melt[size],build[size];
int idx = 0;
int main()
{
scanf("%d",&N);
for(int i = 0;i < N;i++)
scanf("%d",&build[i]);
for(int i = 0;i < N;i++)
scanf("%d",&melt[i]);
for(int i = 0; i < N ; i++)
{
int ans = 0;
int melting = melt[i];
for(int j = idx;j <= i;j++)
{
if(build[j] > melting)
{
build[j] -= melting;
ans += melting;
}
else
{
ans += build[j];
idx ++;
for(int k = idx - 1 ;k < j;k++)
{
if(build[k])
{
build[j] = build[k];
build[k] = 0;
break;
}
}
}
}
if(i == 0)
printf("%d",ans);
else
printf(" %d",ans);
}
return 0;
}