制限時間:1.0秒
メモリ制限は:256.0メガバイト
問題の説明
- 座席割当区画に対処する単純なシートレール発券システム割り当てアルゴリズムを実装します。
- キャリッジ20行を仮定し、それぞれ5席。便宜のために、我々はすべての座席を与えるために1-100番号を使用して、最初の行が番号51である、第二行は番号106であるので、最初の行20は、100から96です。
- 予約時に、人がいない以上5以下の一枚の以上のチケット、アップを購入することができます。この多くのチケットが同じ行番号隣接シートに配置することができる場合、それは隣接座席の最小数であるべきです。そうでない場合は(隣接するか否かに関係なく)いくつかの空席に最小数に配置されるべきです。
- 初期のチケット購入がすべてではないと仮定すると、今、あなたはこれらの指示に対処する、いくつかの命令のチケットを与えます。
入力形式
- 入力整数nの最初の行は、命令のチケットの数を含みます。
- 第二行は、隣接する2つの数値の間の空間分離を使用して、購入する投票数を示し、nは整数、1と5の間の各整数pを含んでいます。
出力フォーマット
- N出力線、命令の処理結果に対応する各ライン。
- 昇順でチケット命令P、P出力チケット番号について。
サンプル入力
4
2 5 4 2
サンプル出力
1 2
6 7 8 9 10
11 12 13 14
3 4
サンプル説明
- 2枚の購入チケットは、1,2シートを得ました。
- 5枚のチケットを購入、10にシート6を得ました。
- 4枚の購入チケットは、14にシート11を得ました。
- 2枚の購入チケットは、3,4シートを得ました。
評価尺度の例とで合意
- 評価のためのすべてのユースケース、1≤N≤100、すべてのチケットの数とを超えない100。
コード
import java.util.Scanner;
public class Main {
static boolean[][] seat=new boolean[20][5];
public static void main(String[] args) {
int n,num;
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
for(int i=0;i<n;i++) {
num=sc.nextInt();
get(num);//出票
System.out.println();
}
sc.close();
}
static void get(int num) {
int temp=0;
for(int i=0;i<20;i++) {
for(int j=0;j<5;j++) {
if(!seat[i][j]){
temp++;
}else {
temp=0;//有一个间断的就重新开始计算
}
if(temp==num) {
for(int k=j+1-num;k<=j;k++) {
seat[i][k]=true;//标记出票
System.out.print(5*i+k+1+" ");//输出结果
}
return;
}
}
temp=0;//一排没有满足条件的也清零
}//如果有连续的座位则直接出连续的票数,并且直接结束方法
for(int i=0;i<20;i++) {
for(int j=0;j<5;j++) {
if(!seat[i][j]) {
seat[i][j]=true;//对出票的座位做标记
System.out.print(5*i+j+1+" ");
}
}
}//没有连续的票坐则使用单独的票,并且按照大小出票
}
}