MnZn60pts求助
  • 板块P8584 探索未知
  • 楼主AC_CSP
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/16 22:44
  • 上次更新2023/10/27 07:10:37
查看原帖
MnZn60pts求助
481527
AC_CSP楼主2022/10/16 22:44
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e3+7;
struct node{
	int a,b,opt;
}a[N],ans;
int n;
inline int get(int x,int y){
	x=x<0?-x:x,y=y<0?-y:y;
	while(x%y!=0){
		x%=y;
		swap(x,y);
	}
	return y;
}
signed main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++)
		scanf("%lld%lld%lld",&a[i].a,&a[i].b,&a[i].opt);
	ans.a=a[1].a,ans.b=a[1].b,ans.opt=1;
	for(int i=2;i<=n;i++){
		ans.a=ans.a*a[i].b+a[i].a*ans.b*(a[i].opt==1?1:-1);
		ans.b=ans.b*a[i].b;
		int gcd=get(ans.a,ans.b); 
		while(gcd!=1) ans.a/=gcd,ans.b/=gcd,gcd=get(ans.a,ans.b);
	}
	int gcd=get(ans.a,ans.b);
	while(gcd!=1) ans.a/=gcd,ans.b/=gcd,gcd=get(ans.a,ans.b);
	if(ans.b!=1)
		printf("%lld/%lld\n",ans.a,ans.b);
	else printf("%lld\n",ans.a);
	return 0;
}
2022/10/16 22:44
加载中...