天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 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

2018年天梯赛的第一题,比赛的时候题目没看懂,可惜了。

今天来补题也是不知道自己错在哪,一直有组数据过不了,后面参考了https://blog.csdn.net/moonlighttlj/article/details/79777016才AC。

如果有什么数据欢迎指教~

题目思路的话,其实就是按照题目的意思模拟,多注意写细节吧!

20分代码:

//Asimple
#include <bits/stdc++.h>
#define CLS(a, v) memset(a, v, sizeof(a))
using namespace std;
typedef long long ll;
const ll maxn = 100 + 5;
int n, m, res, ans, len, T, k, num, sum, t, cnt;
vector<int> a[maxn];
int b[maxn];
bool vis[maxn]; void input() {
ios_base::sync_with_stdio(false);
cin >> n;
for(int i=0; i<n; i++) {
cin >> b[i];
sum += b[i]*10;
}
CLS(vis, false);
int cas = 1, man = 0;
while( sum -- ) {
for(int i=0; i<n; i++) {
if( a[i].size() < b[i]*10 ) {
a[i].push_back(cas);
if( man+1 == n ) cas += 2;
else cas += 1;
}
if ( vis[i]==false && a[i].size()>=b[i]*10 ) {
man ++;
vis[i] = true;
}
}
}
for(int i=0; i<n; i++) {
cout << "#" << i + 1 << endl;
for(int j=0; j<a[i].size(); j++) {
cout << a[i][j];
if( j%10 == 9 ) cout << "\n";
else cout << " ";
}
}
} int main(){
input();
return 0;
}

  16分代码:

感谢浙江中医药大学的同学提出的数据:

3
3 1 1

4
3 3 4 3

 
代码还在改。。。。
//Asimple
#include <bits/stdc++.h>
#define CLS(a, v) memset(a, v, sizeof(a))
using namespace std;
typedef long long ll;
const ll maxn = 100 + 5;
int n, m, res, ans, len, T, k, num, sum, t, cnt;
vector<int> a[maxn];
int b[maxn]; void input() {
ios_base::sync_with_stdio(false);
cin >> n;
for(int i=0; i<n; i++) {
cin >> b[i];
sum += b[i]*10;
}
int cas = 1, man = 0;
while( sum -- ) {
for(int i=0; i<n; i++) {
if( a[i].size() < b[i]*10 ) {
a[i].push_back(cas);
if( man+1 == n ) cas += 1;
else cas ++;
}
}
man = 0;
for(int i=0; i<n; i++) {
if( a[i].size() >= b[i]*10 ) man ++;
}
if( man +1 >= n ) cas += 1;
}
for(int i=0; i<n; i++) {
cout << "#" << i + 1 << endl;
for(int j=0; j<a[i].size(); j++) {
cout << a[i][j];
if( j%10 == 9 ) cout << "\n";
else cout << " ";
}
}
} int main(){
input();
return 0;
}

  2018年4月4日改:

    20分AC,emmmm,感觉AC了终于知道题目的一些意思了。包括一些数据为什么是那个样子。

  每次分配人之后,先按之前的编号把下一个编号确定,然后再判断是不是只有最后一个队。真的有点坑。

//Asimple
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn = + ;
int n, m, res, ans, len, T, k, num, sum, t, cnt;
vector<int> a[maxn];
int b[maxn]; void input() {
ios_base::sync_with_stdio(false);
cin >> n;
for(int i=; i<n; i++) {
cin >> b[i];
sum += b[i]*;
}
int cas = , man = ;
while( sum -- ) {
for(int i=; i<n; i++) {
if( a[i].size() < b[i]* ) {
a[i].push_back(cas);
if( man+ >= n ) cas += ;
else cas ++;
man = ;
for(int i=; i<n; i++) {
if( a[i].size() >= b[i]* )
man ++;
}
}
}
}
for(int i=; i<n; i++) {
cout << "#" << i + << endl;
for(int j=; j<a[i].size(); j++) {
cout << a[i][j];
if( j% == ) cout << "\n";
else cout << " ";
}
}
} int main(){
input();
return ;
}

L1-049. 天梯赛座位分配的更多相关文章

  1. PAT L1 049 天梯赛座位分配

    天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位 ...

  2. L1-049 天梯赛座位分配​​​​​​​

    L1-049 天梯赛座位分配 (20 分) 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i ...

  3. L1-049 天梯赛座位分配 (20 分)

    L1-049 天梯赛座位分配 (20 分)(Java解法) 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所 ...

  4. L1-1 天梯赛座位分配

    天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位 ...

  5. PAT天梯赛 L1-049 天梯赛座位分配

    题目链接:点击打开链接 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] ...

  6. L1-049 天梯赛座位分配 (20 分)

    天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位 ...

  7. pta l1-49(天梯赛座位分配)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805081289900032 题意:给定n个高校,每个高校m[i ...

  8. PAT 天梯赛 L1-049. 天梯赛座位分配 【循环】

    题目链接 https://www.patest.cn/contests/gplt/L1-049 思路 用一个二维数组来保存一个学校每个队员的座位号 然后需要判断一下 目前的座位号 与该学校当前状态下最 ...

  9. 团体程序设计天梯赛 L1-049. 天梯赛座位分配(测试数据+不同方法)

    Data: /*33 2 1#11 4 7 10 13 16 19 22 25 2831 33 35 37 39 41 43 45 47 4951 53 55 57 59 61 63 65 67 69 ...

随机推荐

  1. 通俗讲解:PoW共识机制与以太坊的关系、Ghost协议 及 PoS共识机制的变种---Casper

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  2. JDK 5.0 注解知识快速进阶

    1.了解注解 对于Java开发人员来说,在编写代码时,除了源程序外,还会使用Javadoc标签对类.方法或成员变量进行注释,一遍使用Javadoc工具生成和源代码配套的Javadoc文件,如@para ...

  3. CF3A Shortest path of the king

    The king is left alone on the chessboard. In spite of this loneliness, he doesn't lose heart, becaus ...

  4. 向comboboxEdit中动态添加数据库中保存的用户自定义单位制的名称

    if (radioGroup1.SelectedIndex == 2) { bool _Flag = true; sm.SetLciVisible(lciDelete, _Flag); sm.SetL ...

  5. java JDK环境的配置

    1.  在Administrator用户变量中新建: 变量名:JAVA_HOME 变量值:C:\Program Files (x86)\Java\jdk1.7.0_01 2.  在Administra ...

  6. Luogu 1583 - 魔法照片 - [简单排序题]

    题目链接:https://www.luogu.org/problemnew/show/P1583 题目描述一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人. ...

  7. Chrome 调试技巧

    Chrome 调试技巧 1.alert 这个不用多说了,不言自明. 可参考:https://www.cnblogs.com/Michelle20180227/p/9110028.html 2.cons ...

  8. CentOS7.6 安装Docker

    删除已安装的Docker # Uninstall installed docker sudo yum remove docker \ docker-client \ docker-client-lat ...

  9. DELPHI中完成端口(IOCP)的简单分析(3)

    DELPHI中完成端口(IOCP)的简单分析(3)   fxh7622关注4人评论7366人阅读2007-01-17 11:18:24   最近太忙,所以没有机会来写IOCP的后续文章.今天好不容易有 ...

  10. sale.order

    # 初始化一个变量用来记录产品类型line_type = ''# 循环明细行for product in self.options: # 拿到该明细行的产品类型 product_type = prod ...