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. 09python之运算

    运算 算数运算: 两个数相除,得到商和余数的数组的内置方法  数据.__divmod__()  场景 数据库共99条数据,每个页面10条数据,需要多少个页面  >>> a = 98  ...

  2. Map的key不变,value相加

    判断map中是否含有某个key,如包含则结果value相加,如不包含则新增. 直接上demo吧: package javademo; import java.util.HashMap; import ...

  3. [转载]SQL truncate 、delete与drop区别

    相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. 不同点: 1. t ...

  4. 今天是学习C#面向过程的最后的一天

    今天学习完啦面向过程,可能写法也就是那些,固定不变的,但是程序的写法就是由自己决定······ 今天学习了调用已经存在的方法,就是在.net  Framework 中存在的方法,具体今天提到的有这些, ...

  5. Django学习笔记 Django的工程目录

    mysite├── manage.py 管理项目:包括数据库建立.服务器运行.测试……└── mysite    ├── __init__.py     ├── settings.py 配置文件:应用 ...

  6. MVC Route路由

    由于某些原因,需要默认区域,所以需要对路由进行设置 具体实现如下: using System.Web; using System.Web.Mvc; using System.Web.Routing; ...

  7. 【mysql】查看版本的四种方法

    1:在终端下:mysql -V. 以下是代码片段: [test@login ~]$ mysql -V mysql Ver 14.7 Distrib 4.1.10a, for redhat-linux- ...

  8. WEB安全第一篇--对服务器的致命一击:代码与命令注入

    零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...

  9. Tomcat远程任意代码执行漏洞及其POC(CVE-2017-12617)

    一.原理分析: 只需参数readonly设置为false或者使用参数readonly设置启用WebDAV servlet false,则Tomcat可以不经任何身份验证的控制直接接收PUT方式上传的文 ...

  10. 邮件欺诈与SPF防御

    一.邮件欺诈: 众所周知,现在邮件的发件人是自己生成的,其实发件域名也是可以自己生成的.例如,A得知B组织的邮箱域(前提是B组织邮箱域没有配置SPF),那么A可以自己起一个邮箱服务器,配置相同的域名. ...