这道题我一开始想了很久,但是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掉了,但是依旧要怀着自信的心去追求梦想,加油,相信自己会进步!
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-01 04:52:21