Binary Table (Easy Version)-(思维)

Ubuntu 18.04 部署 ERPNext 的字符集与兼容性实战指南 ERPNext 是一款面向中小企业的开源企业资源计划系统,其核心依赖于 UTF-8 多字节(utf8mb4)字符集支持与 Python 3.6+ 环境的稳定协同。在 Ubuntu 18.04 这类长期支持(LTS)系统上部署时,常因 MariaDB 默认 latin1 编码、旧版 OpenSSL 兼容性、bench 工具对 Python 版本的隐式要求等底层差异,导致中文乱码、模块安装失败或服务启动异常。技术价值在于通过手动校准数据库字符集、锁定关键依赖版本(如 cryptography 36.0.2)、指 阅读详情
题目描述:点击进入
题意

给你一个大小为n×m的二进制表,这个表由符号 0 和符号 1 组成。
你可以进行这样的操作:
选择属于一个 2 × 2 正方形的 3 个不同的单元格,并更改这些单元格中的符号(将 0 更改为1, 1 更改为 0 )。
你的任务是使表中的所有符号都等于0。您最多可以进行 3nm次 操作。
你不需要最小化操作的数量。

思路1

通过找找规律,我们可以知道一个 2*2 的矩阵
不包含0的可以通过一次操作变为包含3个0的,
包含3个0的通过一次操作可以变为包含2个0的,
包含2个0的通过一次操作可以变为包含1个0的,
包含1个0的通过一次操作可以变为包含4个0的,
包含4个0的为符合条件的不需要操作。
在这里插入图片描述
根据这个规律我们就可以直接扫图然后操作、记录了
(当 n 或者 m 是奇数的时候需要特判一下边界)

代码
#include<iostream>
#include<string>
#include<map>
#include<set>
//#include<unordered_map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<fstream>
#define X first
#define Y second
#define INF 0x3f3f3f3f
#define pii pair<int, int>
//#define pdi pair<double,int>
//#define int long long 
using namespace std;
typedef long long ll;
typedef unsigned long long llu; 
const int maxn=1e5+10;
const int mod=1000000007;
int t,n,k,m,tot;
vector<int>ax;
vector<int>ay;
char a[110][110];
int check(int x,int y)//查询 2 * 2 矩阵中 0 的个数
{
	int sum=0;
	for(int i=x;i<=x+1;i++)
	{
		for(int j=y;j<=y+1;j++)
		{
			if(a[i][j]=='0') 
				sum++; 
		}
	}
	return sum;
}
void check1(int x,int y)// 1 个 0
{
	for(int i=x;i<=x+1;i++)
	{
		for(int j=y;j<=y+1;j++)
		{
			if(a[i][j]=='1')
			{
				ax.push_back(i);
				ay.push_back(j);
				a[i][j]='0';
			}
		}
	}
}
void check2(int x,int y)// 2 个 0 
{
	int flag=1;
	for(int i=x;i<=x+1;i++)
	{
		for(int j=y;j<=y+1;j++)
		{
			if(a[i][j]=='0'||a[i][j]=='1'&&flag)
			{
				if(a[i][j]=='1') flag--;
				ax.push_back(i);
				ay.push_back(j);
				if(a[i][j]=='0') a[i][j]='1';
				else a[i][j]='0';
			}
		}
	}
	check1(x,y);
}
void check3(int x,int y)// 3 个 0 
{
	int flag=2;
	for(int i=x;i<=x+1;i++)
	{
		for(int j=y;j<=y+1;j++)
		{
			if(flag&&a[i][j]=='0'||a[i][j]=='1')
			{
				if(a[i][j]=='0') flag--;
				ax.push_back(i);
				ay.push_back(j);
				if(a[i][j]=='0') a[i][j]='1';
				else a[i][j]='0';
			}
		}
	}
	check2(x,y);
}
void check0(int x,int y)//没有 0 
{
	int flag=3;
	for(int i=x;i<=x+1;i++)
	{
		for(int j=y;j<=y+1;j++)
		{
			if(flag)
			{
				flag--;
				ax.push_back(i);
				ay.push_back(j);
				a[i][j]='0';
			}
		}
	}
	check3(x,y);
}
int main( )
{
	ios::sync_with_stdio(false);
	cin>>t;
	while(t--)
	{
		ax.clear();
		ay.clear();
		cin>>n>>m;
		for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++) 
		    cin>>a[i][j];
		if(n&1)
		{
			for(int j=1;j<=m-1;j+=2)
			{
				int sum=check(n-1,j);
				if(sum==4) continue; 
				else if(sum==3)
			    	check3(n-1,j);
			    else if(sum==2)
			       check2(n-1,j);
		    	else if(sum==1)
		    		check1(n-1,j);
		    	else if(sum==0)
		    		check0(n-1,j);
			}
		}
		if(m&1)
		{
			for(int i=1;i<=n-1;i+=2)
			{
				int sum=check(i,m-1);
				if(sum==4) continue; 
				else if(sum==3)
			    	check3(i,m-1);
			    else if(sum==2)
			       check2(i,m-1);
		    	else if(sum==1)
		    		check1(i,m-1);
		    	else if(sum==0)
		    		check0(i,m-1);
			}
		}
		for(int i=1;i<=n-1;i+=2)
		{
			for(int j=1;j<=m-1;j+=2)
			{
				int sum=check(i,j);
				if(sum==4) continue; 
				else if(sum==3)
			    	check3(i,j);
			    else if(sum==2)
			    	check2(i,j);
		    	else if(sum==1)
		    		check1(i,j);
		    	else if(sum==0)
		    		check0(i,j);
			}
		}
		for(int i=1;i<=n-1;i++)//这里需要重复检查一次避免遗漏
		{
			for(int j=1;j<=m-1;j++)
			{
				int sum=check(i,j);
				if(sum==4) continue; 
				else if(sum==3)
			    	check3(i,j);
			    else if(sum==2)
			    	check2(i,j);
		    	else if(sum==1)
		    		check1(i,j);
		    	else if(sum==0)
		    		check0(i,j);
			}
		}
       int len=ax.size();
		cout<<len/3<<endl; 
		for(int i=0;i<len;i+=3)
		{
			cout<<ax[i]<<' '<<ay[i]<<' '<<ax[i+1]<<' '<<ay[i+1]<<' '<<ax[i+2]<<' '<<ay[i+2]<<' '<<endl;		
		}
	}
    return 0;
}
思路2

