201609-2 火车购票
题面:
思路:按题意模拟即可
我的代码
#include <bits/stdc++.h>
using namespace std;
int a[30][10];
void solve(int);
int toPos(int,int);
int main()
{
int n,p;
cin>>n;
while(n--)
{
cin>>p;
solve(p);
}
return 0;
}
int toPos(int x,int y)
{
return (x-1)*5+y;
}
void solve(int p)
{
for(int i=1;i<=20;++i)
{
for(int j=1;j+p-1<=5;++j)
{
bool ok = true;
for(int k=j;k<=j+p-1;++k)
{
if(a[i][k])
{
ok = false;
break;
}
}
if(ok)
{
for(int k=j;k<=j+p-1;++k)
a[i][k] = 1,
printf("%d%c",toPos(i,k),k==j+p-1?'\n':' ');
return;
}
}
}
for(int i=1;i<=20&&p>0;++i)
{
for(int j=1;j<=5&&p>0;++j)
{
if(!a[i][j])
{
a[i][j] = 1;
printf("%d%c",toPos(i,j),p==1?' ':'\n');
if(--p==0) return;
}
}
}
}