牛客练习赛71——回文数(模拟+细节)
牛客练习赛71——回文数(模拟+细节)
真的细节。
原题链接
思路:
记每一位的个数为num[i].根据题意可以得知:
无法构造的情况有:
1.有至少两个num[i]为奇数。
2.num[0]>=2并且其他数位只有一个并且只出现了一次,比如050,就无法避免前导0
注意特判最后一个样例。
正常做法分为两类,如果num[0]==0,说明无需考虑前导零的问题,直接从小到大枚举取一半构造出前半段,翻转得到后半段即可;否则,就要先把最小的非0位放在开始,然后再重复前面的步骤。如果num[i]%2的话,就将多出来的这个放在中间。
附上垃圾代码:
#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pairPLL;typedef pairPII;typedef pairPDD;#defineinline ll read(){    ll x=0,f=1;    char ch=getchar();    while(ch<'0'||ch>'9')    {        if(ch=='-')            f=-1;        ch=getchar();    }    while(ch>='0'&&ch<='9')    {        x=x*10+ch-'0';        ch=getchar();    }    return x*f;}char F[200];inline void out(I_int x){    if (x == 0)        return (void) (putchar('0'));    I_int tmp = x > 0 ? x : -x;    if (x < 0)        putchar('-');    int cnt = 0;    while (tmp > 0)    {        F[cnt++] = tmp % 10 + '0';        tmp /= 10;    }    while (cnt > 0)        putchar(F[--cnt]);    //cout<<" ";}ll ksm(ll a,ll b,ll p){    ll res=1;    while(b)    {        if(b&1)            res=res*a%p;        a=a*a%p;        b>>=1;    }    return res;}const ll inf = 0x3f3f3f3f3f3f3f3f;const int N=410,mod=1e8;const double PI = 3.1415926535;const double eps=1e-6;const int maxn=1100;int main(){    int num[10];    int cnt=0,sum=0,pos;    for(int i=0; i<=9; i++)    {        num[i]=read();        if(num[i]&1)            cnt++,pos=i;        if(num[i]) sum++;    }    if(cnt>1||(num[0]>=2&&sum==2&&num[pos]==1))        puts("-1");    else if(sum==1&&num[0]==1) puts("0");    else    {        if(num[0]==0)        {            string s;            int flag=-1;            for(int i=0; i<=9; i++)                if(num[i])                {                    for(int j=1; j<=num[i]/2; j++)                    {                        char t=i+'0';                        s=s+t;                    }                    if(num[i]&1)                        flag=i;                }            cout<
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。