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).公用表表达式可以包括对自身的引用.这种表达式称为递归公用表表达式. 对于递归公用表达式来说,实现原理也是相同的,同样需要在语句中定义两部分 ...
随机推荐
- isScroll 插件在iPhone 5s 和以上版本
才加入这个移动项目组三天,解决一个同事(请假),解决一个切换头部tab 选型时,下拉数据,再次切换到另外一个选项时,出现滚动条距离顶部有些距离,当频繁操作会出现距离顶部距离加大问题(第二天衍生出其他b ...
- Jdbc连接数据库基本步骤
Jdbc连接数据库的基本步骤: package demo.jdbc; import java.sql.Connection; import java.sql.DriverManager; import ...
- 【转载一】Grafana –美观、强大的可视化监控指标展示工具
在之前的InfluxDB系列教程 中,我们给大家介绍了当下流行的一款时序数据库--InfluxDB. 接下来给大家带来一款强大的,与InfluxDB搭配使用的前端指标项展示项目--Grafana. G ...
- Ubuntu 14.04 安装 Xilinx ISE 14.7 全过程(转)
reference:https://www.cnblogs.com/tracyone/p/3561781.html 按照ISE后,建立ISE启动连接: 这个帖子作为我安装xilinx ISE 14.7 ...
- struts2应用
1.处理表单数据 GreetingAction public class GreetingAction extends ActionSupport{ private String username; ...
- MERGE INTO 解决大数据量 10w 更新缓慢的问题
有个同事处理更新数据缓慢的问题,数据量超10w的量,更新速度太慢耗时较长,然后改成了 MERGE INTO 效率显著提高. 使用方法如下 MERGE INTO 表A USING 表B ON 关联条件 ...
- linux自动更新代码,自动备份数据库,打包应用发布
切换root用户 sudo su - 1.安装svn,mysql yum install subversion yum install mysql 2.安装 maven 下载:百度云盘地址为 http ...
- intellij怎么导入MySQL的驱动包
1.下载zip格式的驱动包:https://dev.mysql.com/downloads/connector/j/ 2.解压zip,放到任意位置.其中的mysql-connector-java.ja ...
- Delphi revelations #1 – kbmMW Smart client on NextGen (Android) – Scope problems
Delphi 启示 #1 – kbmMW Smart client on NextGen (Android) – 作用域问题 以更高级的方式使用kbmMW smart client,在Android设 ...
- Could not open JDBC Connection for transaction
Could not open JDBC Connection for transaction; nested exception is java.sql.SQLTransientConnectionE ...