zoukankan      html  css  js  c++  java
  • L1-1 天梯赛座位分配

    题解

    这题说实话有坑!!!

    因为题目没有直接说,如果前一个人和后一个人是同一所学校的需要隔位就作,如果不是同一个学校的就不需要隔位就坐。

    这样说的原因为是,例如数据

    数据一

    2
    2 1
    

    答案

    #1
    1 3 5 7 9 11 13 15 17 19
    21 23 25 27 29 31 33 35 37 39
    #2
    2 4 6 8 10 12 14 16 18 20
    

    数据二

    2
    1 2
    

    答案

    #1
    1 3 5 7 9 11 13 15 17 19
    #2
    2 4 6 8 10 12 14 16 18 20
    22 24 26 28 30 32 34 36 38 40
    

    下面的需要从22起头,第一组数据从21起头就可以了,如果没有理解到这一点,这题可能很久都给过不了,气死我了!!!

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    queue<int> q[105];
    int team[105];
    int id=0;
    
    void getNum(vector<int>& sc,int step) {
        int sz=sc.size();
        for (int i=0;i<10;i++) {
            for (int j=0;j<sz;j++) {
                id+=step;
                q[sc[j]].push(id);
            }
        }
    }
    
    int main()
    {
        // freopen("in.txt","r",stdin);
        // freopen("out.txt","w",stdout);
        int n;
        scanf("%d",&n);
        vector<int> que,tmp;
        for (int i=0;i<n;i++) {
            scanf("%d",&team[i]);
            que.push_back(i);
        }
        int step=1,last,flag=0;
        while (que.size()) {
            int sz=que.size();
            if (sz==1) {
                step=2;
                if (!flag&&last!=que[0]) {
                    id--;
                    flag=1;
                }
            }
            getNum(que,step);
            last=que[sz-1];
            que.clear();
            for (int i=0;i<n;i++) {
                team[i]--;
                if (team[i]>0) {
                    que.push_back(i);
                }
            }
    
        }
        for (int i=0;i<n;i++) {
            printf("#%d
    ",i+1);
            int cnt=0;
            int print=0;
            while (!q[i].empty()) {
                if (print==0) {
                    print=1;
                }
                else {
                    printf(" ");
                }
                printf("%d",q[i].front());
                q[i].pop();
                cnt++;
                if (cnt%10==0) {
                    printf("
    ");
                    print=0;
                }
            }
        }
        return 0;
    }
    
  • 相关阅读:
    UIViewController生命周期
    NSTImer重复执行任务
    IOS平台汉字转拼音方案
    @properties指针说明
    自定义yum仓库
    man手册、zip备份
    ln 软连接与硬连接
    fdisk分区规划和添加wap交换空间
    window部署ftp服务器
    配置附加权限和LDAP
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/12336510.html
Copyright © 2011-2022 走看看