【uoj#225】[UR #15]奥林匹克五子棋 构造
题目描述
两个人在 $n\times m$ 的棋盘上下 $k$ 子棋,问:是否存在一种平局的情况?如果存在则输出一种可能的最终情况。
输入
第一行三个正整数 $n,m,k$ ,意义如前所述。
输出
如果双方不能打成平局,输出 $−1$ ;
否则输出 $n×m$ 行,第 $i$ 行两个整数 $x_i,y_i$ 表示第 $i$ 次落子的坐标为第 $x_i$ 行第 $y_i$ 列。黑子先行,所以 $i$ 为奇数时为黑方落子,$i$ 为偶数时白方落子。坐标需满足 $1≤x_i≤n,1≤y_i≤m$ 。
样例输入
4 4 3
样例输出
1 2
1 1
1 4
1 3
2 1
2 3
2 2
2 4
3 3
3 2
3 4
3 1
4 1
4 4
4 3
4 2
题解
构造
显然 $k=1$ 时无解。
$k=2$ 当且仅当 $\text{min}(n,m)=1$ 时有解。因为若 $n>1,m>1$ ,对于一个 $2\times 2$ 的部分一定无法避免两个连续。
当 $k\ge 3$ 时,可以构造出如下的棋盘:
显然这其中包含连续的棋子数最多只有 $2$ 。
那么是否满足O与X相差不超过1呢?
容易发现只有 $n\mod 4=2$ (此时第一列会多填两个O)且 $m$ 为奇数时不成立,这种情况下把棋盘向上平移一排(即第一列从上至下是OXXOOXXOO...XXOOX)即可。
时间复杂度 $O(nm)$
#include <cstdio>
int ax[125010] , ay[125010] , at , bx[125010] , by[125010] , bt;
int main()
{
int n , m , k , i , j;
scanf("%d%d%d" , &n , &m , &k);
if(k == 1) puts("-1");
else if(k == 2)
{
if(n > 1 && m > 1) puts("-1");
else
for(i = 1 ; i <= n ; i ++ )
for(j = 1 ; j <= m ; j ++ )
printf("%d %d\n" , i , j);
}
else
{
if((n & 3) == 2 && m & 1)
{
for(i = 1 ; i <= n ; i ++ )
{
for(j = 1 ; j <= m ; j ++ )
{
if(((i & 3) > 1) == (j & 1)) ax[++at] = i , ay[at] = j;
else bx[++bt] = i , by[bt] = j;
}
}
}
else
{
for(i = 1 ; i <= n ; i ++ )
{
for(j = 1 ; j <= m ; j ++ )
{
if(((i & 3) && ((i & 3) < 3)) == (j & 1)) ax[++at] = i , ay[at] = j;
else bx[++bt] = i , by[bt] = j;
}
}
}
for(i = 1 ; i <= n * m ; i ++ )
{
if(i & 1) printf("%d %d\n" , ax[at] , ay[at]) , at -- ;
else printf("%d %d\n" , bx[bt] , by[bt]) , bt -- ;
}
}
return 0;
}
【uoj#225】[UR #15]奥林匹克五子棋 构造的更多相关文章
- UOJ226. 【UR #15】奥林匹克环城马拉松 [组合数学,图论]
UOJ 思路 我们知道关于有向图欧拉回路计数有一个结论:在每个点入度等于出度的时候,答案就是 \[ t_w(G)\prod (deg_i-1)! \] 其中\(t_w(G)\)是以某个点为根的树形图个 ...
- UOJ#460. 新年的拯救计划 构造
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ460.html 题解 本题的构造方法很多.这里只介绍一种. 首先,总边数为 $\frac{n(n-1)}2 ...
- UOJ 【UR #5】怎样跑得更快
[UOJ#62]怎样跑得更快 题面 这个题让人有高斯消元的冲动,但肯定是不行的. 这个题算是莫比乌斯反演的一个非常巧妙的应用(不看题解不会做). 套路1: 因为\(b(i)\)能表达成一系列\(x(i ...
- C++解析(15):二阶构造模式
0.目录 1.构造函数与半成品对象 2.二阶构造 3.小结 1.构造函数与半成品对象 关于构造函数: 类的构造函数用于对象的初始化 构造函数与类同名并且没有返回值 构造函数在对象定义时自动被调用 问题 ...
- uoj#283. 直径拆除鸡(构造)
传送门 好神的构造题 vfk巨巨的题解 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b) fo ...
- UOJ #22 UR #1 外星人
LINK:#22. UR #1 外星人 给出n个正整数数 一个初值x x要逐个对这些数字取模 问怎样排列使得最终结果最大 使结果最大的方案数又多少种? n<=1000,x<=5000. 考 ...
- UOJ#206. 【APIO2016】Gap 构造 交互题
原文链接www.cnblogs.com/zhouzhendong/p/UOJ206.html 题解 T = 1 的情况直接大力从两边向中间询问即可. T = 2 的情况挺妙的,我没想到. 考虑首先花费 ...
- UOJ.52.[UR #4]元旦激光炮(交互 思路)
题目链接 \(Description\) 交互库中有三个排好序的,长度分别为\(n_a,n_b,n_c\)的数组\(a,b,c\).你需要求出所有元素中第\(k\)小的数.你可以调用至多\(100\) ...
- UOJ【UR #12】实验室外的攻防战
题意: 给出一个排列$A$,问是否能够经过以下若干次变换变为排列$B$ 变换:若${A_i> A_i+1}$,可以${swap(A_i,A_i+1)}$ 考虑一个数字从A排列到B排列连出来的路径 ...
随机推荐
- 20145207 《Java 程序设计》实验三 (敏捷开发与XP实践)实验报告
<Java 程序设计>实验三 (敏捷开发与XP实践)实验报告 目录 改变 敏捷开发与XP实践实验要求 实验成果 课后思考 改变 修改了之前仅仅是贴了图片,连代码都没粘的状态.增加了自己的思 ...
- [arc062E]Building Cubes with AtCoDeer
Description 传送门 Solution 这道题直接暴力就好..毕竟只要枚举了前后两个瓷砖的方向和编号,其他瓷砖的颜色就是确定的了. 然而场上我的去重除了问题qaq. 我们钦定在立方体最前面的 ...
- HDU 6086 Rikka with String
Rikka with String http://acm.hdu.edu.cn/showproblem.php?pid=6086 题意: 求一个长度为2L的,包含所给定的n的串,并且满足非对称. 分析 ...
- Tomcat安装部署和安全加固优化以及反向代理应用
1.Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共同 ...
- [WC2010]重建计划 长链剖分
[WC2010]重建计划 LG传送门 又一道长链剖分好题. 这题写点分治的人应该比较多吧,但是我太菜了,只会长链剖分. 如果你还不会长链剖分的基本操作,可以看看我的长链剖分总结. 首先一看求平均值最大 ...
- PHP 行为测试工具 Codeception (介绍)
原文地址:https://phphub.org/topics/25 Codeception 简介 Codeception 简单来说, 分为以下几种测试 Acceptance Tests 验收测试 Fu ...
- python开源IP代理池--IPProxys
今天博客开始继续更新,谢谢大家对我的关注和支持.这几天一直是在写一个ip代理池的开源项目.通过前几篇的博客,我们可以了解到突破反爬虫机制的一个重要举措就是代理ip.拥有庞大稳定的ip代理,在爬虫工作中 ...
- Python中如何实现im2col和col2im函数(sliding类型)
今天来说说im2col和col2im函数,这是MATLAB中两个内置函数,经常用于数字图像处理中.其中im2col函数在<MATLAB中的im2col函数>一文中已经进行了简单的介绍. 一 ...
- mysql把一字段拆分为多行
sql语句 select a.house_no as '房子',substring_index(substring_index(a.name,',',b.help_topic_id+1),',',-1 ...
- Python爬虫入门(6):Cookie的使用
为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓 ...