zoukankan      html  css  js  c++  java
  • L1-049 天梯赛座位分配 (20 分)

    天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位参赛选手。令每校选手排成一列纵队,第 i+1 队的选手排在第 i 队选手之后。从第 1 所学校开始,各校的第 1 位队员顺次入座,然后是各校的第 2 位队员…… 以此类推。如果最后只剩下 1 所学校的队伍还没有分配座位,则需要安排他们的队员隔位就坐。本题就要求你编写程序,自动为各校生成队员的座位号,从 1 开始编号。

    输入格式:

    输入在一行中给出参赛的高校数 N (不超过100的正整数);第二行给出 N 个不超过10的正整数,其中第 i 个数对应第 i 所高校的参赛队伍数,数字间以空格分隔。

    输出格式:

    从第 1 所高校的第 1 支队伍开始,顺次输出队员的座位号。每队占一行,座位号间以 1 个空格分隔,行首尾不得有多余空格。另外,每所高校的第一行按“#X”输出该校的编号X,从 1 开始。

    输入样例:

    3
    3 4 2
    

    输出样例:

    #1
    1 4 7 10 13 16 19 22 25 28
    31 34 37 40 43 46 49 52 55 58
    61 63 65 67 69 71 73 75 77 79
    #2
    2 5 8 11 14 17 20 23 26 29
    32 35 38 41 44 47 50 53 56 59
    62 64 66 68 70 72 74 76 78 80
    82 84 86 88 90 92 94 96 98 100
    #3
    3 6 9 12 15 18 21 24 27 30
    33 36 39 42 45 48 51 54 57 60



     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <iostream>
     6 #include <algorithm>
     7 #include <cmath>
     8 #include <queue>
     9 #include <set> 
    10 using namespace std;
    11 #define  pi acos(-1.0)
    12 typedef long long ll;
    13 const int N  =150;
    14 set<int>se;
    15 set<int>::iterator it;
    16 vector<int>ve[N];
    17 int a[N],n;
    18 int  main()
    19 {
    20     scanf("%d",&n);
    21     for(int i=1;i<=n;i++){
    22         scanf("%d",&a[i]);
    23         a[i]*=10;
    24     }
    25     int flag=0,cnt=1;
    26     for(int i=1;;i++){
    27         i%=n;
    28         if(i==0) i=n;
    29         if(se.count(i)==1) continue;
    30             ve[i].push_back(cnt);
    31             //要先判断se.size 再判断是否可以插入i
    32             //如果顺序反了,会出现 79 81的情况。 
    33         if(se.size()==n-1){
    34             flag=1;
    35             cnt+=2;
    36         }
    37         if(ve[i].size()==a[i])  se.insert(i);     
    38         if(se.size()==n) break;
    39         if(flag==0) cnt++;
    40     }
    41     for(int i=1;i<=n;i++){
    42         printf("#%d
    ",i);
    43         for(int j=0;j<ve[i].size();j++){
    44             printf("%d%c",ve[i][j],(j+1)%10==0?'
    ':' ');
    45         }
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    173. Binary Search Tree Iterator
    199. Binary Tree Right Side View
    230. Kth Smallest Element in a BST
    236. Lowest Common Ancestor of a Binary Tree
    337. House Robber III
    449. Serialize and Deserialize BST
    508. Most Frequent Subtree Sum
    513. Find Bottom Left Tree Value
    129. Sum Root to Leaf Numbers
    652. Find Duplicate Subtrees
  • 原文地址:https://www.cnblogs.com/tingtin/p/10524166.html
Copyright © 2011-2022 走看看