纠结的模拟题
#include <stdio.h>
int q[510];
int n, m;
int a;
int b, ans;
bool put()
{
int counter = 0;
int check = 0;
for (int i = 1; i <= n; i ++){
if (!q[i]){
counter ++;
if (!check){
check = i;
}
if (counter == b){
for (int j = check; j <= i; j ++){
q[j] = a;
}
ans = check;
return true;
}
}
else {
check = counter = 0;
}
}
return false;
}
bool check(int s)
{
for (int i = s+1; i <= n; i ++){
if (q[i])return true;
}
return false;
}
void move()
{
for (int i = 1; i <= n; i ++){
if(q[i])
{
int t = i - 1;
while(q[t] == 0 && t > 0) t--;
q[t+1] = q[i];
if(t+1 != i) q[i] = 0;
}
}
}
int main()
{
int t;
scanf("%d", &t);
int nc = 0;
while (t --){
scanf("%d %d", &n, &m);
printf("Case %d:/n", ++nc);
char x[10];
for (int i = 1; i <= n; i ++){
q[i] = 0;
}
for (int i = 0; i < m;i ++){
scanf("%s", x);
if (x[0] == 'N'){
scanf("%d%d", &a, &b);
ans = -1;
if (!put()){
move();
if (put()){
printf("%d/n", ans);
}
else {
printf("-1/n");
}
}
else {
printf("%d/n", ans);
}
}
else {
scanf("%d", &a);
for (int i = 1; i <= n; i ++){
if (q[i] == a){
q[i] = 0;
}
}
}
}
}
return 0;
}