这里再介绍一下 ybl 大佬的思路(绝了),看题目可以知道最多 3nm 次操作,为什么是 3nm ,为什么有3,,, n * m 可以理解为每一个位置的元素,那 3 呢,,于是找找规律,,,惊奇的发现 3 次操作可以只改变 2 * 2 矩阵中一个点的状态,而其他点保持不变,例如:
在这里插入图片描述
这三次操作可以只改变左上角点的状态,那么,,这道题不就有了嘛
,剩下的就是边界特判了,Game over!

代码:
#include<iostream>
#include<string>
#include<map>
#include<set>
//#include<unordered_map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<fstream>
#define X first
#define Y second
#define INF 0x3f3f3f3f
#define pii pair<int, int>
//#define pdi pair<double,int>
//#define int long long 
using namespace std;
typedef long long ll;
typedef unsigned long long llu; 
const int maxn=1e6+10;
const int mod=1000000007;
ll t,n,k,m,tot; 
struct node
{
	int x1,y1;
	int x2,y2;
	int x3,y3;
	node(){}
	node(int a,int b,int c,int d,int e,int f)
	{
		x1=a,y1=b;
    	x2=c,y2=d;
    	x3=e,y3=f;
	}
};
char a[110][110];
int main( )
{
//	ios::sync_with_stdio(false);
	cin>>t;
	while(t--)
	{
		vector<node>v;
		cin>>n>>m;
		for(int i=1;i<=n;i++)
		    scanf("%s",a[i]+1);
		for(int i=1;i<=n-1;i++)
		{
			for(int j=1;j<=m;j++) 
			{
				if(a[i][j]=='1')
				{
					if(j==1)
					{
						v.push_back(node(i,j,i,j+1,i+1,j));
						v.push_back(node(i,j,i,j+1,i+1,j+1));
						v.push_back(node(i,j,i+1,j,i+1,j+1));
					}
					else if(j==m)
					{
						v.push_back(node(i,j,i,j-1,i+1,j));
						v.push_back(node(i,j,i,j-1,i+1,j-1));
						v.push_back(node(i,j,i+1,j,i+1,j-1));
					}
					else
					{
						v.push_back(node(i,j,i,j+1,i+1,j));
						v.push_back(node(i,j,i,j+1,i+1,j+1));
						v.push_back(node(i,j,i+1,j,i+1,j+1));
					}
				}
			}
		}
		for(int i=1;i<=m;i++) 
		{
			if(a[n][i]=='1')
			{
				if(i<m)
				{
					v.push_back(node(n-1,i,n,i,n,i+1));
					v.push_back(node(n-1,i+1,n,i,n,i+1));
					v.push_back(node(n-1,i,n-1,i+1,n,i));
				}
				else if(i==m)
				{
					v.push_back(node(n-1,i,n,i,n,i-1));
					v.push_back(node(n-1,i-1,n,i,n,i-1));
					v.push_back(node(n-1,i-1,n-1,i,n,i));
				}
			}
		}
		cout<<v.size()<<endl;
		for(int i=0;i<v.size();i++)
		{
			cout<<v[i].x1<<' '<<v[i].y1<<' '<<v[i].x2<<' '<<v[i].y2<<' '<<v[i].x3<<' '<<v[i].y3<<endl;
		}
	}
    return 0;
}
【信息科学与工程学】【数据科学】 第四十四篇 数据湖 系列二 函数库01 2. 近似最近邻搜索(ANN): 通过HNSW等图索引模型加速,模型定义为构建一个层次化导航小世界图。依赖于消息队列(Kafka/Pulsar)、分布式文件系统(HDFS/S3)的客户端及连接库。依赖专门的向量检索库(如FAISS, Milvus)。管控目标: 召回率(Recall@K) > 95%,查询延迟 < 100ms。管控目标: < 1% (核心业务字段) 或 < 5% (一般字段)依赖数据处理框架(如Spark, Pandas)的核心统计函数。,通过牺牲精确性(ANN)来换取搜索速度的大幅提升。 阅读详情

