当比赛的时候思路是正确的,以为自己AC了那么你就错了,本蒟蒻的经历告诉我们要——看清题
#include<bits/stdc++.h>
using namespace std;
int n;
int aa,bb,optt;
int ansa=0,ansb=1;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&aa,&bb,&optt);
int k=__gcd(bb,ansb);
int p=ansb*bb/k;
aa=aa*ansb/k;
ansa=ansa*bb/k;
if(optt==1)
{
ansb=p;
ansa=ansa+aa;
}
else if(optt==2)
{
ansb=p;
ansa=ansa-aa;
}
}
if(ansa%ansb==0)
{
printf("%d",ansa/ansb);
}
else
{
int k=__gcd(ansa,ansb);
ansa=ansa/k;
ansb=ansb/k;
if(ansb<0) ansa=-ansa,ansb=-ansb;
printf("%d/%d",ansa,ansb);
}
return 0;
}
这么写就错了,要开long long啊!!!
#include<bits/stdc++.h>
using namespace std;
int n;
long long aa,bb,optt;
long long ansa=0,ansb=1;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%lld%lld%lld",&aa,&bb,&optt);
long long k=__gcd(bb,ansb);
long long p=ansb*bb/k;
aa=aa*ansb/k;
ansa=ansa*bb/k;
if(optt==1)
{
ansb=p;
ansa=ansa+aa;
}
else if(optt==2)
{
ansb=p;
ansa=ansa-aa;
}
}
if(ansa%ansb==0)
{
printf("%lld",ansa/ansb);
}
else
{
int k=__gcd(ansa,ansb);
ansa=ansa/k;
ansb=ansb/k;
if(ansb<0) ansa=-ansa,ansb=-ansb;
printf("%lld/%lld",ansa,ansb);
}
return 0;
}