题解:UVA12765 Factorial Products

FeiYu32

2024-11-16 11:56:32

Solution

题意简述

给出 n 个和 m 个数字,每个数字表示这个数字的阶乘,判断两边的数字是否相同。

思路解析

一道模拟,把重复的数字约去再乘起来判断即可。

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    for(;;)
    {
        long long n,m,b[10009],maxn=0,z=1,r=1;
        cin>>n>>m;
        if(n==0&&m==0)
        {
            break;
        }
        for(int i=1;i<=n;i++)
        {
            long long a;
            cin>>a;
            maxn=max(maxn,a);
            for(int j=1;j<=a;j++)
            {
                b[j]++;
            }
        }
        for(int i=1;i<=n;i++)
        {
            long long a;
            cin>>a;
            maxn=max(maxn,a);
            for(int j=1;j<=a;j++)
            {
                b[j]--;
            }
        }
        for(int i=1;i<=maxn;i++)
        {
            if(b[i]<0)
            {
                for(int j=1;j<=abs(b[i]);j++)z*=i;
            }
            else
            {
                for(int j=1;j<=abs(b[i]);j++)r*=i;
            }
        }
        if(z==r)cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
}

完结撒花!