D. Restoring Numbers
 

Vasya had two arrays consisting of non-negative integers: a of size n and b of size m. Vasya chose a positive integerk and created an n × m matrix v using the following formula:

Vasya wrote down matrix v on a piece of paper and put it in the table.

A year later Vasya was cleaning his table when he found a piece of paper containing an n × m matrix w. He remembered making a matrix one day by the rules given above but he was not sure if he had found the paper with the matrix v from those days. Your task is to find out if the matrix w that you've found could have been obtained by following these rules and if it could, then for what numbers k, a1, a2, ..., an, b1, b2, ..., bm it is possible.

Input

The first line contains integers n and m (1 ≤ n, m ≤ 100), separated by a space — the number of rows and columns in the found matrix, respectively.

The i-th of the following lines contains numbers wi, 1, wi, 2, ..., wi, m (0 ≤ wi, j ≤ 109), separated by spaces — the elements of the i-th row of matrix w.

Output

If the matrix w could not have been obtained in the manner described above, print "NO" (without quotes) in the single line of output.

Otherwise, print four lines.

In the first line print "YES" (without quotes).

In the second line print an integer k (1 ≤ k ≤ 1018). Note that each element of table w should be in range between 0and k - 1 inclusively.

In the third line print n integers a1, a2, ..., an (0 ≤ ai ≤ 1018), separated by spaces.

In the fourth line print m integers b1, b2, ..., bm (0 ≤ bi ≤ 1018), separated by spaces.

有 a 数列 长度为n b 数列长度为m 都是非负整数, 然后 他们两个数组组成一个n*m的矩阵,然后 w[i][j]=(a[i]+b[j])%m;

最后给出了这个矩阵和n 和m 就数列 a 和 数列 b 还有m , 令 a[0]-p=0;

那么我们得到了一个数列 0,a[2]-p-x1k...a[n]-xnk-p-  ; b[1]+p-y1k...b[n]+p- yn k, 然后

再搞出一个矩阵 m[i][j] 然后在abs(a[i]+b[i]-w[i][j])=m[i][j] ;  当m中的每个元素都为0时 就可以知道w 中最大的那个+1就是答案了,还有就是有不为0的

可以将数列带进去看一下就发现 m[i][j]=x*k 这样求一次gcd就好了

#include <iostream>
#include <cstdio>
#include <string.h>
#include <stdlib.h>
using namespace std;
const int maxn=;
long long ma[maxn][maxn];
long long a[maxn],b[maxn];
long long e[maxn][maxn];
long long gcd(long long a, long long b){
if(b==) return a;
else return gcd(b,a%b);
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==){
for(int i=; i<n; ++i)
for(int j=; j<m; ++j)
scanf("%I64d",&ma[i][j]);
a[]=;
long long K;
for(int i=; i<n; ++i)
a[i]=ma[i][]-ma[][];
for(int i=; i<m; ++i)
b[i]=ma[][i];
for(int i=; i<n; ++i)
for(int j=; j<m ; ++j)
e[i][j]=abs(a[i]+b[j]-ma[i][j]);
bool falg=false;
for(int i=; i<n; ++i)
for(int j=; j<m; ++j)
if(e[i][j]!=) falg=true;
K=;
if(falg==false){
for(int i=; i<n; ++i)
for(int j=; j<m; ++j)
K=max(K,ma[i][j]);
K++;
puts("YES");
printf("%I64d\n",K);
for(int i=; i<n; ++i)
printf("%I64d%c",(a[i]%K+K)%K,i==n-?'\n':' '); for(int i=; i<m; ++i)
printf("%I64d%c",(b[i]%K+K)%K,i==m-?'\n':' '); }else{
K=;
bool finde=false;
for(int i=; i<n; ++i){
if(finde) break;
for(int j=; j<m; ++j){
if(e[i][j]!=){
K=e[i][j];
finde=true ; break;
}
}
}
for(int i=; i<n; ++i)
for(int j= ; j<m; ++j){
K=gcd(K,e[i][j]);
}
finde=true;
for(int i=; i<n; ++i)
for(int j=; j<m; ++j)
if(ma[i][j]>=K) finde=false;
if(finde==false){
puts("NO"); continue;
}
puts("YES");
printf("%I64d\n",K);
for(int i=; i<n; ++i)
printf("%I64d%c",(a[i]%K+K)%K,i==n-?'\n':' ');
for(int i=; i<m; ++i)
printf("%I64d%c",(b[i]%K+K)%K,i==m-?'\n':' ');
} }
return ;
}

