【题意】给定h,w,d,要求构造矩阵h*w满足任意两个曼哈顿距离为d的点都不同色,染四色。

【算法】结论+矩阵变换

【题解】

曼哈顿距离是一个立着的正方形,不方便处理。d=|xi-xj|+|yi-yj|

将矩阵旋转45°,转为切比雪夫距离(正方形)。d=max{|xi-xj|,|yi-yj|}

(图片来自Atcoder editorial)

定义旋转后的每个点坐标为(x-y,x+y)。(实际处理中x-y+10000避免负数)

将新坐标按d划分区域,就可以发现每个点必须和八连通的块异色,如下图。

(图片来自Atcoder editorial)

八连通染四色的方法:color(x%2+y%2*2),本质上是00,01,10,11四色,这样八连通自然就不同了(如上图),为了0~3就用0+0,0+2,1+0,1+2来表示。

另外,此题在d为奇数时有结论,直接按副对角线染色(假设当前颜色1,走d步后达到的一定是2或4)

#include<cstdio>
int h,w,d;
char s[]="RGBY";
int main(){
scanf("%d%d%d",&h,&w,&d);
if(d&){
for(int i=;i<h;++i){
for(int j=;j<w;++j)putchar(s[i+j&]);
putchar();
}
}else{
for(int i=;i<h;++i){
for(int j=;j<w;++j){
int x=i+j,y=i-j+;
putchar(s[(x/d&)+(y/d&)*]);
}
putchar();
}
}
return ;
}

最新文章

  1. 视图必须派生自 WebViewPage 或 WebViewPage&lt;TModel&gt;
  2. 自从升级到macOS后,整个人都不好了
  3. [sqoop1.99.6] 基于1.99.6版本的一个小例子
  4. LApacheMP基础环境搭建
  5. Ajax ContentType 列表
  6. mysql 索引与优化like查询
  7. Azure Backup 入门
  8. hdu Train Problem I(栈的简单应用)
  9. Python文件处理之文件指针(四)
  10. SlidingMenu的编译及使用
  11. 一个简单的dom查询函数
  12. C++符号优先级
  13. oracle数据库,恢复到24小时内的数据
  14. 练习UML类图中的类的表示
  15. 关于shared_ptr与weak_ptr的使用(good)
  16. while应用和函数学习
  17. ASCII到Unicode到UTF-8
  18. SAS 删除数据和对缺失值处理代码程序
  19. 利用Spring Cloud实现微服务- 熔断机制
  20. 在eclipse中使用github进行代码的上传操作以及如何建立分支

热门文章

  1. [zt]手把手教你写对拍程序(PASCAL)
  2. bwapp之xss(blog)
  3. 用svmpredict输出的结果为空
  4. 每天网络半小时(MAC数据包在哪里合并的)
  5. 第22天:js改变样式效果
  6. 【Python】Python中的列表操作
  7. CS6的安装与破解
  8. cogs1667[SGU422]傻叉小明打字
  9. hdu 1879 继续畅通工程 (最小生成树)
  10. (转)超详细单机版搭建hadoop环境图文解析