PAT1014 Waiting in Line (30)
순수 시 뮬 레이 션 코드 1 자신 이 쓴 h 시 뮬 레이 션 코드 2 개 를 썼 습 니 다.17: 00 은 갱 점 입 니 다. 출근 하기 전에 받 은 솥 은 아무리 늦어도 끝내 야 합 니 다.
코드 1
#include
using namespace std;
#define MAXN 0x3f3f3f3f
int custom[10200];
int custom1[10200];
int query[10200];
int N,M,K,Q;
vector<int> window[30];
int finish[10200];
int allsize;
void add(int x,int index){
if(x-custom1[index]>=540){
printf("Sorry
");
}
else{
printf("%02d:%02d
",8+x/60,x%60);
}
}
int findMin(){
int m=MAXN;
for(int i=1;i<=N;i++){
if(window[i].size()&&custom[window[i][0]]window[i][0]];
}
}
return m;
}
int findWindow(){
int m=MAXN;
int emm=0;
for(int i=1;i<=N;i++){
int k=window[i].size();
if(kreturn emm;
}
int main(){
cin>>N>>M>>K>>Q;
for(int i=1;i<=K;i++){
cin>>custom[i];
custom1[i]=custom[i];//
}
allsize=K;//
for(int i=1;i<=K;i++){
//
window[(i-1)%N+1].push_back(i);
}
int now=0;//
while(1){
int m=findMin();//
now+=m;//
for(int i=1;i<=N;i++){
if(window[i].size()==0) continue;
custom[window[i][0]]-=m;// -m
if(!custom[window[i][0]]){
// 0
finish[window[i][0]]=now;//
window[i].erase(window[i].begin());//
allsize--;// --
}
}
int insert=findWindow();//
if(allsize==0){
//
int s;
for(int i=1;i<=Q;i++){
cin>>s;
add(finish[s],s);
}
return 0;
}
else{
for(int j=1;j<=N;j++){
//
int q=window[j].size();
if(q>M){
int ans=window[j][M];
if(j!=insert){
//
window[j].erase(window[j].begin()+M);
window[insert].push_back(ans);
}
break;
}
}
}
}
return 0;
}
코드 2
#include
using namespace std;
#define INF 0x3f3f3f3f
struct Customer{
int process;
int leave;
};
int main(){
int N,M,K,Q;
cin>>N>>M>>K>>Q;
vector cus(K);
for(int i=0;icin>>cus[i].process;
cus[i].leave=INF;
}
vector< queue<int> > winQueue(N);//
vector<int> timeBase(N,0);//
int p;
//
for(p=0;p// ,
for(p;pint tmp=INF;
int win=-1;
for(int i=0;iint top=winQueue[i].front();//
if(tmp>cus[top].leave){
// ,
win=i;
tmp=cus[top].leave;
}
}
cus[p].leave=timeBase[win]+cus[p].process;
timeBase[win]=cus[p].leave;
winQueue[win].pop();
winQueue[win].push(p);
}
for(int i=0;iint q;
cin>>q;
q--;
if(cus[q].leave-cus[q].process>=540){
//
cout<<"Sorry"<else{
printf("%02d:%02d
",8+cus[q].leave/60,cus[q].leave%60);
}
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.