Restoring Numbers的更多相关文章

  1. codeforces 509 D. Restoring Numbers(数学+构造)

    题目链接:http://codeforces.com/problemset/problem/509/D 题意:题目给出公式w[i][j]= (a[i] + b[j])% k; 给出w,要求是否存在这样 ...

  2. 题解【CodeForces1154A】Restoring Three Numbers

    Description Polycarp has guessed three positive integers \(a\), \(b\) and \(c\). He keeps these numb ...

  3. CF1154A Restoring Three Numbers 题解

    Content 已知有三个正整数 \(a,b,c\),现在给出 \(a+b,a+c,b+c,a+b+c\)(不保证有序)的值,试求出 \(a,b,c\). 数据范围:\(2\leqslant a+b, ...

  4. Codeforces Round #279 (Div. 2) E. Restoring Increasing Sequence 二分

    E. Restoring Increasing Sequence time limit per test 1 second memory limit per test 256 megabytes in ...

  5. PatentTips – GPU Saving and Restoring Thread Group Operating State

    BACKGROUND OF THE INVENTION The present invention relates generally to single-instruction, multiple- ...

  6. Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine) C. Restoring

    C. Restoring Permutation time limit per test1 second memory limit per test256 megabytes inputstandar ...

  7. Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range

    在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...

  8. POJ 2739. Sum of Consecutive Prime Numbers

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20050 ...

  9. [LeetCode] Add Two Numbers II 两个数字相加之二

    You are given two linked lists representing two non-negative numbers. The most significant digit com ...

随机推荐

  1. Python 进阶(三)面向对象编程基础

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkMAAAFGCAIAAADmfgziAAAgAElEQVR4nOx993vT1v7/93/5EEt2Eg

  2. MinGW和MSYS的自动安装 【转】

    好吧,这是今天写的第二篇文章.我表示这篇才是今天的重头.(伪 半年之前曾经写过一篇关于MinGW和MSYS的手动安装的文章[1],到现在还是全站点击率最高的.(目前这篇文章是最高的.)好吧,侧面反映了 ...

  3. Linux系统故障排除

    可能出现的故障: 1,管理员密码忘记 进入单用户模式修改密码 2.系统无法正常启动 a.grub损坏(MBR损坏,grub配置文件丢失) b.系统初始化故障(某文件系统无法正常挂载.驱动不兼容) c. ...

  4. django 自定模板标签的注册

    首先注册方法一般都是先实例化一个template.Library.如: from django import template register = template.Library() 1.注册自定 ...

  5. [转]C++结构体|类 内存对齐详解

    内存地址对齐,是一种在计算机内存中排列数据(表现为变量的地址).访问数据(表现为CPU读取数据)的一种方式,包含了两种相互独立又相互关联的部分:基本数据对齐和结构体数据对齐 . 为什么需要内存对齐?对 ...

  6. 由JS函数返回值引发的一场”血案"

    ---恢复内容开始--- 啊...  本来昨天晚上想写来着,结果陪老婆看电视剧就忘了... 呢滴神啊,原谅我吧. 背景:昨天在项目中做一个小功能的时候,出现了个小问题,而且一开始找了半天也没找到原因. ...

  7. 【BZOJ1645】[Usaco2007 Open]City Horizon 城市地平线 离散化+线段树

    [BZOJ1645][Usaco2007 Open]City Horizon 城市地平线 Description Farmer John has taken his cows on a trip to ...

  8. 如何判断SharedPreferences 记录存在

    private EditText et; private String ettext; SharedPreferences settings; Editor editor; //设置 settings ...

  9. ionic+cordova开发!

    这里是一些学习的过程中纪录的: 官方网站: http://www.ionic-china.com/ 参考文章: https://blog.csdn.net/xyzz609/article/detail ...

  10. 170615、spring不同数据库数据源动态切换

    spring mvc+mybatis+多数据源切换 选取Oracle,MySQL作为例子切换数据源.mysql为默认数据源,在测试的action中,进行mysql和oracle的动态切换. 1.web ...