Codeforces Round #701 D. Multiples and Power Differences LCM性质

Codeforces Round #701 D. Multiples and Power Differences LCM性质


传送门: https://codeforces.com/contest/1485/problem/D

题意

给一个 n ∗ m n*m nm的矩阵,每一位数都能乘任意倍数,且要满足相邻数的差绝对值是 k 4 ( k ≥ 1 ) k^4(k \ge 1) k4(k1),输出构造完的矩阵,并且构造之后的每一位数都不能大于1e6。

思路

这 题 只 要 想 到 了 就 没 什 么 难 度 , 感 觉 还 没 有 C 题 推 的 爽 。 这题只要想到了就没什么难度,感觉还没有C题推的爽。 C

每 一 位 都 ≤ 16 , 这 很 重 要 。 他 们 的 l c m 不 会 太 大 , 最 大 为 2 ∗ 3 ∗ 5 ∗ 7 ∗ 11 ∗ 13 。 每一位都\leq 16,这很重要。他们的lcm不会太大,最大为2*3*5*7*11*13。 16lcm23571113

当 k 可 以 为 0 的 时 候 , 直 接 输 出 l c m , 相 邻 差 为 0 4 . 当k可以为0的时候,直接输出lcm,相邻差为0^4. k0lcm04.

但 是 k ≥ 1 , 没 关 系 , 我 们 隔 项 + a [ i ] [ j ] 4 就 行 , 这 样 相 邻 差 为 a [ i ] [ j ] 4 。 但是k \ge 1,没关系,我们隔项+a[i][j]^4就行,这样相邻差为a[i][j]^4。 k1+a[i][j]4a[i][j]4

Code(124MS)

#include "bits/stdc++.h"
using namespace std;

typedef long long ll;

ll a[505][505];
ll gcd(ll a, ll b) {
    
    
    return b ? gcd(b, a % b) : a;
}

void solve() {
    
    
    int n, m; cin >> n >> m;
    ll g;
    ll sum = 1;
    for(int i = 1;i <= n; i++) {
    
    
        for(int j = 1;j <= m; j++) {
    
    
            cin >> a[i][j];
            sum *= a[i][j];
            if(i == 1 && j == 1) continue;
            else if(i == 1 && j == 2){
    
    
                g = a[1][1] * a[1][2] / gcd(a[1][1], a[2][2]);
            }
            else {
    
    
                g = g * a[i][j] / gcd(g, a[i][j]);
            }
        }
    }
    for(int i = 1;i <= n; i++) {
    
    
        for (int j = 1; j <= m; j++) {
    
    
            if ((i + j) & 1) cout << g << " ";
            else cout << g + a[i][j] * a[i][j] * a[i][j] * a[i][j] << " ";
        }
    }
    cout << endl;
}

signed main() {
    
    
    solve();
}

猜你喜欢

转载自blog.csdn.net/fztsilly/article/details/113799289