[Codeforces394B]Very Beautiful Number(逆推)

退役了吗?

退役了……

但是以后也许还不会一下子离开OI吧

因为我真的很喜欢OI啊

 

只是实力不如人

为了考上一个学OI的高中

 

要努力啊!

 

[本题]

一道很好的题目了(刷CF题看到的)

和394A一样,是比较好的

 

是一个递推

但是是从后往前的

枚举最后一位   for(int i=1; i<10; i++)    ;     c 为上一位的进位;

倒数第二位: A[p-1] = A[p] * x + c;    

倒数第三位:A[p-2] = A[p-1] * x + c; 

 

最后判定第一位与最后一位是否相等即可;

 

#include<bits/stdc++.h>
using namespace std;
int p,x;
int A[1000010];
int main()
{
    while(scanf("%d%d",&p,&x)==2)
    {
        int c=0;
        int ok=0;
        for(int i=1;i<10;i++)
        {
            c=0;
            A[p-1]=i;
            for(int j=p-2;j>=0;j--)
            {
                A[j]=(A[j+1]*x+c)%10;
                c=(A[j+1]*x+c)/10;
            }
            if(A[0]*x+c==A[p-1]&&A[0]!=0)
            {
                ok=1;
                break;
            }
        }
        if(ok)
        {
            for(int i=0;i<p;i++) printf("%d",A[i]);
            putchar('\n');
        }
        else puts("Impossible");
    }
    return 0;
}

 

posted @ 2018-11-19 20:38  lincold  阅读(182)  评论(0编辑  收藏  举报