zoukankan      html  css  js  c++  java
  • CCF CSP 201609-2 火车购票

    思路:

    1.设立一个二维数组来表示i行j列是否被购买;
    2.设立一个一维数组来表示第i行最多剩几个连坐;
    3.对于每个订单,扫一遍一维数组,如果能找到连坐就买连坐,同时修改两个数组中的信息;如果不能找到连坐就开始遍历二维数组,找到空位就购买,同时修改两个数组中的信息;

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define p_b(a) push_back(a)
    #define rp(i,n) for(int i=0;i<n;i++)
    bool seat[20][5];//座位被购买情况
    int maxn[20];//某排最大相邻数 
    int main(){
    	int n;
    	cin>>n;
    	fill(maxn,maxn+20,5);
    	rp(i,n){
    		int p;
    		cin>>p;
    		int posx=0;
    		while(posx<20&&maxn[posx]<p) posx++;
    		if(posx<20){
    			int posy=0;
    			while(seat[posx][posy]) posy++;
    			int beg=posx*5+posy+1;
    			cout<<beg;
    			for(int j=1;j<p;j++) cout<<' '<<beg+j;
    			fill(&seat[posx][posy],&seat[posx][posy]+p,true);
    			maxn[posx]-=p;
    		}else{
    			vector<int> v;
    			rp(j,20) rp(k,5){
    				if(!seat[j][k]){
    					seat[j][k]=true;
    					maxn[j]--;
    					v.p_b(j*5+k+1);
    					if(!(--p)) goto here;
    				}
    			}
    			here:cout<<v[0];
    			for(int i=1;i<v.size();i++) cout<<' '<<v[i];
    		}
    		putchar('
    ');
    	}
    	return 0;
    }
    
  • 相关阅读:
    The Sixth Assignment
    The fifth assigiment
    网络编程
    面向对象
    python数据类型之集合
    python数据类型之列表
    python数据类型之字符串
    python数据类型之字典
    python数据类型之元组
    常用模块
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12308927.html
Copyright © 2011-2022 走看看