POJ-1250-Tanning Salon

本文介绍了一种使用两个字符串来模拟顾客在有限服务位的场景中排队和服务的过程。通过遍历输入字符串并根据当前服务状态调整两个字符串的内容,可以计算出因无法提供即时服务而离开的顾客数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意

参考了Discuss里面的。
如:
2 ABBAJJKZKZ
2代表有俩个座位,第一个A代表A来了,第一个B代表B来了,第二个B代表B走了,第二个A代表A也走了。字母代表顾客,当字母第一次出现的时候代表这个顾客来了,第二次出现代表该顾客走了,如果顾客是在没接收salon的时候就走了,公司的损失数就加一。

解决方法
用了两个string存储“正在享受服务的人员”和“不能享受服务的人员”。依次遍历输入串,根据不同的情况,进行相应的处理即可。详见代码。

代码

#include <iostream> using namespace std; string inServiceStr; //存储当前被服务的人员 string outServiceStr; //存储当前不能被服务的人员 int main() { int n; string s; while(cin >> n, n != 0) { cin >> s; inServiceStr.clear(); outServiceStr.clear(); int ans = 0; for(string::size_type i = 0; i != s.size(); i++) { char c = s[i]; string::size_type pos = inServiceStr.find(c); if(pos != string::npos) { /*若在inServiceStr找到c,则将其去掉。注意erase()的用法:若不带第二个参数,则默认去除pos下面所有字符。*/ inServiceStr.erase(pos, 1); continue; } pos = outServiceStr.find(c); if(pos != string::npos) { outServiceStr.erase(pos, 1); continue; } /*若在前面两个串均不能找到c*/ if(inServiceStr.size() < (unsigned)n) { inServiceStr.append(1, c); } else { outServiceStr.append(1, c); ans++; } } if(ans == 0) { cout << "All customers tanned successfully." << endl; } else { cout << ans << " customer(s) walked away." << endl; } } return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值