题意:
给定几个床位,规定每次客人进来的时候,如果有床位即开始服务,如果没床位就走人。问走了多少个客人。
思路:
其实这道题非常简单,wa的原因往往是自己想复杂了,比如题意有一点要明确就是上面所说的如果没床位就走人,
即使从序列中看他还没走,看上去好像是在排队,其实即使排队的过程中前面有占着床位的人走了,排队的人也不会补上去。这里不知道就坑了多少英雄好汉。
所以,
ans只和当n=0,vis[i]=false;即当床位是满座的时候且有新的客人来的时候,ans++。
恩,没错,就是这么简单的模拟一下即可。
总结:这道题没啥意义,而且题目出的比较不合常理,容易坑爹。
#include<iostream>
#include<string>
#include<algorithm>
#define max(a,b) (a>b?a:b)
#define abs(a) ((a)>0?(a):-(a))
#define min(a,b) (a<b?a:b)
using namespace std;
int n;
bool vis[30];
string s;
int main()
{
while(scanf("%d",&n),n)
{
memset(vis,0,sizeof(vis));
cin>>s;
int ans=0;
for(int i=0;i<s.length();i++)
{
int t=s[i]-'A';
if(!vis[t])
{
if(n<=0)
{
n--;
ans++;
}
else
{
n--;
}
}
else
{
n++;
}
vis[t]=!vis[t];
}
if(!ans)
printf("All customers tanned successfully.\n");
else
printf("%d customer(s) walked away.\n",ans);
}
return 0;
}