TYVJ 1154 买饭队列 解题报告
啊啊啊啊,越来越没用了,这么简单的题不知道提交了多少次。!~~
直接模拟就是,不好维护的是最大高度,因为高度的范围是(0, maxin),但是这个maxint是pascal的,是32767,所以果断用used[i]保存高度为i的有多少人。
代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX 500000
int used[32768];
int queue[MAX];
int head, rear;
int count;
int max;
void enqueue(int k)
{
count++;
used[k]++;
queue[rear] = k;
rear = (rear + 1) % MAX;
if(k > max){
max = k;
}
}
void exqueue(void)
{
int i;
int k;
count--;
k = queue[head];
used[k]--;
if(max == k && used[k] == 0){
for(i = k - 1; i > 0; i--){
if(used[i]){
break;
}
}
max = i;
}
head = (head + 1) % MAX;
}
int main(int argc, char **argv)
{
int i;
int n;
int a, b;
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
scanf("%d", &n);
for(i = 1; i <= n; i++){
scanf("%d", &a);
switch(a){
case 1:
printf("%d\n", count);
break;
case 2:
exqueue();
break;
case 3:
scanf("%d", &b);
enqueue(b);
break;
case 4:
printf("%d\n", max);
break;
}
}
return 0;
}
浙公网安备 33010602011771号