相关推荐

10X Genomics数据实战:手把手教你用Seurat处理单细胞PBMC数据(附完整代码)

本文详细介绍了如何使用Seurat处理10X Genomics的单细胞PBMC数据,从数据获取、质控到降维分析和细胞分群的全流程。通过实战代码演示,帮助研究者掌握单细胞RNA测序数据分析的核心技术,提升对细胞异质性的理解。

weixin_29053577的博客 252

Codeforces Round 889 (Div. 2)题解

每周小练习

想要AC的sjh的博客空间 832

c语言版数据结构课程设计 学生成绩管理系统

此学生成绩管理系统完成15项功能,是我经过很多次的修改得到的。花费时间不短,功能齐全,主要完成了:输入,输出,插入,修改,删除,查询,读取文件,写入文件,复制文件,建立索引,显示各种情况下的信息,追加学生信息等等功能。一共15项。   代码如下: // shujujiegou.cpp : 定义控制台应用程序的入口点。///**本程序采用数组链表形式,原因:数组查询速度快,数组也能实现动态存储

Java 1万+

Binary Table(Codeforces 663E)

You are given a table consisting of n rows and m columns. Each cell of the table contains either 0 or 1. In one move, you are allowed to pick any row or any column and invert all values, that is, rep...

Freopen的博客 341

STM32F030F4P6实战:LL库+DMA驱动WS2812全流程(附避坑指南)

本文详细介绍了如何使用STM32F030F4P6的LL库和DMA驱动WS2812 LED灯带的全流程,包括硬件选型、CubeMX配置、LL库与DMA关键实现、数据格式转换及调试技巧。特别提供了避坑指南,帮助开发者避免常见错误,提升开发效率。

weixin_29194693的博客 484

CANoe软件之离线报文回放与分析实战

本文详细介绍了如何使用CANoe软件进行离线报文回放与分析,帮助工程师将现场故障数据转化为可反复研究的实验室资源。通过实战步骤,指导如何搭建分析工程、加载DBC文件解码信号,并利用Trace和Graphics窗口进行深度数据筛选与图形化分析,从而高效定位汽车电子故障,是提升诊断效率的关键技能。

weixin_29227585的博客 529

A1. Binary Table (Easy Version)

【代码】A1. Binary Table (Easy Version)

yingxueyuhanling的博客 167

高缺失率时空数据插补实战:从随机森林到扩散模型的性能对比

数据缺失是数据分析与机器学习建模中普遍面临的挑战,尤其在时空数据领域,传感器故障、传输中断等问题常导致数据不完整。数据插补技术旨在基于已知数据的模式和关联性,合理估算缺失值,为后续分析提供可靠基础。其核心原理在于利用数据的时空相关性(如时间周期性、空间邻近性)及与外部驱动因素(如交通、气象)的关联构建预测模型。这项技术的价值在于能将不完整的数据集转化为可用于高质量分析和预测的可用资产,广泛应用于环境监测、交通流量预测、金融风控等领域。本文聚焦于一个极具挑战性的场景——PM2.5监测数据缺失率高达82%,通过

