1912 咖啡馆
Noder咖啡馆里面有N个座位,每天会有若干个顾客来店里面消费,会得到相应的服务。一个顾客占一个位置,顾客离开之后位置就会空出来。如果顾客来了之后没有位置,那么顾客就会直接离开,也就得不到服务。
现在已知座位数N,以及一天之内顾客来走的顺序,请统计一下有多少顾客没有得到服务。
收起
输入
第一行有一个整数N(1<=N<=20 )。
第二行有若干个大写字母,表示顾客的来和走。字母是成对出现的,字母的第一次出现表示顾客来到了咖啡馆,字母的第二次出现表示该顾客离开了咖啡馆。每一种字母最多出现一对。没有座位的顾客总是在那些正在接受服务的顾客离开之前离开。
输出
输出一个整数,表示有多少顾客没有接受服务。
输入样例
样例输入1
2
ABBAJJKZKZ
样例输入2
3
GACCBDDBAGEE
输出样例
样例输出1
0
样例输出2
1
题解:
利用一个bool数组记录顾客是否在咖啡馆里,然后模拟顾客进出的过程。
Code:
#include <bits/stdc++.h>
using namespace std;
char b[1000000];
bool a[1000000];
int main(){
int n,ans=0,cnt=0;
cin>>n;
cin>>b;
int l=strlen(b);
memset(a,sizeof(a),0);
for(int i=0;i<l;i++){
if(a[b[i]-'A']){
cnt--;
ans++;
}
if(!a[b[i]-'A']&&cnt<n){
a[b[i]-'A']=1;
cnt++;
}
}
ans=l/2-ans;
cout<<ans<<endl;
}