题解,求关注
2024-07-01 10:14:47
发布于:浙江
2阅读
0回复
0点赞
#include<cstdio>
#include<cstring>
using namespace std;
int t,n,d,cnt,tot;
int s[20005],p[2505],fz[2505],fm[2505],a[1005];
bool vis[20005];
int readln()
{
    int x=0;
    char ch=getchar();
    while (ch<'0'||ch>'9') ch=getchar();
    while ('0'<=ch&&ch<='9') x=x*10+ch-48,ch=getchar();
    return x;
}
void makep()
{
    for (int i=2;i<20005;i++)
    {
        if (!vis[i]) p[++cnt]=i;
        for (int j=1;i*p[j]<20005;j++)
        {
            vis[i*p[j]]=true;
            if (i%p[j]==0) break;
        }
    }
}
void write(int t[])
{
    memset(s,0,sizeof(s));
    s[0]=1;
    int len=1;
    for (int i=1;i<=cnt;i++)
        for (int j=0;j<t[i];j++)
        {
            for (int k=0;k<len;k++) s[k]*=p[i];
            for (int k=0;k<len;k++) if (s[k]>9) s[k+1]+=s[k]/10,s[k]%=10;
            for (;s[len];len++) if (s[len]>9) s[len+1]+=s[len]/10,s[len]%=10;
        }
    while (len--) printf("%d",s[len]);
}
void mul(int x,int t[])
{
    for (int i=1;i<=cnt;i++) while (x%p[i]==0) {x/=p[i];t[i]++;}
}
int main()
{
    makep();
    t=readln();n=readln();d=readln();
    for (int i=1;i<=t;i++) a[i]=readln(),tot+=a[i];
    for (int i=1;i<=n;i++)
    {
        int x=readln(),y=readln();
        mul(a[y],fz);mul(tot,fm);
        tot+=d;a[y]+=d;
    }
    for (int i=1;i<=cnt;i++) if (fm[i]>=fz[i]) fm[i]-=fz[i],fz[i]=0; else fz[i]-=fm[i],fm[i]=0;
    write(fz);printf("/");write(fm);
    return 0;
}
这里空空如也




有帮助,赞一个