weixin_30363285的博客 544

Binary Table (Hard Version)(Easy Version)

https://codeforces.com/contest/1440/problem/C2 题意: 给出n,m,给出nm的矩阵,由0和1组成,每次你可以执行一个操作,选出22正方形中的三个数,将这三个数反转。问在有限的步骤之内将矩阵变为全为0的矩阵的操作数以及操作。简单和困难问题的差别就是,操作数上限的不同。 思路: 构造。从左上到右下开始遍历,遇到1就将它变为0,再将右侧的数和下面的数转变。因为右侧和下面相邻的数都将再之后的遍历中操作到,如果是1的话会将其变为零,所以无论怎样转换都没有影响。 执行此操作

小飞猪的博客 323

Open3D——点云构建Delaunay三角网【2026最新版】

点云构建Delaunay三角网

点云侠的博客 8366

别再让 AI 瞎写 SAP 代码了!这套 Claude Code Skill 的验证机制才是关键

本文深入解析了专为SAP CAP开发设计的AI辅助工具sap-cap-capire的技术架构。该工具采用四层设计:协议层集成MCP和LSP实现实时模型访问与语法检查;智能层通过4个专业化Agent(数据建模、服务开发等)分工协作;验证层确保代码质量;知识层存储文档模板。这种工程化设计解决了通用AI在CAP开发中面临的上下文不足、专业性缺失和代码质量保证等核心问题,通过本地化服务和实时反馈机制显著提升了开发效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 881

【CF662C】Binary Table

洛谷链接 题目描述 给出一个n*m的01矩阵,每次可以反转一行或一列上的01,问最少能留下多少个1 n≤20,m≤105n\leq20,m\leq10^5n≤20,m≤105 Sol 一看n≤20n\leq20n≤20,于是想状压DP 但是这样就是2202^{20}220次方了,根本没办法继续dp什么的了 一个显然的结论是如果行已经确定了,那么每一列的最有决策是确定的,每一列对答案的贡献就是0和1...

Yu Gi Oh! 311

Lammps不同亲疏水性粗糙表面的润湿行为模拟(包含in文件)

Lammps粗糙表面的润湿行为模拟(包含in文件)前言—润湿行为模拟一、物理模型构建二、具体in文件—in文件内循环亲疏水性三、具体in文件—分子模板构建初始模型以及平衡态模拟四、全部代码(基地粗糙表面只提供data文件) 前言—润湿行为模拟 润湿现象:当液体与固体接触时,液体的附着层将沿固体表面延伸。当接触角 θ\rm \thetaθ 为锐角时,液体润湿固体,若θ为零时,液体将展延到全部固体表面上。润湿现象的产生与液体和固体的性质有关。(来自百度百科) 润湿行为的本质是固液之间的相互作用,也就是分子间的范

Rockyoung 7090

