求助卡常QAQ
查看原帖
求助卡常QAQ
481851
Withers楼主2022/6/7 18:14

RT,T掉了最后4个点,怀疑是常数问题

#include<bits/stdc++.h>
using namespace std;
struct p
{
	int x[10010]={};
	int len;
} a,b,c;
char s1[10010],s2[10010];
static char buf[100000],*paa=buf,*pd=buf;
static char buf2[100000],*pp=buf2;
inline void pc(char ch){
	if(pp-buf2==100000) fwrite(buf2,1,100000,stdout),pp=buf2;
	*pp++=ch;
}
inline void pcc(){
	fwrite(buf2,1,pp-buf2,stdout);
	pp=buf2;
}
inline void print(p k)
{
	for(int i=k.len-1;i>=0;i--)
	{
	    pc(k.x[i]+48);
	}
}
inline int cmp(p a,p b)
{
	if(a.len<b.len) return 0;
	if(a.len>b.len) return 1;
	for(int i=a.len-1;i>=0;i--)
	{
		if(a.x[i]<b.x[i]) return 0;
		if(a.x[i]>b.x[i]) return 1;
	 } 
	 return 2;
}
inline p sub(p a,p b)
{
	p c;
	c.len=a.len;
	for(int i=0;i<c.len;i++)
	{
		c.x[i]=a.x[i]-b.x[i];
	}
	for(int i=0;i<c.len;i++)
	{
		if(c.x[i]<0) c.x[i]+=10,c.x[i+1]--;
	}
	while(c.len>1&&c.x[c.len-1]==0) c.len--;
	return c;
}
inline p pl(p a,p b)
{
	p c;
	c.len=max(a.len,b.len);
	for(int i=0;i<c.len;i++)
	{
		c.x[i]=a.x[i]+b.x[i];
	}
	for(int i=0;i<c.len;i++)
	{
		c.x[i+1]+=(c.x[i]/10),c.x[i]%=10;
	}
	while(c.x[c.len])
	{
		c.x[c.len+1]+=c.x[c.len]/10,c.x[c.len]%=10,++c.len;
	}
	return c;
}
inline p c2(p a)
{
	p b;
	b.len=a.len;
	for(int i=a.len-1;i>=0;i--)
	{
		b.x[i]=(a.x[i]+a.x[i+1]%2*10)/2;
	}
	while(b.len>1&&b.x[b.len-1]==0) b.len--;
	return b;
}
int main()
{
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>s1>>s2;
	a.len=strlen(s1),b.len=strlen(s2); 
	for(int i=0;i<a.len;i++)
	{
		a.x[i]=s1[a.len-i-1]-'0';
	}
	for(int i=0;i<b.len;i++)
	{
		b.x[i]=s2[b.len-i-1]-'0';
	}
	//print(c2(a));
	int sum=0;
	while(cmp(a,b)!=2)
	{
		if(cmp(a,b)==0) swap(a,b);
		else
		{
			if(a.x[0]&1) 
			{
				if(b.x[0]&1) a=sub(a,b),swap(a,b);
				else b=c2(b);
			}
			else
			{
				if(b.x[0]&1) a=c2(a);
				else a=c2(a),b=c2(b),++sum;
			}
		}
	}
	for(int i=1;i<=sum;i++)
	{
		a=pl(a,a);
	}
	print(a);
	pcc();
}
2022/6/7 18:14
加载中...