问题:占座位

问题 : 占座位
时间限制: 1 Sec 内存限制: 128 MB
提交: 324 解决: 120
[提交][状态][讨论版]
题目描述
sun所在学校的教室座位每天都是可以预占的。
一个人可以去占多个座位,而且一定是要连续的座位,如果占不到他所要求的这么多座位,那么他就一个座位也不要了。为了降低难度,每次分配座位按座位号从小到大查找,采用最先适配法分配座位。
输入
输入有多组数据。
每组数据输入座位排数n,0

#include<iostream>
using namespace std;
struct place
{
    int begin;
    int end;
};
int main()
{
    int n,m,k,id,num;
    int in[101]={0},seat[10001]={0};
    place a[101]; //用来记录id所占位置的起止   
    string order;
    cin>>n>>m;
    int cnt=n*n;  //剩余座位数 
    cin>>k;
    for(int i=0;i<k;i++)
    {
        cin>>order;
        if(order=="in")
        {
            cin>>id>>num;
            if(in[id]==0 && num<=cnt){
                int j=0,flag=0;
                for(int i=0;i<n*n;i++)   //have a try
                {
                    if(seat[i]==0){
                        j++;
                        if(j==num){
                            cnt-=num;
                            in[id]++,flag++;
                            a[id].end=i;a[id].begin=i-num;
                            cout<<"yes"<<endl;
                            break;
                        }
                    }else{
                        j=0;
                    }
                }
                if(flag==0){
                    cout<<"no"<<endl; //没有找到连续座位 
                }
            }else{
                cout<<"no"<<endl;
            }
    //输入out的情况              
        }else{
            cin>>id;
            if(in[id]!=0){
                in[id]--;
                cnt+=(a[id].end-a[id].begin);
                for(int i=a[id].begin;i<=a[id].end;i++)
                {
                    seat[i]=0;
                }
            }
        }
    }
    return 0;
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值