警示后人
  • 板块P8584 探索未知
  • 楼主LYZHZ
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/10/16 13:19
  • 上次更新2023/10/27 07:16:52
查看原帖
警示后人
716579
LYZHZ楼主2022/10/16 13:19

当比赛的时候思路是正确的,以为自己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;
}
2022/10/16 13:19
加载中...