求助!TLE!
查看原帖
求助!TLE!
948216
ZackofZHOU楼主2023/12/16 22:15

记录
代码:

#include<iostream>
using namespace std;
int x[10010],y[10010],ans[10010],C[10010],lx,ly,la,t = 0;
void minusx(int *a,int *b,int &lena,int &lenb)
{
	for(int i = 1;i <= lenb;++i)
	{
		a[i] -= b[i];
		if(a[i] < 0)
			a[i + 1]--,a[i] += 10;
	}
	if(lena == 1)
		return;
	while(!a[lena] && lena > 0)
    	lena--;
	if(lena == 0)
		lena = 1;
}
void multiply(int *a,int &lena)
{
	bool flag = false;
	for(int i = 1;i <= lena;++i)
	{
		a[i] <<= 1;
		if(flag)
			a[i] |= 1;
		if(a[i] > 9)
		{
			a[i] -= 10;
			flag = true;
		}
		else
			flag = false;
	}
	if(flag)
	{
		lena++;
		a[lena] = 1;
	}
}
void divide(int *a,int &lena)
{
	int X = 0,Y;
	for(int i = lena;i >= 1;--i)
	{
		if(a[i] & 1)
		{
			ans[i] = (X * 10 + a[i]) >> 1;
			X = (X * 10 + a[i]) - (((X * 10 + a[i]) >> 1) << 1);
		}
		else
		{
			ans[i] = (X * 10 + a[i]) >> 1;
			X = 0;
		}
	}
	for(int i = lena;i >= 1;--i)
	{
		if(ans[i] == 0)
		    lena--;
		else
			break;
	}
	if(lena == 0)
		lena++;
	for(int i = 1;i <= lena;++i)
		a[i] = ans[i];
}
void give(int *x,int *y,int &lena,int &lenb)
{
	lena = lenb;
	for(int i = 1;i <= lena;++i)
		x[i] = y[i];
}
bool check(int *x,int *y,int &lena,int &lenb)
{
	if(lena < lenb)
		return false;
	if(lena > lenb)
		return true;
	for(int i = lena;i >= 1;--i)
	{
		if(x[i] > y[i])
			return true;
		if(x[i] < y[i])
			return false;
	}
	return true;
}
int main()
{
	string a,b;
	cin >> a >> b;
	lx = a.size();
	ly = b.size();
	la = 1;
	for(int i = lx - 1;i >= 0;--i)
		x[lx - i] = a[i] - '0';
	for(int i = ly - 1;i >= 0;--i)
		y[ly - i] = b[i] - '0';
	ans[1] = 1;
	while(!((lx == 1 && x[1] == 0) || (ly == 1 && y[1] == 0)))
	{
		if(x[1] % 2 == 0)
		{
			if(y[1] & 1)
				divide(x,lx);
			else
			{
				divide(x,lx);
				divide(y,ly);
				t++;
			}
		}
		else
		{
			if(y[1] & 1)
			{
				if(check(x,y,lx,ly))
					minusx(x,y,lx,ly);
				else
					minusx(y,x,ly,lx);
			}
			else
				divide(y,ly);
		}
	}
	if(check(x,y,lx,ly))
		give(ans,x,la,lx);
	else
		give(ans,y,la,ly);
	for(int i = 0;i < t;++i)
		multiply(ans,la);
	for(int i = la;i >= 1;--i)
		cout << ans[i];
	return 0;
}
2023/12/16 22:15
加载中...