这道题我一开始想了很久,但是fst 了。而且赛后想的也不是很清楚,所以有必要把它单独分出来讲清楚。
题意:
现在在log中有n条记录。然后每一条记录都写成:"+ri"或是"-ri"的形式。(其中+是代表有人进入,-代表有人出去)ri代表的是进入人的号码。
然后问你房间中最多同时有几个人存在。
思路:
我们需要两个变量max与sum,其中max是记录房间的最大容量的,sum是表示当前还有多少空位。
1)如果一个人进来了,如果当前没有空位的话,那么就max++,使房间容量增大。
如果当前还有空位的话,那么使sum--就好,因为我们只需要减少还有的空位,而无需增大房间容量。
2)如果一个人出去了,如果它没有被标记过的话,那么max++,说明他原先就在房间里的,所以房间容量也要增大。
否则就只要sum++就好,说明空位增加了。然后取消那个人的标记。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
#define me rng_58
#define maxn 111
int r[maxn],vis[1000010];
int main(){
int n;
char ss[5]={0};
scanf("%d",&n);
int sum=0,rmax=0,ans=0;
//这里的sum表示的是房间里面当前还剩下几个房间;
//rmax代表的是房间的最大容量是多少
for(int i=1;i<=n;i++){
scanf("%s%d",ss,&r[i]);
if(ss[0]=='+'){
if(!sum) rmax++;
else sum--;
vis[r[i]]=1;
}
else{
if(!vis[r[i]]){
rmax++;
sum++;
}
else sum++,vis[r[i]]=0;
}
ans=max(ans,rmax);
}
printf("%d\n",ans);
}
虽然rating掉了,但是依旧要怀着自信的心去追求梦想,加油,相信自己会进步!