题解,求关注
2024-07-01 10:14:47
发布于:浙江
1阅读
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;
}
这里空空如也
有帮助,赞一个