萌新刚学gcd,求调QWQ
查看原帖
萌新刚学gcd,求调QWQ
788951
TLE_AK楼主2024/7/17 08:32
#include<bits/stdc++.h>
using namespace std;

#define int long long

namespace acac
{
	int A[7100],B[7100];
	const int xz=1e16;
	
	void cf(int A[])
	{
		int jw=0;
		for(int i=1;i<=A[0];i++)
		{
			A[i]*=2;
			A[i]+=jw;
		//	cout<<jw<<' ';
			jw=A[i]/xz;
			A[i]%=xz;
		//	cout<<A[i]<<' ';
		}
		if(jw)A[0]++,A[A[0]]=jw;
	}
	
	void fc(int A[])
	{
		if(!A[0])return ;
		int tw=0;
		for(int i=A[0];i;i--)
		{
			int now=A[i]+tw;
			tw=now%2*xz;
			A[i]=now/2;
		}
		while(!A[A[0]]&&A[0])A[0]--;
	}
	
	void cp(int A[],int B[])
	{
		A[0]=B[0];
		for(int i=1;i<=A[0];i++)
		{
			A[i]=B[i];
		}
	}	 
	
	int Ans[7100];
	void seb(int A[],int B[])
	{
		Ans[0]=A[0];
		int tw=0;
		
		for(int i=1;i<=A[0];i++)
		{
			Ans[i]=A[i]-B[i]-tw;
		//	if(A[1]==27&&B[1]==3)cout<<Ans[i]<<' '<<B[i]<<endl;
			if(Ans[i]<0)Ans[i]+=xz,tw=1;
			else tw=0;
			
		}
		while(!Ans[Ans[0]]&&Ans[0])Ans[0]--;
	}
	
	int bs(int A[],int B[])
	{
		if(A[0]<B[0])return -1;
		if(A[0]>B[0])return 1;
		for(int i=A[0];i;i--)
		{
			if(A[i]>B[i])return 1;
			if(A[i]<B[i])return -1;
		}
		return 0;
	}
	
	char S[100010],S2[100010];
	void read(int A[])
	{
		int n=strlen(S+1),ed=0;
		for(int i=1;i<=n;i++)
		{
			S2[i]=S[n-i+1];

		}
		
		int base=1; 
		for(int i=0;(i+1)*16<n;i++)
		{
			ed=(i+1)*16;
			A[0]++;
			base=1;
			for(int j=1;j<=16;j++)
			{
				A[i+1]=A[i+1]+(S2[i*16+j]-'0')*base;
				base*=10;
			}
		//	cout<<A[i+1]<<' ';
		}
		A[0]++;
		base=1;
		for(int j=ed+1;j<=n;j++)
		{
			A[A[0]]=A[A[0]]+(S2[j]-'0')*base;
			base*=10;	
		}
	//	cout<<A[A[0]]<<' ';
	//	cout<<endl;
	}
	void print(int A[])
	{
		if(!A[0])
		{
			cout<<0;
			return ;
		}
		for(int i=A[0];i;i--)
		{
			if(i==A[0])cout<<A[i];
			else 
			{
				int ws=16;
				int ys=A[i];
				if(ys==0)ws--;
				while(ys)
				{
					ys/=10;
					ws--;
				}
				while(ws--)
				{
					cout<<0;
				}
				cout<<A[i];
			}
		}
	}
	
	void swap(int A[],int B[])
	{
		cp(Ans,A);
		cp(A,B);
		cp(B,Ans);
	}
	
	int main()
	{
		scanf("%s",S+1);
		read(A);
		scanf("%s",S+1);
		read(B);
		if(bs(A,B)<0)swap(A,B);
		int tot=0;
		//print(A);	
		//cout<<endl;
		while(!(A[1]&1)&&!(B[1]&1))
		{
		//	cout<<"YES!";
			fc(A);
			
			
			fc(B);
		
		//	print(A);
		//	cout<<endl;
		//	print(B);
		//	cout<<endl;
			tot++;
		}
	

	//	cout<<bs(A,B)<<endl;
		while(bs(A,B))
		{
			
		//	int tf=0; 
			//	if(A[1]>0&&B[1]>0)tf=1,cout<<A[1]<<' '<<B[1]<<endl;
			if(!(A[1]&1))fc(A);
			else if(!(B[1]&1))fc(B);
			else seb(A,B),cp(A,Ans);
		//	if(tf)cout<<A[1]<<' '<<B[1]<<endl;
			if(bs(A,B)<0)swap(A,B);
		}	
		
		while(tot--)
		{
			cf(A);
		}
		print(A);
		return 0;
	}
}
#undef int

int main()
{
	acac::main();
	return 0;
}
2024/7/17 08:32
加载中...