我最喜欢吃饭了
有n个人,m个窗口,给出n个人打完饭出门的顺序,求顺序是否合理。
思路:有m条队伍,我们可以用m个数组来模拟这个队伍,如果给出的序列能够按顺序放入这m条队伍中,并且满足每条队伍的人的编号都是从小到大的即合理,否则不合理。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N = 5e3 + 9;
int a[N];
int stk[N][N], top[N];
//stk[i]表示第i条队伍,top[i]来记录第i条队伍的人数
void solve()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++)
{
int j;
//将a[i]放入队伍中
for (j = 1; j <= m; j++)
{
//如果第i个人的编号 > 队伍j最后一个人的编号,则第i个人入队
if (a[i] > stk[j][top[j]])
{
stk[j][++top[j]] = a[i];
break;
}
}
//如果a[i] < 所有队伍的队尾编号,则他无法入队,所以不合理
if (j == m + 1)
{
cout << "Karashi lovelove\n";
return;
}
}
//所有的人都入队了,且满足编号从小到大,合理
cout << "Karashi cblcd\n";
return;
}
int main()
{
int _ = 1;
//cin>>_;
while (_--) solve();
return 0;
}