AcWing 3233. 火车购票
原题链接
简单
作者:
城府_7
,
2021-03-05 14:05:39
,
所有人可见
,
阅读 441
算法1
(暴力枚举) $O(n^2)$
C++ 代码
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1e5+5;
int a[maxn];
int n;
int vis[maxn];
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
bool flag1=false;
for(int j=0;j<100;j++){
if(vis[j]==0){//每次都从头开始枚举
bool flag=false;
for(int l=j;l<j+x;l++){
if(vis[l]!=0||l/5!=j/5){ //如果不在同一排或者不满足
flag=true;
break;
}
}
if(flag){
int t=j/5+1;
j=t*5-1;//则就跳到下一排
}else{
for(int l=j;l<j+x;l++){
vis[l]=1;
printf("%d ",l+1);
}
printf("\n");
flag1=true;
}
if(flag==false){
break;
}
}
}
if(flag1==false){//如果所有的排都不满足 则挨个枚举
int cnt=0;
for(int i=0;i<100;i++){
if(vis[i]==0){
printf("%d ",i+1);
vis[i]=1;
cnt++;
if(cnt>=x){
break;
}
}
}
printf("\n");
}
}
return 0;
}