Codeforces C1. Binary Table (Easy Version) (#684 Div.2) (思维&模拟)

传送门 题意: 有一个nm的01矩阵,每次操作可选其中22子矩阵的任意3个元素取反,要求将所有元素变成0,且操作次数在3nm以内(保证存在答案)。 输出操作的总次数及每次操作对应的元素下标。 思路: 分两个部分处理 先暴力处理前(n-1)*m个位置,即每次把’1’放在正反L的’头’(即上一层单出来那个)。 再单独处理最后一层,每次都看第j和j+1个位置。将是’11’型,'10’型和最后一个元素’01’型分类讨论。 这样修改次数约为n*m+次(最后一行的操作次数较多)。 代码实现: #include&

Satur9的博客 394

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Codeforces 1440C1 - Binary Table (Easy Version) (思维) Acwing 3762. 二进制矩阵 每日一题7.9

C1. Binary Table (Easy Version) 1 second256 megabytes This is the easy version of the problem. The difference between the versions is in the number of possible operations that can be made. You can make hacks if and only if you solved both versions of t..

Carry_hkr的博客 307

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Ubuntu 20.04 上构建生产级 R 环境:源码编译与依赖深度解析

R 语言是统计计算与数据科学的核心开源环境,其运行依赖底层编译器、数值库(BLAS/LAPACK)、网络栈(libcurl/SSL)及图形系统(Cairo/Pango)的精密协同。在 Ubuntu 20.04 这类 LTS 发行版中,APT 默认提供的 R 二进制包存在版本滞后、静态链接缺陷与功能裁剪等问题,导致 tidyverse、data.table、Rcpp 等主流包安装失败或运行异常。根本原因在于 R 的可移植性高度依赖编译时的工具链选择(如 gcc-10)、动态库绑定策略及路径隔离机制。本文聚焦

weixin_33728708的博客 342

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

CF 1440 C2. Binary Table (Hard Version)

This is the hard version of the problem. The difference between the versions is in the number of possible operations that can be made. You can make hacks if and only if you solved both versions of the problem. You are given a binary table of size n×m. This

萧瑟的博客 612

CodeForces 663E - Binary Table

给出一个n(n≤20)n(n \le 20)行m(m≤105)m(m\le 10^5)列的0101矩阵。每次操作可以将某一行取反或者将某一列取反。要求操作后的矩阵中的11的个数最少,求最小个数。因为行比较少,我们考虑状压。状压每一列的状态,stasta第ii位为11表示第ii行为11,为00表示第ii行为11用一个函数F(sta)F(sta)表示状态为stasta的列的数量考虑状压我们操作了哪些行,

lambda QAQ 1575

CodeForces 663E - Binary Table FWT

【题目链接】见这里 【题意】 给出一个n(n≤20)行m(m≤105)列的01矩阵。每次操作可以将某一行取反给出一个n(n≤20)行m(m≤105)列的01矩阵。每次操作可以将某一行取反或者将某一列取反。要求操作后的矩阵中的1的个数最少,求最小个数。或者将某一列取反。要求操作后的矩阵中的1的个数最少,求最小个数。 【解题思路】 由于行比较少,我们考虑状压。状压每一列的状态,sta第i位为1

I good vegetable a! 893

fwt_xor Codeforces663E Binary Table

传送门:点击打开链接 题意:操作任意的行和列,把01调换,使得最后的1的个数最少。 因为n 用F函数来记录所有的mask出现的次数。用G函数来记录某个状态翻转这一列或者不翻转这一列,最少的1的个数。 之后对F函数和G函数,求异或卷积,就得到了行的方案了,每个位置即是这种方案1的个数。 这个方法实在是太无敌了QAQ #include #include #include #inclu

qwb的博客 1277

C1 - Binary Table (Easy Version)(构造+大模拟)

https://codeforces.com/contest/1440/problem/C1 思路:2x2的矩阵有num1=0,1,2,3,4的五种可能,最多在4种以内变化。通过暴力分类讨论模拟。调了好久阿哭 #include<iostream> #include<vector> #include<queue> #include<cstring> #include<cmath> #include<map> #include<

代码笔记本 569

[CF662C]Binary Table

桶排的思想发挥了重要作用吗?似乎也不对。那么这是怎么想到的呢?

七代目鸽影 269

Binary Table (Hard Version)-(思维)

题目描述:点击进入 题意 给你一个大小为n×m的二进制表,这个表由符号 0 和符号 1 组成。 你可以进行这样的操作: 选择属于一个 2 × 2 正方形的 3 个不同的单元格,并更改这些单元格中的符号(将 0 更改为1, 1 更改为 0 )。 你的任务是使表中的所有符号都等于0。您最多可以进行 nm次 操作。 你不需要最小化操作的数量。 思路 这是上一题的加强版,操作次数变为 nm 了,我上一次的代码过不去,无奈只能优化,但也只是对边界处理优化了一下,却神奇过了(神奇神奇,用xy哥的话来说那就是可蒸馏啊)

Cosmic_Tree的博客 1780

codeforses 662C. Binary Table

题意: 给出一个01矩阵,可以将若干列或行取反,是最后1的个数尽量小。 n&lt;=20,m&lt;=100000 题解: 假如取反那些行确定的话,列的操作是唯一的。 所以列的状态确定了,他对答案的贡献也确定了。 考虑暴力,显然就是枚举选那些行。 用fwt优化即可。 code: #include&lt;cstdio&gt; #include&lt;cstdlib&gt; #inc...

fyc的博客 241

Codeforces Round #684 (Div. 2)

A - Buy the String 要么全变成1要么全变成0要么一个都不改变,三种情况取最小。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<stack> #include<queue> #include<rand

Fighting_Peter的博客 1117
上一篇: 牛客-合约数(树上启发式合并)
下一篇: Binary Table (Hard Version)-(思维)
Cosmic_Tree
博客等级 码龄7年 134粉丝 337原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值