当前位置: 首页 > news >正文

二维前缀矩阵

1.大衣的旅行

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t;
int n,m,k;
bool check(int mid,vector<vector<int>>pre,vector<vector<int>>a)
{
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=m; j++)
		{
			//枚举以老师房间为中心 距离mid的矩形区域边界
			int up=max(i-mid,(int)1),down=max(i+mid,n);
			int left=max(j-mid,(int)1),right=max(j+mid,m);
			int sum1=pre[down][right]-pre[down][left-1]-pre[up-1][right]+pre[up-1][left-1];
			//如果区域房间容量大于k+1 并且老师房间至少有一个容量 证明还能收缩
			if (sum1 >= k + 1 && a[i][j]) return true;
		}
	}
	return false;
}
signed main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>m>>k;
		vector<vector<int>>a(m+1);
		vector<vector<int>>pre(m+1);
		int sum=0;
		for(int i=1; i<=n; i++)
		{
			for(int j=1; j<=m; j++)
			{
				cin>>a[i][j];
				sum+=a[i][j];
			}
		}
		if(sum<k+1)
		{
			cout<<-1<<endl;
			continue;
		}
		for(int i=1; i<=n; i++)
		{
			for(int j=1; j<=m; j++)
			{
				pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+a[i][j];
			}
		}
		int l=0,r=max(n,m),mid=0;
		int ans=-1;
		while(l<=r) //二分遍历所有情况,找到老师的房间和距离他最远的学生的房间距离最小
		{
			mid=(l+r)/2;
			if(check(mid,pre,a))
			{
				r=mid-1; //存在符合继续缩减范围
				ans=mid;
			}
			else
			{
				l=mid+1;
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}

2.小秋的矩阵

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k;
int a[10010][10010],sum[10010][10010];
signed main()
{
	cin>>n>>m>>k;
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=m; j++)
		{
			cin>>a[i][j];
			if(a[i][j]==1) a[i][j]=0;
			else a[i][j]=1;
			sum[i][j]=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+a[i][j];
		}
	}
	int sum1=0;
	// 遍历所有可能的方阵,方阵大小为 l x l
	for (int l = 1; l <= min(n, m); l++)
	{
		// 遍历每个方阵的左上角位置 (i, j)
		for (int i = 1; i <= n - l + 1; i++)
		{
			for (int j = 1; j <= m - l + 1; j++)
			{
				// 获取左上角为 (i, j) 的 l x l 方阵的和
				int total = sum[i + l - 1][j + l - 1] - sum[i - 1][j + l - 1] - sum[i + l - 1][j - 1] + sum[i - 1][j - 1];
				if(total==k)
				{
					sum1++;
				}
			}
		}
	}
	cout<<sum1<<endl;
	return 0;
}

二维矩阵前缀计算时画图理解 

3.错误票据

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
vector<int>a;
signed main()
{
	cin>>n;
	getchar();
	string line;
	while(n--)
	{
		getline(cin,line);
		stringstream ss(line);
		int num;
		while(ss>>num)
		{
			a.push_back(num);
		}
	}
	sort(a.begin(),a.end());
	int m,n; 
	for(int i=0;i<a.size()-1;i++)
	{
		if((a[i]+1)!=a[i+1] && a[i]!=a[i+1]) //断号且非重号情况 
		{
			m=a[i]+1;
		}
		if(a[i]==a[i+1]) //重号 
		{
			n=a[i];
		}
	}
	cout<<m<<" "<<n<<endl;
	return 0;
}

对于空格字符串的处理 

相关文章:

  • 十七、实战开发 uni-app x 项目(仿京东)- 后端指南
  • 5.0 VisionPro调用USB相机的方法与步骤说明(一)
  • Vue 渲染 LaTeX 公式 Markdown 库
  • 问题 | ACOS(X) 与 ACOSD(X)的区别
  • cmake结合qt开发界面程序实例
  • 二、小白学JAVA-认识数据类型【变量】
  • 【数学建模】TOPSIS法简介及应用
  • 在不考虑符号,不考虑溢出的情况下,用循环将字符串转换为整型做乘积 再用字符串形式输出
  • 前端剪贴板操作:从传统方法到现代方案
  • 【数据库】如何用索引优化查询性能
  • Kafka-Exporter 9308端口启用TLS认证的完整指南
  • 机器学习 Day07seaborn库绘图学习
  • 【愚公系列】《高效使用DeepSeek》015-文献摘要生成
  • Qt 读取数据库
  • 《FiLM: Visual Reasoning with a General Conditioning Layer》一种通用的视觉推理条件层方法(代码实现)
  • 技术点提升效率详解
  • VBA代码
  • 基于多头注意机制的多尺度特征融合的GCN的序列数据(功率预测、故障诊断)模型及代码详解
  • 算法训练篇01 -- 力扣283.移动零
  • LogicFlow介绍
  • “走进书适圈”:一周城市生活
  • 长三角首次,在铁三赛事中感受竞技与生态的共鸣
  • 欠债七十万后,一个乡镇驿站站长的中年心事
  • KPL“王朝”诞生背后:AG和联赛一起迈向成熟
  • 通化市委书记孙简升任吉林省副省长
  • 来伊份:已下架涉事批次蜜枣粽产品,消费者可获额外补偿,取得实物后进一步分析