PTA 1014 Waiting in Line

아니요, 코드 제목을 저장해 두세요. 줄을 서서 업무 사고방식을 처리합니다. 아날로그 대기열, 초당 작업 주의점을 처리합니다.문제풀이를 보니 잘못 이해한 것 같은데... 17시 이전에 시작한 업무는 모두 끝낼 수 있기 때문에 17:00을 넘을 수도 있고 복잡한 코드를 바탕으로 수정할 수도 있고, 시간이 있으면 다시 쓸 수도 있어요.
#include
using namespace std;
struct que{
    vector<int>pel;
    vector<int>index;
}q[20];
int ans[1005],ask[1005];
int main(){
    int n,m,k,qe;
    cin>>n>>m>>k>>qe;
    for(int i=1;i<=k;i++){
        cin>>ask[i];
    }
    memset(ans,-1,sizeof(ans));
    //ans               
    //   
    int consumer=1; 
    for(int i=1,j=0;i<=k;i++,j=(j+1)%n,consumer++){
        if((q[j].pel.size()==m)&&(j==0))
            break;
    //  cout<<q[j].pel.size()<if(q[j].index.size()==0){
            ans[i]=0;
        }else{
            //          
            int tmpindex=q[j].index[q[j].index.size()-1];
            ans[i]=ans[tmpindex]+ask[tmpindex];
        //  cout<q[j].pel.push_back(ask[i]);
        q[j].index.push_back(i);
    } 
    //     
    for(int i=1;i<=540;i++){
        for(int j=0;j//          
            if(q[j].pel.size()==0)
                continue;
            q[j].pel[0]= q[j].pel[0]-1;
            if(q[j].pel[0]==0){//      ,       
                vector<int>::iterator it =q[j].pel.begin(); 
                q[j].pel.erase(it);
                it=q[j].index.begin();
                int tmpindex = *it;
                q[j].index.erase(it);
                if(consumer<=k){//       
                    if(q[j].index.size()==0){
                        ans[consumer]=ans[tmpindex]+ask[tmpindex];
                    }else{
                        //          
                        int frontindex=q[j].index[q[j].index.size()-1];
                        ans[consumer]=ans[frontindex]+ask[frontindex];
                    }
                    q[j].pel.push_back(ask[consumer]);
                    q[j].index.push_back(consumer);

                    consumer++;
                }else{
                    continue;
                }
            }
        }
    }

    for(int i=0;iint qer;
        cin>>qer;
        if(ans[qer]==-1||ans[qer]>=540)//   5   
        cout<<"Sorry
"
; else{ int hour=8+(ans[qer]+ask[qer])/60,mini=(ans[qer]+ask[qer])%60; printf("%02d:%02d
"
,hour,mini); } } return 0; }

좋은 웹페이지 즐겨찾기