首页 > 其他分享 >[USACO11NOV]Binary Sudoku G 题解

[USACO11NOV]Binary Sudoku G 题解

时间:2024-02-27 22:14:24浏览次数:26  
标签:Binary USACO11NOV 题解 rept 个数 取反 c1 c0

定义一个 \(3\times3\) 的表格 \(a\),表示每个小九宫格内 1 的个数的奇偶状态。

再定义两个长为 \(9\) 的数组 \(c0,c1\),表示每行每列上 1 的个数的奇偶状态。

当 \(d_{i,j}\) 取反时,会将 \(a_{[\frac{i}{3}],[\frac{j}{3}]},c0_i,c1_j\) 各取反一次。

要将 \(a_{i,j}\) 全部变为 0,\(a\) 内 1 的个数是至少需要取反的次数。

将 \(c0,c1\) 各划分为三块,每三个数一块。

若 \(a_{i,j}\) 取反了,则 \(c0\) 的第 \(i\) 块中的某个数和 \(c1\) 的第 \(j\) 块中的某个数也会取反。

我们优先选择块中为 1 的取反,如果没有 1 就统一将块中的第一个数取反。

最终 \(a_{i,j}\) 全部变为 0 了,但是题目还要求将 \(c0_i\) 和 \(c1_i\) 全部变为 0,可以证明,这时 \(c0\) 和 \(c1\) 的每个块中只会有偶数个 1。所以这时候 \(c0\) 和 \(c1\) 内 1 的个数的最大值就是要再取反的次数。

时间复杂度:输入的时间复杂度

代码:

#include<iostream>
#define rept(i,a,b) for(int i=a;i<b;++i)
using namespace std;
int ans,num1,num2;
bool a[3][3],c0[9],c1[9];
char ch;
signed main(){
	rept(i,0,9)rept(j,0,9){
		cin>>ch;
		if(ch=='1'){
			a[i/3][j/3]^=1;
			c0[i]^=1,c1[j]^=1;
		}
	}
	rept(i,0,3)
		rept(j,0,3)if(a[i][j]){
			rept(k,i*3,i*3+3)if(c0[k]){
				c0[k]^=1;
				goto next1;
			}
			c0[i*3]^=1;
			next1:;
			rept(k,j*3,j*3+3)if(c1[k]){
				c1[k]^=1;
				goto next2;
			}
			c1[j*3]^=1;
			next2:;
			ans++;
		}
	rept(i,0,9)num1+=c0[i],num2+=c1[i];
	cout<<ans+max(num1,num2);
	return 0;
}

标签:Binary,USACO11NOV,题解,rept,个数,取反,c1,c0
From: https://www.cnblogs.com/zifanoi/p/18038521

相关文章

  • [ABC286Ex] Don't Swim 题解
    我们首先求出线段与多边形的交点,如果交点个数\(<2\)或者有无数个交点,则可以直接输出\(S\)到\(T\)之间的距离。接下来我们考虑交点个数为\(2\)的情况。为了方便,我们记距离\(S\)最近的那个交点为\(P_1\),远的为\(P_2\)。举个例子:在这个例子中,直线\(ST\)将整个多边......
  • P3577 [POI2014]TUR-Tourism 题解
    考虑在无向图上进行dfs,可以得到很多棵dfs树(因为图不一定连通),这些树形成了一个森林。然后由任意两点间不存在节点数超过\(10\)的简单路径这个限制可以得出这些树的深度都不超过\(10\),然后可以想到树上状压dp。有一个重要的性质,就是无向图dfs树上的非树边,一定是回边,所以......
  • CF516E Drazil and His Happy Friends 题解
    题目传送门记\(d=\gcd(n,m)\),发现只有编号在模\(d\)意义下相同的人之间会产生影响,那么有解当且仅当每个剩余系内有至少一个人是快乐的。所以在\(d>b+g\)时直接输出-1即可。对于剩下的情况,先令\(n\leftarrow\fracnd,m\leftarrow\fracmd\),如果\(n<m\)那么把男女交......
  • [ARC140F] ABS Permutation (Count ver.) 题解
    洛谷题面传送门AT题面传送门发现不太好直接求,考虑将\(P\)映射到\(P^{-1}\)上,这样题目中的条件就变成了\(|P_i-P_{i+M}|=1\)。因此我们可以对模\(M\)的每个剩余系做\(M=1\)的情况,然后最后快速幂合并。考虑\(M=1\)的情况怎么做。记\(f_i\)表示\(K=i\)的方案数,......
  • [ARC112F] Die Siedler 题解
    题目传送门人类智慧题。发现\(2\)操作肯定是不劣的,所以能换则换。考虑将手上的牌转换成一个多进制的数,这样\(2\)操作就是其进位方法,\(1\)操作就是将当前的数加上牌包对应的数,答案就是其各位数字之和,不难发现其值为:\[\sum_{i=1}^nc_i\times2^{i-1}\times(i-1)!\]再考......
  • 2024.2.27模拟赛T2题解
    题目有一个神奇的结论\(\foralla<b<c,a\oplusc>min(a\oplusb,b\oplusc)\)然后就可以写出\(n^2\)dp,再用TRIE树优化即可code#include<bits/stdc++.h>usingnamespacestd;#defineN200005#defineintlonglongintn,k1,k2;inta[N],fl[2];constintm......
  • CF1392I Kevin and Grid 题解
    题目传送门\(\large\textbf{Statement.}\)给定两个序列\(a,b\),有一个\(n\timesm\)的网格图,每个点\((i,j)\)上有个权值\(a_i+b_j\),每个点和其上、下、左、右方相邻的点有连边。多次询问,每次给一个阈值\(x\),将图分为权值\(<x\)(蓝色)和\(\gex\)(红色)的两种连通块。一......
  • P10084 [GDKOI2024 提高组] 计算 题解
    题目传送门前置知识:单位根反演先考虑怎么求\(F(x,a,b)\),易得\(\gcd(x^a-1,x^b-1)=x^{\gcd(a,b)}-1\)。所以\(L=m^{\gcd(a,b)}+1,R=m^{\gcd(c,d)}\),然后发现\([L,R]\)中的数模\(m\)后每种余数出现次数相同,下面记其为\(n=\frac{R-L}{m}\)。考虑用生成函数做,易得答案为......
  • [ABC331G] Collect Them All 题解
    洛谷传送门AT传送门\(\textbf{Statement.}\)有\(M\)种颜色,用\(1\simM\)编号,每次抽奖抽中第\(i\)种颜色的概率为\(\frac{c_i}{N}\),其中\(\sumc_i=N\),求抽中每种颜色至少一次的期望次数。\(1\leM\leN\le2\times10^5\)。\(\textbf{Solution.}\)发现直接求不好......
  • [ARC087F] Squirrel Migration 题解
    洛谷题面AT题面如果两条路径不存在交点,则两条路径各选一个端点交换后两路径相交,答案不会变劣。考虑所有路径两两相交的情况,因为图是一棵树,所以这些路径会交于一点。以这个点为根,那么最大的子树大小一定不超过\(\fracn2\),所以这个点是树的重心,每条路径的端点一定在两个不......