首页 > 其他分享 >Codeforces Round 804 (Div. 2) B. Almost Ternary Matrix

Codeforces Round 804 (Div. 2) B. Almost Ternary Matrix

时间:2023-09-10 20:33:32浏览次数:43  
标签:Matrix Almost 矩阵 Codeforces 构造 times int aligned 合法

给两个偶数 \(n\) 和 \(m\) 。任务是构造任意一个二进制矩阵,\(n \times m\) 。对于任意 \((i, j)\) ,有且仅有两个邻居的颜色与 \(a_{i, j}\) 不同。邻居的定义为 \(|x - x'| + |y - y'| = 1\) 。

观察:任何 \(n \times m\) 的矩阵若作为一个大型矩阵的子矩阵不会受到限制。于是构造大型矩阵。

性质1: 矩阵、网格构造性问题由小及大考虑。

  • 矩阵大小 \(1 \times 1\) 。
  • 矩阵大小为 \(2 \times 2\)

\[\begin{aligned} 01 \\ 10 \end{aligned} \]

和它的旋转矩阵,是唯一合法构造。

  • 矩阵大小为 \(4 \times 4\) ,构造题遵守稳定性原则,较优的方案是对 \(2 \times 2\) 的矩阵经过旋转拼接成 \(4 \times 4\) 。由于可控性强,不难枚举出以下构造合法。

\[\begin{aligned} 1001 \\ 0110 \\ 0110 \\ 1001 \end{aligned} \]

  • 矩阵大小为 \(8 \times 8\)
    强可控性下不难得到,将 \(4\) 个构造出的 \(4 \times 4\) 矩阵直接拼接即可合法。

  • 矩阵大小 \(2^x \times 2^x, (x \geq 2)\) ,推广使用四个 \(2^{x-1} \times 2^{x-1}\) 的矩阵拼接。

  • 不难观察到只有 \(n, m\) 都为偶数时,所构造出的子矩阵才合法。正好满足题意。

    • 即大概率奇数情况下是不存在合法情况的。

矩阵生成公式可以从两维独立的角度考虑。

  • 列上:\(j \% 4 = {0, 1}\) 时 \(g_{i, j} = 1\) ,否则 \(g_{i, j} = 0\) 。
  • 行上:\(i \% 4 = {2, 3}\) 时,\(reverse(g_i.begin, g_i.end)\) 。
view
#include <bits/stdc++.h>
int g[55][55];
void solve() {
	int n, m; std::cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			std::cout << g[i][j] << " \n"[j==m];
		}
	}
}
signed main() {
	for (int i = 1; i <= 50 ; i++) {
		for (int j = 1; j <= 50; j++) {
			if (j % 4 == 1 || j % 4 == 0) g[i][j] = 1;
			else g[i][j] = 0;
		}
		if (i % 4 == 2 || i % 4 == 3) std::reverse(g[i] + 1, g[i] + 50 + 1);
	}
	int _ = 1; std::cin >> _;
	while (_--) solve();
	return 0;
} 

标签:Matrix,Almost,矩阵,Codeforces,构造,times,int,aligned,合法
From: https://www.cnblogs.com/zsxuan/p/17691849.html

