Codeforces 1220B. Multiplication Table

传送门

冷静分析容易发现,我们只要能确定一个数的值,所有值也就可以确定了

确定一个数的值很容易,$a_ia_j=M_{i,j},a_ia_k=M_{i,k},a_ja_k=M_{j,k}$

然后就可以得到 $a_i=sqrt {M_{i,j}*M_{j,k}/M_{j,k}}$ ,然后这一题就做完了

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline ll read()
{
    ll x=0,f=1; char ch=getchar();
    while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
    while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
    return x*f;
}
const int N=1007;
ll n,m[N][N],a[N];
int main()
{
    n=read();
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++) m[i][j]=read();
    a[1]=sqrt(1ll*m[1][2]*m[1][3]/m[2][3]);
    for(int i=2;i<=n;i++) a[i]=m[1][i]/a[1];
    for(int i=1;i<=n;i++) printf("%lld ",a[i]); puts("");
    return 0;
}
原文地址:https://www.cnblogs.com/LLTYYC/p/11550132.html