L1-049 天梯赛座位分配java题解


import java.util.*;
//假如只剩一个学校的学员没有排(假设已经排到了第80个),
// 下一个要排这个学校了,假如说上一个排的学校还是它,那就要从82开始排,
// 但是如果上一个不是这个学校,就要从81开始排,往后排间距都是2;

public class ArrangeSeat {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int group_num = scanner.nextInt();
        scanner.nextLine();
        String info = scanner.nextLine();
        String[] arr = info.split(" ");
        List<int[]> lst = new ArrayList<>();
        int[] arr_idx = new int[arr.length];
        int sum = 0;
        for(int i = 0; i < arr.length; i++){
            int tmp = Integer.parseInt(arr[i]);
            int[] arr_num = new int[tmp*10];
            sum+=tmp*10;
            lst.add(arr_num);
        }

        int count = 1;
        int step = 1;
        List<Integer> recordLastLst = new ArrayList<>();
        while (sum>0){
            Map<Integer,Integer> map = new HashMap<>();
            for(int j = 0; j < lst.size(); j++){
                int[] arrtmp = lst.get(j);
                if(arr_idx[j] != arrtmp.length){
                    arrtmp[arr_idx[j]++] = count++;
                    recordLastLst.add(j);
                    map.put(j,0);
                }
            }
            if(map.size() == 1){
                int size = recordLastLst.size();
                boolean last_school_change = true;
                if(size > 1){
                    last_school_change = recordLastLst.get(size - 1) - recordLastLst.get(size - 2) != 0;
                }
                for(int key: map.keySet()){
                    if(!last_school_change){
                        int[] arrtmp = lst.get(key);
                        arrtmp[arr_idx[key]-1] += step++;
                    }
                }
            }
            sum--;
        }

        for(int i = 0; i < lst.size(); i++){
            System.out.println("#"+(i+1));
            int[] tmparr = lst.get(i);
            for(int t = 0; t < tmparr.length; t++){
                if(t%10==0){
                    System.out.print(tmparr[t]);
                }
                else{
                    System.out.print(" "+tmparr[t]);
                }
                if((t+1)%10==0){
                    System.out.println();
                }
            }

        }
    }
}


  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值