2016년 10월 4일 화요일

ACM ICPC 인터넷 예선 L번

코드)
#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;
}

댓글 없음:

댓글 쓰기