非常巧妙的一道构造题,发现对于所构造的 \(n\) 有上限,那么对于 \(K<=500\) 的情况,很好构造,每行全是一个数就行了,对于 \(K>500\) 的情况,显然每行都是 \(1,2,...,n\) 的循环同构构造就行了,也可以理解是斜着填,然后对于剩下的 \(K-500\) 个数,每次选择一条斜线,发现每次交替填一定会满足条件。

为什么能想到斜线?因为我们观察到了斜线的个数是 \(2n-1\) 个,所以启发我们往斜线思考构造

算是独立写的题

#include<bits/stdc++.h>

#define maxn 1005

using namespace std;

template<class T>

inline T read(){
T r=0,f=0;
char c;
while(!isdigit(c=getchar()))f|=(c=='-');
while(isdigit(c))r=(r*10)+(c^48),c=getchar();
return f?-r:r;
} int n,ans[maxn][maxn]; queue<int>q,q2; inline void print(){
printf("%d\n",n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
printf("%d ",ans[i][j]);
}
puts("");
}
} vector<int>mp[10005]; int main(){
// freopen("sol.out","w",stdout);
int K=read<int>();
if(K<=500){
printf("%d\n",K);
for(int i=1;i<=K;i++){
for(int j=1;j<=K;j++){
printf("%d ",i);
}
puts("");
}
return 0;
}
n=500;
for(int i=1;i<=n;i++)q.push(i);
for(int i=1;i<=n;i++){
int pos=0;
while(!q.empty()){
ans[i][++pos]=q.front(),q2.push(q.front());
if(!mp[q.front()].size())mp[q.front()].emplace_back(i+pos);
else if(mp[q.front()].size()==1&&i+pos!=mp[q.front()][0])mp[q.front()].emplace_back(i+pos);
q.pop();
}
int Top=q2.front();q2.pop();
q2.push(Top);
while(!q2.empty())q.push(q2.front()),q2.pop();
}
int num=n+1;
for(int i=2;i<=n+1;i++){
int pos=1;
int shu=ans[i-pos][pos];
while(1){
if(i-pos<1)break;
int pos2=i-pos;
ans[pos2][pos]=num;
pos+=2;
}
int i2=mp[shu][1];
if(i2==i)i2=mp[shu][0];
while(1){
if(i2-pos<1)break;
int pos2=i2-pos;
ans[pos2][pos]=num;
pos+=2;
}
if(num==K)break;
++num;
}
print();
return 0;
}

[AGC030C] Coloring Torus的更多相关文章

  1. [Atcoder AGC030C]Coloring Torus

    题目大意:有$k$种颜色,要求构造出一个$n\times n$的矩阵,填入这$k$种颜色,满足对于每一种颜色,其中填充这种颜色的每一个方格,满足其相连的四个格子的颜色的个数和种类相同(对于每一种颜色而 ...

  2. AtCoder Grand Contest 030 (AGC030) C - Coloring Torus 构造

    原文链接https://www.cnblogs.com/zhouzhendong/p/AGC030C.html 题解 才发现当时是被题意杀了. 当时理解的题意是“对于任意的 (i,j) ,颜色 i 和 ...

  3. Coloring Torus(Atcoder Grand Contest 030 C)

    怎么外国都喜欢考脑筋急转弯…… 题意 输入 $k$,要求构造一个 $n\times n$ 的矩阵($n$ 自选),使得恰好用 $k$ 中颜色把每个点都染色,并且同一种颜色的格子周围 相邻的每种颜色数量 ...

  4. AtCoder刷题记录

    构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...

  5. 贪心/构造/DP 杂题选做Ⅲ

    颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...

  6. AtCoder Grand Contest 030题解

    第一次套刷AtCoder 体验良好 传送门 Poisonous Cookies cout<<b+min(c,a+b+); Tree Burning 难度跨度有点大啊 可以证明当第一次转向之 ...

  7. AGC030 简要题解

    A - Poisonous Cookies 题意 有\(A\)个能解毒的普通饼干,\(B\)个能解毒的美味饼干,\(C\)个有毒的美味饼干,求最多能吃多少个美味饼干,每次吃完有毒的饼干后要解毒后才能继 ...

  8. 【AtCoder】AGC030

    A - Poisonous Cookies 有毒还吃,有毒吧 #include <bits/stdc++.h> #define fi first #define se second #de ...

  9. AtCoder Grand Contest 030 Solution

    A - Poisonous Cookies 签到. #include <bits/stdc++.h> using namespace std; #define ll long long l ...

  10. AtCoder练习

    1. 3721 Smuggling Marbles 大意: 给定$n+1$节点树, $0$为根节点, 初始在一些节点放一个石子, 然后按顺序进行如下操作. 若$0$节点有石子, 则移入盒子 所有石子移 ...

随机推荐

  1. Spring Boot 编写 API 的 10条最佳实践

    10 个最佳实践,让您像专业人士一样编写 Spring Boot API,并结合编码示例和解释: 1. RESTful API 设计原则: 清晰一致的资源命名:使用准确反映 API 管理的资源的名词( ...

  2. ABAP CDS 在7.55有比较大的更新

    几年前翻译过CDS的相关文章,部分内容已经过时,比如当时的DDIC CDS在7.55以后已经沦为obsolete,在新版本中,开发者应使用DEFINE VIEW ENTITY而非DEFINE VIEW ...

  3. SAP Adobe Form 教程五 图片

    前文: SAP Adobe Form 教程一 简单示例 SAP Adobe Form 教程二 表 SAP Adobe Form 教程三 日期,时间,floating field SAP Adobe F ...

  4. C#开发的CPU使用率小应用 - 开源研究系列文章 - 个人小作品

    这次用C#编写一个CPU使用率的小应用.想了一下,大概需要两个内容:一个是获取CPU使用率:一个是托盘图标的动画效果.这两个内容在上次的博文中有介绍了,此博文为具体的应用的例子. 对于要实现的应用,首 ...

  5. 三、Prophecis 一站式云原生机器学习平台

    Prophecis 是微众银行自研大数据平台套件 WeDataSphere 的核心应用工具之一,为用户提供了全栈的机器学习应用开发与部署解决方案.作为WeDataSphere 功能工具应用系统,Pro ...

  6. 【深度学习】基础--NumPy

    因为深度学习会应用到我们大学时候学习的数学知识---线性代数.(矩阵当年想起来还是挺有意思的,有考研的经历都有感觉) 而在计算机里面如何展示矩阵的计算和应用,就需要运用到NumPy,是Python的一 ...

  7. linux开发vue项目,不能热更新?

    只需要运行下面的命令即可: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo ...

  8. C++:查漏补缺笔记

    文章目录 数组 一维数组 初始化数组 数组名 二维数组 函数 函数声明 函数的分文件 函数重载 指针 空指针 野指针 const 结构体指针 指针++ 指针与函数 地址传递 C++引用 面向对象易错点 ...

  9. C 编程异常 — /usr/bin/ld: 找不到 -lm

    问题:在编程程序的时候报错. /usr/bin/ld: 找不到 -lm /usr/bin/ld: 找不到 -lc 原因:缺少库文件. 解决: yum install -y libstdc++-stat ...

  10. layui合并单元格

    在别人的基础上解决了多列合并和同一个页面多个表格的问题 1 //合并单元格 2 function merge(id,res, columsName, columsIndex) { 3 4 var da ...