【17.69%】【codeforces 659F】Polycarp and Hay
time limit per test4 seconds
memory limit per test512 megabytes
inputstandard input
outputstandard output
The farmer Polycarp has a warehouse with hay, which can be represented as an n × m rectangular table, where n is the number of rows, and m is the number of columns in the table. Each cell of the table contains a haystack. The height in meters of the hay located in the i-th row and the j-th column is equal to an integer ai, j and coincides with the number of cubic meters of hay in the haystack, because all cells have the size of the base 1 × 1. Polycarp has decided to tidy up in the warehouse by removing an arbitrary integer amount of cubic meters of hay from the top of each stack. You can take different amounts of hay from different haystacks. Besides, it is allowed not to touch a stack at all, or, on the contrary, to remove it completely. If a stack is completely removed, the corresponding cell becomes empty and no longer contains the stack.
Polycarp wants the following requirements to hold after the reorganization:
the total amount of hay remaining in the warehouse must be equal to k,
the heights of all stacks (i.e., cells containing a non-zero amount of hay) should be the same,
the height of at least one stack must remain the same as it was,
for the stability of the remaining structure all the stacks should form one connected region.
The two stacks are considered adjacent if they share a side in the table. The area is called connected if from any of the stack in the area you can get to any other stack in this area, moving only to adjacent stacks. In this case two adjacent stacks necessarily belong to the same area.
Help Polycarp complete this challenging task or inform that it is impossible.
Input
The first line of the input contains three integers n, m (1 ≤ n, m ≤ 1000) and k (1 ≤ k ≤ 1018) — the number of rows and columns of the rectangular table where heaps of hay are lain and the required total number cubic meters of hay after the reorganization.
Then n lines follow, each containing m positive integers ai, j (1 ≤ ai, j ≤ 109), where ai, j is equal to the number of cubic meters of hay making the hay stack on the i-th row and j-th column of the table.
Output
In the first line print “YES” (without quotes), if Polycarpus can perform the reorganisation and “NO” (without quotes) otherwise. If the answer is “YES” (without quotes), then in next n lines print m numbers — the heights of the remaining hay stacks. All the remaining non-zero values should be equal, represent a connected area and at least one of these values shouldn’t be altered.
If there are multiple answers, print any of them.
Examples
input
2 3 35
10 4 9
9 9 7
output
YES
7 0 7
7 7 7
input
4 4 50
5 9 1 1
5 1 1 5
5 1 5 5
5 5 7 1
output
YES
5 5 0 0
5 0 0 5
5 0 5 5
5 5 5 0
input
2 4 12
1 1 3 1
1 6 2 4
output
NO
Note
In the first sample non-zero values make up a connected area, their values do not exceed the initial heights of hay stacks. All the non-zero values equal 7, and their number is 5, so the total volume of the remaining hay equals the required value k = 7·5 = 35. At that the stack that is on the second line and third row remained unaltered.
【题解】
有一个数字不能变?
给的n*m矩阵中又全都是大于0的数字;
则最后的结果肯定是全都是那个不变的数字;
则枚举那个不变的数字是啥;
那个数字首先肯定要能整除k;
则k%a[i][j]==0
(1e17的因子也才300多个);
然后从那个点开始bfs(floodfill);遇到小于ai,j的则不行->只能减少数字;
然后遇到大于的则标记为访问过;
之后如果找到了答案就把那个访问过的数字直接改成枚举得到的aij;
其他数字改为0;
有两个剪枝:
1.k/a[i][j]>n*m直接剪掉;
2.在bfs的时候如果发现和bfs的起始点aij数字一样的则标记下次不要再从那个点开始了;->一个数的因子是有限的。这样就防止了它整张图都是k的因子;
#include <cstdio>
#include <cmath>
#include <set>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <stack>
#include <string>
#define LL long long
using namespace std;
const int MAXN = 1010;
const int dx[5] = {0,1,-1,0,0};
const int dy[5] = {0,0,0,-1,1};
int n,m;
LL k,need;
int a[MAXN][MAXN];
bool can[MAXN][MAXN],vis[MAXN][MAXN];
queue < pair<int,int> >dl;
void input_LL(LL &r)
{
r = 0;
char t = getchar();
while (!isdigit(t)) t = getchar();
LL sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
}
void input_int(int &r)
{
r = 0;
char t = getchar();
while (!isdigit(t)) t = getchar();
int sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
}
bool bfs(int x,int y)
{
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
vis[i][j] = false;
dl.push(make_pair(x,y));
LL now = 1;
vis[x][y] = true;
if (now == need)
return true;
while (!dl.empty())
{
int x0 = dl.front().first,y0 = dl.front().second;
dl.pop();
for (int i = 1;i <= 4;i++)
{
int x1 = x0+dx[i],y1 = y0+dy[i];
if (x1<=0 || x1>=n+1 || y1<=0 || y1>=m+1) continue;
if (!vis[x1][y1])
{
if (a[x1][y1]<a[x][y]) continue;
if (a[x1][y1] == a[x][y]) can[x1][y1] = false;
vis[x1][y1] = true;
now++;
if (now == need)
return true;
dl.push(make_pair(x1,y1));
}
}
}
return false;
}
int main()
{
//freopen("F:\\rush.txt", "r", stdin);
input_int(n);input_int(m);input_LL(k);
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
input_int(a[i][j]),can[i][j] = true;
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
if (can[i][j] && !(k%a[i][j]))
{
need = k/a[i][j];
if (need >n*m)
continue;
if (bfs(i,j))
{
puts("YES");
for (int ii = 1;ii <= n;ii++)
{
for (int jj = 1;jj <= m;jj++)
if (vis[ii][jj])
printf("%d%c",a[i][j],jj==m?'\n':' ');
else
printf("0%c",jj==m?'\n':' ');
}
return 0;
}
}
puts("NO");
return 0;
}
【17.69%】【codeforces 659F】Polycarp and Hay的更多相关文章
- codeforces 659F F. Polycarp and Hay(并查集+bfs)
题目链接: F. Polycarp and Hay time limit per test 4 seconds memory limit per test 512 megabytes input st ...
- 【 BowWow and the Timetable CodeForces - 1204A 】【思维】
题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...
- 【24.17%】【codeforces 721D】Maxim and Array
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【40.17%】【codeforces 569B】Inventory
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【17.07%】【codeforces 583D】Once Again...
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【codeforces】【比赛题解】#855 Codefest 17
神秘比赛,以<哈利波特>为主题……有点难. C题我熬夜切终于是写出来了,可惜比赛结束了,气啊. 比赛链接:点我. [A]汤姆·里德尔的日记 题意: 哈利波特正在摧毁神秘人的分灵体(魂器). ...
- 【codeforces 514D】R2D2 and Droid Army
[题目链接]:http://codeforces.com/contest/514/problem/D [题意] 给你每个机器人的m种属性p1..pm 然后r2d2每次可以选择m种属性中的一种,进行一次 ...
- 【codeforces 799D】Field expansion
[题目链接]:http://codeforces.com/contest/799/problem/D [题意] 给你长方形的两条边h,w; 你每次可以从n个数字中选出一个数字x; 然后把h或w乘上x; ...
- 【77.78%】【codeforces 625C】K-special Tables
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
随机推荐
- ejs模板引擎的使用
引入ejs.min.js 创建模板,以<%=jsCode%>包裹起来其余的html和html结构一样 focusTemplateData是模板使用的数据,使用$.each()方法遍历绑定数 ...
- C# 获取文件路径,读取项目中某程序集下文件
获取文件路径 ------------------------------------------------------------------------- winform获取文件路径: stri ...
- C语言深度剖析-----多维数组和多维指针
多维数组和多维指针 指向指针的指针 指针变量同样也有传址调用和传值调用 case1:估算要5个字节的空间,实际只用前面3个字节,设计释放空的2字节 case2:扩充到10字节 二维数组与二维指针 二维 ...
- UVA 10943 - How do you add? 递推
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- BestCoder Round #11 (Div. 2) 前三题题解
题目链接: huangjing hdu5054 Alice and Bob 思路: 就是(x,y)在两个參考系中的表示演全然一样.那么仅仅可能在这个矩形的中点.. 题目: Alice and Bob ...
- get_slave_status.py
#!/usr/bin/env python#-*- encoding: utf8 -*- import mysql.connectorimport get_mysql_conn_info &qu ...
- python3 序列
python中有很多内置序列 列表 元组 字符串 python中容器的概念 列表 元组 字符串 字典 集合 是可以改变的,元组不可改变 几乎可以在所有情况下用列表代替元组,只有一种情况下,是不可以的, ...
- WM_CAP_DRIVER_CONNECT
WM_CAP_DRIVER_CONNECT //ActiveX ---->OnCreate m_pit.Create(IDD_CAM_DIALOG,this); CRect rc; this ...
- 【t052】冰岛
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 假设你在一个n*n的冰面上,并且你想到达这个冰面的某处,可是由于冰面太滑了,所以当你向某个方向出发后, ...
- swift学习第十一天:类的定义
一: 主要内容 类的介绍和定义 类的属性 类的构造函数 一. 类的介绍和定义 Swift也是一门面向对象开发的语言 面向对象的基础是类,类产生了对象 在Swift中如何定义类呢? class是Swif ...