惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Cyberwarzone
Cyberwarzone
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
小众软件
小众软件
Recent Announcements
Recent Announcements
博客园 - 三生石上(FineUI控件)
Security Archives - TechRepublic
Security Archives - TechRepublic
W
WeLiveSecurity
Cloudbric
Cloudbric
博客园 - 司徒正美
美团技术团队
N
News and Events Feed by Topic
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
PCI Perspectives
PCI Perspectives
宝玉的分享
宝玉的分享
H
Help Net Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
Help Net Security
Help Net Security
Last Week in AI
Last Week in AI
S
Schneier on Security
N
News | PayPal Newsroom
B
Blog RSS Feed
L
LINUX DO - 最新话题
T
Troy Hunt's Blog
S
Secure Thoughts
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
L
Lohrmann on Cybersecurity
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Tenable Blog
S
Securelist
L
LangChain Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
I
InfoQ
H
Heimdal Security Blog
Cisco Talos Blog
Cisco Talos Blog
F
Full Disclosure
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
K
Kaspersky official blog
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
阮一峰的网络日志
阮一峰的网络日志
C
Cisco Blogs

distjr_的博客

最新 | 画中少女 | distjr_的博客 天津行记 | distjr_的博客 最终选择去天津大学了 | distjr_的博客 上伊那牡丹,看完了 | distjr_的博客 上伊那牡丹,看完了 | distjr_的博客 帖子测试 | distjr_的博客 最新 | 关于我的高中三年 | distjr_的博客 最新 | KeepOpen:一款保持移动硬盘开启状态的小工具 | distjr_的博客 最新 | KeepOpen:一款保持移动硬盘开启状态的小工具 | distjr_的博客 最新 | 关于我的高中三年 | distjr_的博客 一款基于Python的随机学生点名器 | distjr_的博客 最新 | 一款基于Python的随机学生点名器 | distjr_的博客 U571839 千本桜 题解 | distjr_的博客 U571839 千本桜 题解 | distjr_的博客 土地 | distjr_的博客 土地 | distjr_的博客 一九六八年 | distjr_的博客 一九六八年 | distjr_的博客 原野 | distjr_的博客 原野 | distjr_的博客 一种基于人工智能技术的系统发生树绘制与物种演化路径推断系统 | distjr_的博客 一种基于人工智能技术的系统发生树绘制与物种演化路径推断系统 | distjr_的博客 回来?Ⅱ | distjr_的博客 回来?Ⅱ | distjr_的博客 U314392 distjr_想买书 题解 | distjr_的博客 U314392 distjr_想买书 题解 | distjr_的博客 天涯边 | distjr_的博客 天涯边 | distjr_的博客 CF509D Restoring Numbers 题解 | distjr_的博客 回来?Ⅰ | distjr_的博客 回来?Ⅰ | distjr_的博客 一场提前告知的自杀 | distjr_的博客 一场提前告知的自杀 | distjr_的博客 test | distjr_的博客 test | distjr_的博客 置顶 | 关于我自己 | distjr_的博客 置顶 | 关于我自己 | distjr_的博客
CF509D Restoring Numbers 题解 | distjr_的博客
文章作者: distjr_ · 2023-11-05 · via distjr_的博客

题目描述

给你一个 $n \times m$ 的矩阵 $v$。

$v_{i, j} = (a_i + b_j) \bmod{k}$。

求两个序列及其模数 $k$。

思路

注意到,如果我们将 $a$ 序列中的所有数加上一,$b$ 序列中的所有数减去一,整个矩阵不会改变。

因此我们不妨设 $a_1 = 0$,通过第一列推出 $b$ 序列的值,进而推出 $a$ 序列的值。现在我们为每个格子 $(i, j)$ 计算一个误差 $error = a_i + b_j - v_{i, j}$。

如果所有的误差均为 $0$,则已经找到了一个满足条件的矩阵。否则意味着误差一定是 $k$ 的倍数,即 $k$ 一定是所有误差的公因数。另外 $k$ 还必须大于所有 $v$ 矩阵中出现的数。如果满足这两个条件则有解,否则无解。

代码

/**
 * @file CF509D.cpp
 * @author distjr_
 * @brief Solution of CF509D
 */
#include <cstdio>
#include <cstdlib>
#define MAXN 105
#define int long long
// #define DEBUG
using namespace std;

int n, m, v[MAXN][MAXN], a[MAXN], b[MAXN], error, k = 0;
bool flag = true;
int (*gcd)(int, int) = [](int a, int b)
{ return ((b == 0) ? a : gcd(b, a % b)); };


signed main()
{
    scanf("%lld %lld", &n, &m);
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; ++j)
            scanf("%lld", &v[i][j]);
    for (int i = 1; i <= m; ++i)
        b[i] = v[1][i];
    for (int i = 1; i <= n; ++i)
        a[i] = v[i][1] - b[1];
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; ++j)
            error = abs(a[i] + b[j] - v[i][j]), k = gcd(k, error);
    if (!k)  // k为0,故最后所有的误差值都是0,直接给k赋值为1e9+7即可
        k = 1000000007;
    for (int i = 1; i <= n && flag; ++i)
        for (int j = 1; j <= m; ++j)
            if (v[i][j] >= k)
            {
                flag = false;
                break;
            }
    if (!flag)
    {
        printf("NO\n");
        return 0;
    }
    printf("YES\n%lld\n", k);
    for (int i = 1; i <= n; ++i)
        printf("%lld ", (a[i] + k) % k);
    printf("\n");
    for (int i = 1; i <= m; ++i)
        printf("%lld ", (b[i] + k) % k);
    printf("\n");
    return 0;
}

以上。如有问题烦请指出,谢谢。