51nod 咖啡馆

Noder咖啡馆里面有N个座位,每天会有若干个顾客来店里面消费,会得到相应的服务。一个顾客占一个位置,顾客离开之后位置就会空出来。如果顾客来了之后没有位置,那么顾客就会直接离开,也就得不到服务。

现在已知座位数N,以及一天之内顾客来走的顺序,请统计一下有多少顾客没有得到服务。
 收起

输入

单组测试数据。
第一行有一个整数N(1<=N<= 20 )。
第二行有若干个大写字母,表示顾客的来和走。字母是成对出现的,字母的第一次出现表示顾客来到了咖啡馆,字母的第二次出现表示该顾客离开了咖啡馆。每一种字母最多出现一对。没有座位的顾客总是在那些正在接受服务的顾客离开之前离开。

输出

输出一个整数,表示有多少顾客没有接受服务。

输入样例

样例输入1
2
ABBAJJKZKZ
样例输入2
3
GACCBDDBAGEE

输出样例

样例输出1
0
样例输出2
1

今天下午没事做,做了这道题,没想到花了我一下午时间,太水了- -,直接代码,思路就是有几个顾客在喝咖啡,如果达到要求的值则使未收到服务的人加一,代码如下:

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
string g;
int l[100000],z[100000];
int main() {
    int a,b,c=0,d,e,f=1,n=0,h=0,x;
cin>>a;
cin>>g;
for(b=1;b<g.size();++b)
   {c=0;
       for(d=b-1;d>=0;--d)
{
    if(g[b]!=g[d]&&f<a) c++;
    else if(g[b]==g[d]&&f<a) {f--;c=0;break;}
     else if(g[b]==g[d]&&f==a) {c=1000;break;}
     else if(g[b]!=g[d]&&f==a) c++;
}
if(c==b&&f<a) f++;
else if(c==b&&f==a) {n++;z[h]=b;h++;}
else if(c==1000)        ///难点就在这,当f==a,它有好几种可能,比如3个座位,abcda与abcdee有不同的结果,因为e是没有受到服务,不能让f-1,所以有了下面的代码。
{x=0;
     for(d=0;d<=h-1;++d)
        if(g[z[d]]!=g[b]) x++;
     else {x=0;break;}
     if(x==h) f--;

}

   }
cout<<n;
    return 0;
}
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值