这波出了点小问题,有个段错误没找出来,说是递归调用过多或者堆栈数组溢出,但感觉都不是,找了好半天。代码写的很简洁,就懒得重写了。 。
#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
vector<int>window_list[25];
int N,M,K,Q;
int timme[1010];
int fin_time[1010];
int main() {
cin>>N>>M>>K>>Q;
int i,j;
for(i=0; i<K; i++)
cin>>timme[i+1];
int empty=N*M;
for(i=0; i<K&∅ i++) {
window_list[i%N+1].push_back(i+1);
empty--;
}
int times=0;
while(times<9*60-1) {
times++;
for(j=1; j<=N; j++) {
if(--timme[window_list[j][0]]==0) {
fin_time[window_list[j][0]]=times;
window_list[j].erase(window_list[j].begin());
if(i+1<=K)
window_list[j].push_back(++i);
}
}
}
for(j=1;j<=N;j++){
if(window_list[j].size())
fin_time[window_list[j][0]]=times+timme[window_list[j][0]];
}
for(j=0; j<Q; j++) {
cin>>i;
if(fin_time[i]!=0)
printf("%02d:%02d\n",(8+fin_time[i]/60)%24,fin_time[i]%60);
else
printf("%s\n","Sorry");
}
return 0;
}
后续:
上网仔细研究了段错误的产生原因,经过排查,是因为window_list可能存在空列的情况,这个时候访问它的第一个顾客就会产生段错误。
修改后代码:
#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
vector<int>window_list[25];
int N,M,K,Q;
int timme[1010];
int fin_time[1010];
int main() {
cin>>N>>M>>K>>Q;
int i,j;
for(i=0; i<K; i++)
cin>>timme[i+1];
int empty=N*M;
for(i=0; i<K&∅ i++) {
window_list[i%N+1].push_back(i+1);
empty--;
}
int times=0;
while(times<9*60-1) {
times++;
for(j=1; j<=N; j++) {
if(window_list[j].size()&&--timme[window_list[j][0]]==0) {
fin_time[window_list[j][0]]=times;
window_list[j].erase(window_list[j].begin());
if(i+1<=K)
window_list[j].push_back(++i);
}
}
}
for(j=1;j<=N;j++){
if(window_list[j].size())
fin_time[window_list[j][0]]=times+timme[window_list[j][0]];
}
for(j=0; j<Q; j++) {
cin>>i;
if(fin_time[i]!=0)
printf("%02d:%02d\n",(8+fin_time[i]/60)%24,fin_time[i]%60);
else
printf("%s\n","Sorry");
}
return 0;
}