poj1250

博客主要围绕计算不能立即享受日光浴的人数展开。通过设置两个集合,一个存放能立即享受服务的人,另一个存放不能立即服务到的人。给出了具体的代码实现,最终根据计算结果输出相应信息。

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

题目大意:计算来了不能立即享受日光浴的人数目。设置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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值