记录编号 |
362514 |
评测结果 |
AAAA |
题目名称 |
[NOIP 1999]回文数 |
最终得分 |
100 |
用户昵称 |
HeHe |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.003 s |
提交时间 |
2017-01-07 17:16:45 |
内存使用 |
0.31 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 500
#define is_num(_tmp)\
((_tmp<='9'&_tmp>='0')||(_tmp>='a'&&_tmp<='f'))
#define is_n(_tmp) (_tmp<='9'&_tmp>='0')
#define my_max(_num_1,_num_2) (_num_1>_num_2?_num_1:_num_2)
void my_swap(int&a,int&b)
{
int c=a;
a=b,b=c;
return ;
}
struct gj{
int len,j;
int s[MAXN];
void clear()
{
len=0;memset(s,0,sizeof(s));
return ;
}
gj()
{
clear();
}
gj swap()
{
gj a=*this;
for(int i=0;i<len/2;i++)
my_swap(a.s[i],a.s[len-i-1]);
return a;
}
gj operator+(const gj&a)
{
gj b;b.clear();
b.j=j;
b.len=my_max(len,a.len)+1;
for(int i=0;i<b.len;i++)
{
b.s[i]+=a.s[i]+s[i];
b.s[i+1]+=b.s[i]/j;
b.s[i]%=j;
}
if(!b.s[b.len-1])b.len--;
return b;
}
void read()
{
clear();
scanf("%d",&j);
char _tmp(getchar());
while(!is_num(_tmp))_tmp=getchar();
while(is_num(_tmp))
if(is_n(_tmp))s[len++]=_tmp-'0',_tmp=getchar();
else s[len++]=_tmp-'a'+10,_tmp=getchar();
*this=swap();
return ;
}
void print()
{
for(int i=0;i<len;i++)
if(s[i]>=10)cout<<(char)(s[i]+'a'-10);
else cout<<s[i];
}
};
int ans;
bool hw(gj &a)
{
ans++;
gj b=a.swap();
a=a+b;
for(int i=0;i<a.len/2;i++)
if(a.s[i]!=a.s[a.len-i-1])return 0;
return 1;
}
int main()
{
freopen("huiwen.in","r",stdin);
freopen("huiwen.out","w",stdout);
gj a;
a.read();
bool flag=0;
for(int i=0;i<30;i++)
if(hw(a)){flag=1;break;}
else continue;
if(flag)a.print(),cout<<"\n"<<ans<<"\n";
else cout<<"impossible\n";
return 0;
}