코드)
#include <cstdio>
#include <vector>
using namespace std;
int truck[1000];
int main() {
int n, len, l;
scanf("%d %d %d", &n, &len, &l);
for(int i=0; i<n; i++) {
scanf("%d", &truck[i]);
}
int time=0, idx=0;
int pWeight=l;
int tPos[1000]={0, };
vector<int> moving;
while(true) {
if(idx<n && truck[idx]<=pWeight) {
pWeight-=truck[idx];
moving.push_back(idx);
idx++;
continue;
}
while(moving.size()) {
bool pass=false;
for(int i=0; i<moving.size(); i++) {
int idx2=moving[i];
tPos[idx2]++;
if(tPos[idx2]>len) {
pWeight+=truck[idx2];
pass=true;
moving.erase(moving.begin()+i);
break;
}
}
time++;
//앞에 다리를 통과하는 동시에 다리로 들어오기 때문에 시간을
//한 번 더 세는 것이 된다. 그래서 time--를 해준다.
if(pass && idx<n && pWeight>=truck[idx]) time--;
if(pass) break;
}
if(idx==n && moving.size()==0) break;
}
printf("%d\n", time);
return 0;
}
댓글 없음:
댓글 쓰기