ZOJ5833 Tournament(递归打表)
题目链接:传送门
假思路:
根据题意要求,只能按字典序最小的方法安排比赛。
所以第一场必定是1和2比,3和4比。。。。
选手:1 2
对手:2 1
根据要求如果1与2比过赛了,1再与其它的人(不妨设为a)比赛的话,2就必须与(第一场与a比赛的人,不妨设为b)比赛。
因为要求字典序小,所以1应该和a、b中较小者先比赛,再与较大者比赛,那么不妨令a < b,则1、2、a、b比赛时就会是这样安排的:
选手:1 2 a b
对手:2 1 b a
a b 1 2
b a 2 1
因为要求字典序最小,所以a、b应当先与3、4比赛:
选手:1 2 3 4
对手:2 1 4 3
3 4 1 2
4 3 2 1
(然后陈某人脑子一片空白打了个表。。。。验证一下能不能比k轮就交上去了。)
同样地,1已经与2、3、4比过赛了,那么它再碰见a、b、c、d(不妨令a < b < c < d)时,就会因为字典序要求依次与a、b、c、d比赛。(a、b、c、d取到最小,所以对应了5、6、7、8)
选手:1 2 3 4 a b c d
对手:2 1 4 3 b a d c
3 4 1 2 c d a b
4 3 2 1 d c b a
a b c d 1 2 3 4
b a d c 2 1 4 3
c d a b 3 4 1 2
d c b a 4 3 2 1
这样安排首先能保证字典序最小和满足第四个规则,其次也能使得比赛的轮数尽量多(较大的数与前面的数比赛的时间更迟),所以答案就在表里。验证表中的前k行的前n个数是否出现了比n大的数即可判断是否为Impossible。
代码:
#include <bits/stdc++.h> using namespace std;
typedef long long ll;
const int MAX_N = 1e3 + ; int N, K;
int mat[MAX_N][MAX_N]; void work(int len)
{
if (*len > MAX_N)
return;
for (int i = ; i <= len; i++) {
for (int j = ; j <= len; j++) {
mat[i+len][j] = mat[i][j] + len;
mat[i+len][j+len] = mat[i][j];
mat[i][j+len] = mat[i][j] + len;
}
}
work(*len);
} void init()
{
mat[][] = ; mat[][] = ;
mat[][] = ; mat[][] = ;
work();
} bool check()
{
for (int i = ; i <= K+; i++) {
for (int j = ; j <= N; j++) {
if (mat[i][j] > N) {
return false;
}
}
}
return true;
} int main()
{
init();
int T;
cin >> T;
while (T--) {
scanf("%d%d", &N, &K);
bool ok = check();
if (!ok) {
puts("Impossible");
continue;
}
for (int i = ; i <= K+; i++) {
bool firstprint = true;
for (int j = ; j <= N; j++) {
if (firstprint)
firstprint = false;
else
printf(" ");
printf("%d", mat[i][j]);
}
puts("");
}
}
}
ZOJ5833 Tournament(递归打表)的更多相关文章
- 算法模板——sap网络最大流 3(递归+邻接表)
实现功能:同前 程序还是一如既往的优美,虽然比起邻接矩阵的稍稍长了那么些,不过没关系这是必然,但更重要的一个必然是——速度将是一个质的飞跃^_^(这里面的point指针稍作了些创新——anti指针,这 ...
- 算法模板——sap网络最大流 2(非递归+邻接表)
实现功能:同最大流 1 这里面主要是把前面的邻接矩阵改成了邻接表,相比之下速度大大提高——本人实测,当M=1000000 N=10000 时,暂且不考虑邻接矩阵会不会MLE,新的程序速度快了很多倍(我 ...
- ZOJ 4063 - Tournament - [递归][2018 ACM-ICPC Asia Qingdao Regional Problem F]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4063 Input Output Sample Input 2 3 ...
- Lua非常有用的工具——递归打印表数据
摘要: Lua是一种非常小巧的语言.虽小,但五脏俱全. 在Lua中,我认为最最核心的数据结构就是表.表不仅可用作数组,还可以用作字典.Lua面向对象的实现也是用表实现的. 表对于Lua实在是太重要了! ...
- RS查询报错之递归公用表表达式不包含顶级 UNION ALL运算符
在FM里面涉及模型的时候,修改了物理层的查询SQL如下 select * from TARGET_VISIT_GH where ghksdm in(select dept_id from DIM_BI ...
- T-SQL with关键字 with as 递归循环表
)SET @OrgId = N'901205CA-6C22-4EE7-AE4B-96CC7165D07F'; WITH Childs AS ( SELECT * FROM HROrgRelation ...
- 1.c语言非递归乘法表(帧栈理解)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <stdbool.h> 4 5 typedef stru ...
- 公用表表达式 (CTE)、递归、所有子节点、sqlserver
指定临时命名的结果集,这些结果集称为公用表表达式 (CTE).公用表表达式可以包括对自身的引用.这种表达式称为递归公用表表达式. 对于递归公用表达式来说,实现原理也是相同的,同样需要在语句中定义两部分 ...
- 公用表表达式 (CTE)、递归
指定临时命名的结果集,这些结果集称为公用表表达式 (CTE).公用表表达式可以包括对自身的引用.这种表达式称为递归公用表表达式. 对于递归公用表达式来说,实现原理也是相同的,同样需要在语句中定义两部分 ...
随机推荐
- dynamic load jar and init spring
public class SpringLoader { private Map<String, Class<?>> classMap = new HashMap<> ...
- Win10系列:VC++绘制几何图形1
本小节主要介绍如何使用Direct2D来绘制几何图形,其中会使用到FillGeometry函数和FillEllipse函数,FillGeometry函数用于填充几何图形的内部区域,而FillEllip ...
- 使用laravel搭建CURD后台页面
配置即一切 一切皆于需求,后台从0开始搭建,但是写了一两个页面后发现太多的是对单表的增删改查操作,于是就想到了,能不能做一个快速搭建的后台.想到一句话,配置即一切.如果一个CURD后台能只进行配置就自 ...
- html、xhtml、html5的区别
1.HTML:HyperText Mark-up Language(超文本标记语言)构成网页的主要语言 常指:HTML 4.012.XHTLM:EXtensible HyperText Mark-u ...
- 玩转X-CTR100 | STM32F4 l X-Assistant串口助手控制功能
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] X-CTR100控制器配套的X-Assis ...
- fastjson 在 springboot中的运用
题记: 项目中开始用是Gson,但是压力测试的时候会出现性能下降明显,不得已换成了fastjson 1.首先引用包 <dependency> <groupId>com.alib ...
- Capjoint
前期知识储备: 现如今的全球台站分布情况:在全球大陆的分布并不均衡.在美国加利福尼亚.日本.中国台湾等地区,台站分布密集,数字化程度高.然而在世界很多地区发生的地震,往往在300km范围内仅有2到3个 ...
- gmtdefaults locate
http://seisman.blog.ustc.edu.cn/index.php/archives/553
- day 42 mysql 数据类型
mysql 数据类型 数据类型 truncate t1 (删除表) # 无符号类型 alter table t1 modify id tinyint unsigned (表里有值,不能直接改) d ...
- Python 基础数据类型相互转换
字符串,数字,列表 ,元祖,字典 化相互转化 1 Int 与 str 之间如何转化,转换的结果是什么?有没有条件? #str(int型)可以转化为str 该过程没有条件 #字符串转化为 ...