2021/03/28
2016 KB
0 ms
#include <iostream>
#include <queue>
int n, w, L;
std::queue<int> q;
int bridge[102];
int bridge_begin, bridge_end;
int ans;
void input_faster()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
}
void input()
{
int tmp;
input_faster();
std::cin >> n >> w >> L;
bridge_begin = 1;
bridge_end = w;
for (int i = 0 ; i < n ; i++)
{
std::cin >> tmp;
q.push(tmp);
}
ans = 0;
}
int bridge_state()
{
int cnt = 0;
for (int i = bridge_begin ; i <= bridge_end ; i++)
if (bridge[i])
cnt++;
return (cnt);
}
void bridge_move()
{
for (int i = bridge_begin ; i <= bridge_end + 1 ; i++)//bridge_end + 1 is for begin_end to 0
bridge[i - 1] = bridge[i];
}
int bridge_weight()
{
int weight = 0;
for (int i = bridge_begin ; i <= bridge_end ; i++)
weight += bridge[i];
return (weight);
}
void move_action()
{
int top, weight;
bridge_move();
top = q.front();
weight = bridge_weight();
if (!q.empty() && weight + top <= L && !bridge[bridge_end]) // when truck can move in right side, and birdge of end side is clear
{
q.pop();
bridge[bridge_end] = top;
}
}
void solve()
{
while (!q.empty() || bridge_state()) //when q is not empty, or bridge is not clear
{
move_action();
ans++;
}
}
void print_val()
{
std::cout << ans;
}
int main()
{
input();
solve();
print_val();
return (0);
}