【BZOJ2003】[HNOI2010]矩阵(搜索)
【BZOJ2003】[HNOI2010]矩阵(搜索)
题面
懒得粘了,不难找吧。
题解
看的学长写的题解,也懒得写了
大概是这样的。
不难发现只需要确定第一行和第一列就能确定答案,而确定第一行之后每确定一行的第一个数,这一行就全部确定了。所以只需要保证第一行和第一列的字典序最小就好了。
首先我们随意构造一组解,不难发现如果我们要给(1,1)位置上的数\(+1\)的话,那么黑白染色之后一部分位置\(+1\),一部分位置\(-1\)才能重新满足平衡。
所以我们先枚举(1,1),又不难发现一个位置在\((1,1)\)确定之后,它可以填的数字之和这一行的第一个和这一列的第一个数字相关了,那么我们枚举第一行的数字,能够通过值域限制反解出这一行的第一个数字的限制来判断是否合法。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
#define ll long long
#define MAX 250
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,m,P,a[MAX][MAX],L[MAX][MAX],R[MAX][MAX];
int pw(int x){return (x&1)?1:-1;}
bool dfs(int y)
{
if(y>m)return true;
for(a[1][y]=0;a[1][y]<P;++a[1][y])
{
bool fl=true;
for(int i=2;i<=n;++i)
{
int l=a[i][y]+a[1][1]*pw(i+y)+a[1][y]*pw(i);
int r=l-(P-1);l*=pw(y+1);r*=pw(y+1);
if(l>r)swap(l,r);
L[i][y]=max(L[i][y-1],l);R[i][y]=min(R[i][y-1],r);
if(L[i][y]>R[i][y]){fl=false;break;}
}
if(fl&&dfs(y+1))return true;
}
return false;
}
int calc(int i,int j){return a[i][j]+pw(i+j)*a[1][1]+pw(j)*L[i][m]+pw(i)*a[1][j];}
void output()
{
for(int i=1;i<=n;++i,puts(""))
for(int j=1;j<=m;++j)
if(j==1&&i>1)printf("%d ",L[i][m]);
else if(i==1&&j>1)printf("%d ",a[1][j]);
else printf("%d ",calc(i,j));
puts("");
}
int main()
{
n=read();m=read();P=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
a[i][j]=read();
if(i!=1&&j!=1)a[i][j]-=a[i][j-1]+a[i-1][j]+a[i-1][j-1];
R[i][j]=P-1;
}
for(a[1][1]=0;a[1][1]<P;++a[1][1])
if(dfs(2)){output();return 0;}
return 0;
}
【BZOJ2003】[HNOI2010]矩阵(搜索)的更多相关文章
- bzoj2003 [Hnoi2010]矩阵
Description Input 第一行包含三个正整数N M P表示矩阵的行数列数以及每个数的范围,接下来N行每行包含M个非负整数,其中第i行第j个数表示以格子(i,j)为右下角的2*2子矩阵中的数 ...
- [HNOI2010] 矩阵 matrix
标签:dfs+剪枝. 题解: 这道题看着就像一道dfs题目,没有什么算法可以用来算这个东西,于是想想暴搜. 如果我们确定因为是2*2的子矩阵的和,如果确定了其中三个,那么就可以确定第四个,发现如果确定 ...
- leetcode74:二维矩阵搜索问题
使用递归的方式解决,对于matrix,在左上角x,y,右下角xx,yy组成的区域内搜索target. mx=x和xx的中点,my=y和yy的中点 判断matrix[mx][my],如果它大于targe ...
- R dataframe 遗忘, which 矩阵搜索
A data frame is used for storing data tables. It is a list of vectors of equal length. For example, ...
- 剑指Offer(十九):顺时针打印矩阵
剑指Offer(十九):顺时针打印矩阵 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baid ...
- 【剑指 Offer】12.矩阵中的路径
题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格. 如果一条路径经过了矩阵的某一格,那么 ...
- CSDN总结的面试中的十大算法
1.String/Array/Matrix 在Java中,String是一个包含char数组和其它字段.方法的类.如果没有IDE自动完成代码,下面这个方法大家应该记住: toCharArray() / ...
- [算法专题] 二分搜索&排序数组
基础知识 二分非递归写法: int binary_search(const int a[], const int size, const int val) { int lower = 0; int u ...
- NOIP2002-2017普及组题解
虽然普及组一般都是暴力省一,但是有一些题目还是挺难的qwq个人觉得能进TG的题目会在前面打上'*' NOIP2002(clear) #include<bits/stdc++.h> usin ...
随机推荐
- Log4j2使用笔记
log4j2是log4j的最新版,现在已经有很多公司在使用了.log4j2和log4j的优缺点对比,请自行百度. 上一篇笔记讲了关于log4j的使用.这篇笔记主要讲解log4 ...
- python棋类游戏编写入门
刚接触棋类游戏程序编写的朋友,往往比较迷惑,不知从何下手. 本文总结了棋类游戏的主程序流程.计算机走子策略.打分方式(以井字棋.黑白棋.五子棋为例),未使用minimax算法,比较简单,适合刚接触的朋 ...
- Qt5.9使用QWebEngineView加载网页速度非常慢,问题解决
折腾了大半天终于解决了 原帖地址:https://bugreports.qt.io/browse/QTBUG-44763 BUG单下的留言讲明了问题发生的原因,那就是系统默认设置为自动寻找代理,而使用 ...
- [UWP 自定义控件]了解模板化控件(1):基础知识
1.概述 UWP允许开发者通过两种方式创建自定义的控件:UserControl和TemplatedControl(模板化控件).这个主题主要讲述如何创建和理解模板化控件,目标是能理解模板化控件常见的知 ...
- 批量实现多台服务器之间ssh无密码登录的相互信任关系
最近IDC上架了一批hadoop大数据业务服务器,由于集群环境需要在这些服务器之间实现ssh无密码登录的相互信任关系.具体的实现思路:在其中的任一台服务器上通过"ssh-keygen -t ...
- LB层到Real Server之间访问请求的响应时间及HTTP状态码监控及报警设置
为了监控到各业务的访问质量,基于LB层的Nginx日志,实现LB层到Real Server之间访问请求的响应时间(即upstream_response_time)及HTTP状态码(即upstream_ ...
- Gitlab备份和恢复操作记录
前面已经介绍了Gitlab环境部署记录,这里简单说下Gitlab的备份和恢复操作记录: 1)Gitlab的备份目录路径设置 [root@code-server ~]# vim /etc/gitlab/ ...
- rsync同步时,删除目标目录比源目录多余文件的方法(--delete)
在日常运维工作中,我们经常用到rsync这个同步神器.有时在同步两个目录时,会要求删除目标目录中比源目录多出的文件,这种情况下,就可用到rsync的--delete参数来实现这个需求了. 实例说明:在 ...
- jdbcTemplete(转)
文章来源:http://blog.csdn.net/dyllove98/article/details/7772463 JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行 ...
- 小学四则运算APP 第一个冲刺阶段 第六天
团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第一次冲刺阶段时间:11.17~11.27 本次发布的是重新排列整齐ResultActivity的布局代码activity_result. ...