75.WA第二个点求助求助
查看原帖
75.WA第二个点求助求助
1477837
Yangzp666楼主2024/10/7 16:42
#include<bits/stdc++.h>
using namespace std;
const int N=201000;
int a[N],b[N],n,ans[N],len,lena;
char m[110];
int check()
{
	int k=0;
	for(int i=1;i<=lena;i++)
	{
		if(ans[i]!=ans[lena-i+1]) k=1;
	}
	if(k) return 0;
	return 1;
}
int main()
{
	cin>>n>>m;
	len=strlen(m);
	for(int i=1;i<=len;i++)
	{
		//b为颠倒的数 
		if(n!=16)
		{		
		b[i]=m[i-1]-48;
		a[i]=m[len-i]-48;	
		}
		else 
		{
			b[i]=m[i-1]-55;
			a[i]=m[len-i]-55;
		}
	}
	int p=0;
	for(int i=1;i<=len;i++)
	{
		if(a[i]!=a[len-i+1]) p=1;
	}
	if(p==0) 
	{
		cout<<"STEP=0"<<endl;
		return 0;
	}
	lena=len;
	int cnt=0;
	while(cnt==0||check()==0)
	{
		if(cnt!=0)
		for(int j=1;j<=lena;j++)
		{
			a[j]=ans[j];
			b[j]=ans[lena-j+1];
		}
		memset(ans,0,sizeof(ans));
		int x=0;
		for(int i=1;i<=len;i++)
		{
			int t=x+a[i]+b[i];
			ans[i]=t%n;
			x=t/n;
		}
		cnt++;
		if(x>=1) 
		{
			lena++;
			ans[lena]=x;
		}
		len=lena;
		if(cnt>=31) 
		{
			cout<<"Impossible!";
			return 0;
		}
	}
	cout<<"STEP="<<cnt;
}
2024/10/7 16:42
加载中...