Codeforces Round #289 (Div. 2, ACM ICPC Rules) D. Restoring Numbers 构造 数学

原创 2015年07月09日 00:36:40
D. Restoring Numbers
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Vasya had two arrays consisting of non-negative integers: a of size n and b of size m. Vasya chose a positive integer k and created ann × 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 numbersk, 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 0 and k - 1inclusively.

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.

Sample test(s)
input
2 3
1 2 3
2 3 4
output
YES
1000000007
0 1 
1 2 3 
input
2 2
1 2
2 0
output
YES
3
0 1 
1 2 
input
2 2
1 2
2 1
output
NO
Note

By  we denote the remainder of integer division of b by c.

It is guaranteed that if there exists some set of numbers k, a1, ..., an, b1, ..., bm, that you could use to make matrix w, then there also exists a set of numbers that meets the limits 1 ≤ k ≤ 10181 ≤ ai ≤ 10181 ≤ bi ≤ 1018 in the output format. In other words, these upper bounds are introduced only for checking convenience purposes.

题目给出公式aij = (aai + bbj)% g; 给出vij,要求是否存在这样的数列,若存在则求出aai bbj 和g

首先每行每列,通过 (a[i+1][j+1] - a[i+1][j]) - (a[i][j+1] - a[i][j]) =k1g - k2g = k3g ; (a[i+1][j+1] - a[i][j+1]) - (a[i+1][j] - a[i][j])) = k4g - k5g = k6g,这样求

一下gcd就可以得出g了,若g为0,说明没有冲突,直接置为最大值。若a有数比g大的数,则说明求出的g不能满足题意,直接输出no,

否则,说明不冲突,则要构造出a b即可!如何构造a b呢,直接令aa[0] = 0(因为最后都要取模的,每一个数是几并不影响后面的值),则bb[0] = a[0][0],通过a[i][0] - a[i-1][0]  = a[i-1]%g,即可构造出来,且构造出

来的一定成立,因为,若有一个数不成立,则这个数与上面的数相减后,就不会是g的倍数,这与前面是矛盾的。这样就ok了!


#define N 105
#define M 100005
#define maxn 205
#define MOD 1000000007
int n,m;
ll a[N][N],aa[N],bb[N];
int main()
{
    while(S2(n,m)!=EOF)
    {
       FI(n){
            FJ(m){
                cin>>a[i][j];
            }
       }
       ll g = 0;
       FI(n - 1){
            FJ(m - 1){
                ll g1 = abs((a[i+1][j+1] - a[i+1][j]) - (a[i][j+1] - a[i][j]));
                ll g2 = abs((a[i+1][j+1] - a[i][j+1]) - (a[i+1][j] - a[i][j]));
                g = gcd(g,gcd(g1,g2));
            }
       }
       if(g == 0) g = MOD;
       bool flag = true;
       for(int i=0;i<n && flag;i++){
            for(int j = 0;j<m && flag;j++){
                if(a[i][j] >= g) flag = false;
            }
       }
       if(!flag){printf("NO\n");continue;}
       aa[0] = 0;bb[0] = a[0][0];
       for(int i=1;i<n;i++){aa[i] = ( aa[i-1] + a[i][0] - a[i-1][0] + g) % g;}
       for(int i=1;i<m;i++){bb[i] = ( bb[i-1] + a[0][i] - a[0][i-1] + g) % g;}
       cout<<"YES\n"<<g<<endl;
       for(int i=0;i<n;i++){cout<<aa[i]<<" ";}cout<<endl;
       for(int i=0;i<m;i++){cout<<bb[i]<<" ";}cout<<endl;
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Codeforces Round #406 (Div. 2):C. Berzerk(记忆化搜索解决博弈问题)

C. Berzerk time limit per test 4 seconds memory limit per test 256 megabytes input standard in...
  • Jaihk662
  • Jaihk662
  • 2017年03月24日 15:23
  • 791

【Codeforces Round 375 (Div 2) E】【欧拉回路Fleury算法 或网络流】One-Way Reform 每条边定向使得最多的点满足入度=出度

E. One-Way Reform time limit per test 2 seconds memory limit per test 256 megabytes ...
  • snowy_smile
  • snowy_smile
  • 2016年10月04日 10:20
  • 735

【codeforces 732E】【贪心 map乱搞】

传送门:http://codeforces.com/contest/732/problem/E 描述: E. Sockets time limit per t...
  • guhaiteng
  • guhaiteng
  • 2016年10月22日 15:32
  • 543

2016 acm/icpc 沈阳现场赛题解(5道题,更新ing)

5948.Thickest Burger(签到题)http://acm.hdu.edu.cn/showproblem.php?pid=5948题目大意:给你A和B,问2A+B和2B+A谁大?题目分析:...
  • cmershen
  • cmershen
  • 2016年11月21日 21:59
  • 1990

数学推公式——较难——Codeforces Round #187 (Div. 2)

题目链接: http://codeforces.com/contest/315/problem/C C. Sereja and Contest time limi...
  • CS_liuqing
  • CS_liuqing
  • 2013年06月16日 15:34
  • 1996

Codeforces Round #382 (Div. 2) -- D. Taxes (数学 -- 哥德巴赫猜想, 唯一分解定理)

大体题意: 你有n元钱,你需要交税,交锐的价格为n 的最大因子(不等于n),为了缩小税钱,你可以拆成多个钱相加的形式,但是不能拆出1来,问你最少交多少钱? 思路: 肯定是全都是素数最好了,那么问...
  • aozil_yang
  • aozil_yang
  • 2016年11月29日 00:19
  • 435

2017年ACM/ICPC青岛站感想

打了那么多地方的区域赛热身赛,最终获得青岛站一个名额,还是很惊喜的,因为再此之前我们学校在 网络赛中从来没有出过线,此次不容易出线一个队伍,真的感觉很幸运,以前退役的学长听到这个消息, 也是很开心,学...
  • wyxeainn
  • wyxeainn
  • 2017年11月09日 17:53
  • 356

「LibreOJ β Round #2」贪心只能过样例 [bitset]【STL】

题目链接:https://loj.ac/problem/515 ——————————————————————————————————515. 「LibreOJ β Round #2」贪心只能过样例内...
  • qq_33184171
  • qq_33184171
  • 2017年07月03日 14:51
  • 387

2017ACM-ICPC全国邀请赛(陕西)

没想到大二下学期又能有幸的参加一场全国邀请赛,跟各位大佬齐聚一堂享受被虐的快感。 =========================日常水==========================弱校抱着拿...
  • QuanQqqqq
  • QuanQqqqq
  • 2017年05月24日 09:59
  • 2371

ACM/ICPC算法学习之路

初期:  一.基本算法:       (1)枚举. (poj1753,poj2965)       (2)贪心(poj1328,poj2109,poj2586)       (3)递归和分治法...
  • u012325552
  • u012325552
  • 2014年04月12日 19:47
  • 1086
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Codeforces Round #289 (Div. 2, ACM ICPC Rules) D. Restoring Numbers 构造 数学
举报原因:
原因补充:

(最多只允许输入30个字)