TLE+WA+AC 0pts 求调
查看原帖
TLE+WA+AC 0pts 求调
923469
jrlzy楼主2024/12/14 23:45
#include <bits/stdc++.h>
#define maxn 10005
using namespace std;
string s;
int a[2][maxn],cnt;
bool work () //比大小(返回a[0]是否大于a[1])
{
	if (a[0][0]>a[1][0]) return true;
	if (a[0][0]<a[1][0]) return false;
	for (int i=a[0][0];i>=1;i--)
		if (a[0][i]>a[1][i]) return true;
	return false;
}
void work2 (int x,int y) //减 a[x]-a[y]
{
	for (int i=1;i<=a[x][0];i++)
	{
		a[x][i]-=a[y][i];
		if (a[x][i]<0) a[x][i]+=10,a[x][i+1]-=1;
	}
	if (a[x][a[x][0]]==0) a[x][0]--;
	return ;
}
void work3 (int x) //乘 a[x]*2
{
	int t=0;
	for (int i=1;i<=a[x][0];i++)
		a[x][i]=a[x][i]*2+t,t=a[x][i]/10,a[x][i]%=10;
	if (t>0) a[x][0]++,a[x][a[x][0]]=t;
	return ;
}
void work4 (int x) //除 a[x]/2
{
	int t=0;
	for (int i=a[x][0];i>=1;i--)
		a[x][i]+=t*10,t=a[x][i]%2,a[x][i]/=2;
	if (a[x][a[x][0]]==0) a[x][0]--;
	return ;
}
void out (int x) //输出
{
	for (int i=a[x][0];i>=1;i--) cout<<a[x][i];
	cout<<'\n';
	return ; 
}
int main ()
{
	for (int i=0;i<=1;i++)
	{
		cin>>s; a[i][0]=s.size();
		for (int j=1;j<=a[i][0];j++) a[i][j]=s[a[i][0]-j]-'0';
	}
	while (1)
	{
		//out(0); out(1);
		if (a[0][0]==0)
		{
			for (int i=1;i<=cnt;i++) work3(1);
			out(1);
			break;
		}
		else if (a[1][0]==0)
		{
			for (int i=1;i<=cnt;i++) work3(0);
			out(0);
			break;
		}
		else if (a[0][1]%2==0&&a[1][1]%2==0) {work4(0);work4(1);cnt++;}
		else if (a[0][1]%2==0&&a[1][1]%2==1) work4(0);
		else if (a[0][1]%2==1&&a[1][1]%2==0) work4(1);
		else
		{
			if (work()) work2(0,1);
			else work2(1,0);
		}
	}
	return 0;
}
2024/12/14 23:45
加载中...