题目大意:计算来了不能立即享受日光浴的人数目。设置2个集合,s存放来了能立即享受服务的人,ss放置来了不能立即服务到的人(及需要离开的人,但不一定马上离开,记录这种人的作用是便于知道后面第二次出现时是没服务到离开,而不是新的人进来),注意一定要先判断这个人是否在ss中。0ms AC
#include <iostream>
#include <set>
#include <cstring>
using namespace std;
const int maxn=100;
int main()
{
char a[maxn];
int b,n,lev,len;
bool ful;
set<char>s,ss;//s放置来了有位置且没走的人,ss放置来了没位置,但还没走的人
while(scanf("%d",&b)&&b){
scanf("%s",a);
len=strlen(a);
n=b;
ful=false;
lev=0;
s.clear();
ss.clear();
for(int i=0;i<len;i++){
if(ss.count(a[i])){
ss.erase(a[i]);
continue;
}
if(!ful&&!s.count(a[i])){
s.insert(a[i]);
n--;
if(n==0){
ful=true;
}
continue;
}
if(s.count(a[i])){
if(n<b){
n++;
ful=false;
}
s.erase(a[i]);
continue;
}
if(ful&&!s.count(a[i])){
lev++;
ss.insert(a[i]);
}
}
if(lev==0)puts("All customers tanned successfully.");
else printf("%d customer(s) walked away.\n",lev);
}
return 0;
}