UOJ Logo Hantx的博客

博客

633B丝路

2018-06-01 20:59:56 By Hantx

可以发现,在数零时,只需要数出现几个五

首先: 5,10,15,20,25

分别是:1,2 ,3 ,4 ,6

然后继续……

发现,在1、6、31、156、781……时,会出现5的幂(>=1)

规律:×5+1

打个表,枚举0~4个当前可行值,剪掉之后继续枚举下一个……直到弄不完

不说了,贴代码,不懂自己看……

#include <cstdio>

int main()
{
    int n, k = 5, i, x[100] = {}, gs = 0, y[100];
    scanf("%d", &n);
    for (i = 1; i <= 100000; i = i * 5 + 1, k *= 5) {
        if (i > n) break;
        x[gs] = i;
        y[gs++] = k;
    }
    int ans = 0, remain = n, j;
    for (i = gs - 1; i >= 0; i--) {
        for (j = 0; j <= 4; j++)
            if (x[i] * j <= remain && x[i] * (j + 1) > remain) break;
        if (j > 4) break;
        ans += y[i] * j;
        remain -= x[i] * j;
    }
    if (remain != 0)
        printf("0\n");
    else printf("5\n%d %d %d %d %d\n", ans, ans + 1, ans + 2, ans + 3, ans + 4);
    return 0;
}

评论

暂无评论