POJ-1250-Tanning Salon
2011-03-14 22:40
260 查看
题意
参考了Discuss里面的。
如:
2 ABBAJJKZKZ
2代表有俩个座位,第一个A代表A来了,第一个B代表B来了,第二个B代表B走了,第二个A代表A也走了。字母代表顾客,当字母第一次出现的时候代表这个顾客来了,第二次出现代表该顾客走了,如果顾客是在没接收salon的时候就走了,公司的损失数就加一。
解决方法
用了两个string存储“正在享受服务的人员”和“不能享受服务的人员”。依次遍历输入串,根据不同的情况,进行相应的处理即可。详见代码。
代码
参考了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; }
相关文章推荐
- poj 1250 Tanning Salon 【模拟题】
- poj 1250 Tanning Salon
- poj 1250 Tanning Salon
- POJ 1250 Tanning Salon(简单模拟)
- POJ 题目1250 Tanning Salon (链表应用)
- poj 1250(Tanning Salon)
- poj 1250 Tanning Salon
- POJ1250:Tanning Salon
- POJ - 1250 Tanning Salon
- poj 1250 Tanning Salon(模拟)
- poj 1250 Tanning Salon
- POJ 1250 tanning salon
- poj 1250 Tanning Salon 和hotel一样
- POJ 1250 Tanning Salon
- 【队列】poj1250 Tanning Salon
- POJ 1250 Tanning Salon(我的水题之路——字母表数组标记)
- POJ 1250 Tanning Salon
- POJ 1250 Tanning Salon
- poj 1250 Tanning Salon
- POJ1250 Tanning Salon 简单模拟