相关文章

  • Codeforces Round 807 (Div. 2) B. Mark the Dust Sweeper
    需要打扫\(n\)个房间,第\(i\)个房间有\(a_i\)的积灰。只能使用如下魔法打扫:选择\(i,j,(1\leqi<j\leqn,\min_{k=i}^{j}a_i>0)\)。执行\(a_i=a_i-1,a_j=a_j+1\)。需要将\(1\simn-1\)号房间的积灰全部清空,最少使用多少次魔法。观察一:显......
  • [转载]生产追溯打印的二维码为什么选用 Data Matrix 编码格式(附QR码介绍)
    Datamatrix原名Datacode,由美国国际资料公司(InternationalDataMatrix,简称IDMatrix)于1989年发明。Datamatrix是一种矩阵式二维条码,其发展的构想是希望在较小的条码标签上存入更多的资料量。Datamatrix的最小尺寸是目前所有条码中最小的,尤其特别适用于小零件的标识,以及直接印刷......
  • Codeforces Round 811 (Div. 3) A. Everyone Loves to Sleep
    闹钟设有\(n\)个时间点,第\(i\)个时间为\((H_i,M_i)\)。在\(h,m\)时刻入睡,响铃必须起床,问能睡多久。使用\(set<pair<int,int>>\)存储闹铃时刻,然后在其中\(lower_{bound}\)到\(<first\geqh,second\geqm>\)的迭代器\(it\)。若\(it=end\),则\(it=begin......
  • Codeforces Round 819 (Div. 1 + Div. 2) and Grimoire of Code Annual Contest 2022
    给一个长为\(n\)的正整数数组,执行以下操作严格一次。选择\(l,r,(1\leql<r\leqn)\),任意一个正整数\(k\)。重复\(k\)次:让\([l,r]\)的数组成环,按顺时针走一次。希望\(a_n-a_1\)最大,找到这个数。分类讨论题。先判断\(n\)为\(1\)时\(a_n-a_1\)......
  • Codeforces Round 830 (Div. 2) B. Ugu
    给一个\(01\)字符串,需要使它变为非降的,可以执行以下操作:选择一个下标\(i,(1\leqi\leqn)\),\(\forallj\geqi\)的数位翻转。经典的按无后效性翻转问题。考虑从前往后,得到一个全\(0\)串。若开始存在\(1\),则答案减\(1\)。如果存在\(1\),遇到\(1\)便翻转后......
  • $Codeforces Round 891 (Div. 3)$
    \(A.ArrayColoring\)显然需要奇数个偶数即可满足题目。voidsolve(){intn=read(),res=0;for(inti=1;i<=n;i++){intx=read();if(x%2)res++;}puts(res%2==0?"YES":"NO");//puts(ans>0?"Yes":"No&......
  • Codeforces Round 824 (Div. 2) B. Tea with Tangerines
    有\(n\)块橘子皮,第\(i\)块大小为\(a_i\)。在一部操作中可以把一块橘子皮分成两块,即这块橘子皮为\(x\),让\(x\)变为\(y,z(x=y+z)\)。希望对于任意两块橘子皮,他们相差严格小于两倍。即两块中更小的为\(x\),更大的为\(y\),有\(2x>y\)。最少需要执行多少步操作......
  • 【题解】Educational Codeforces Round 143(CF1795)
    A.TwoTowers题目描述:有\(a,b\)两座由红蓝色方块垒成的塔,其中\(a\)的高度为\(n\);\(b\)的高度为\(m\),用R代表红色;用B代表蓝色。你可以多次把其中一座顶端的方块移到另一座的顶端(可以不移动)。问有没有一种方法可以使两座塔中均没有连续的同颜色方块。题目分析:可以......
  • Codeforces Round 827 (Div. 4) C. Stripes
    在一个\(8\times8\)的网格上,一开始无色。每次一整行或一整列地染色,后染的颜色会覆盖前染的颜色。染色方式有两种,一种是横着染\(R\)色,一种是竖着染\(B\)色。给出最终染色的网格,问最后染的色是哪种。对每行开\(R\)计数器、每列开\(B\)计数器。遍历行、列,如果计数器的......
  • Codeforces Round 832 (Div. 2) B. BAN BAN
    给一个正整数\(n\),定义\(S{n}\)为字符串\(BAN\)复制\(n\)次。比如\(S(3)=BANBANBAN\)。可以对\(S(n)\)执行任意次以下操作:选择\(i,j(1\leqi,j\leq3n,i\neqj)\)。\(swap(s_i,s_j)\)。希望\(BAN\)不作为一个子序列出现在\(S(n)\)中,输出最小交换......