不懂就问(玄关求调)
查看原帖
不懂就问(玄关求调)
352918
I_think_so_i_am_here楼主2024/7/15 22:49

同一份代码,为啥一个这样,一个这样?

#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
struct node{
	int a,b;
}o[100010];
bool cmp(node x,node y){
	if(x.a!=y.a)return x.a>y.a;
	else return x.b>y.b;
}
int n,a,b,aa,bb;
int gcd(int x,int y){
	if(y==0)return x;
	else return gcd(y,x%y);
}
int maxx(int x,int y){
    if(x>y)return x;
    else return y;
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>o[i].b;
	for(int i=1;i<=n;i++)cin>>o[i].a;
	sort(o+1,o+n+1,cmp);
	for(int i=1;i<=n;i++){
		if(o[i].a==o[i-1].a)continue;
		a=o[i].a;
		b=o[i].b;
		if(aa==0&&bb==0){
			aa=a;
			bb=b;
			continue;
		}
		int fir=b,sec=bb;
		while(fir!=sec){
			if(fir<sec){
				int bei=(sec-fir)/a;
                bei=maxx(bei,1);
				fir+=bei*a;
			}else{
				int bei=(fir-sec)/aa;
                bei=maxx(bei,1);
				sec+=bei*aa;
			}
		}
		int gc=gcd(aa,a);
		aa=(aa*a)/gc;
		bb=sec%aa;
	}
	cout<<bb<<endl;
	return 0;
}

tips:代码比(fēi)较(cháng)暴力,不喜勿喷。

2024/7/15 22:49
加载中...