码迷,mamicode.com
首页 > 其他好文 > 详细

UVA - 10624 Super Number

时间:2015-06-08 21:37:35      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:

题目大意: 给定两个数 n 和 m ,如果长度为 m 的数满足对于每个 i (n <= i <= m),数字的前 i 位都能被 i 整除,那么这个数就是超级数,求出字典序最小的符合要求的超级数。

解题思路:直接暴力就行,如果每次进行整除判断的时候,对当前数每位都进行取余运算,那么将会超时,因此每 18 位进行一次取余(long long的数据范围为:-9223372036854775808..9223372036854775807,这样在 1S 左右就可以AC了。

#include <cstdio>

int n, m, A[35];

bool judge(int cnt) {
    long long tmp = 0;
    for (int i = 0; i < cnt; ++i) {
        tmp = tmp * 10 + A[i];
        if (i == 18)
            tmp %= cnt;
    }

    return tmp % cnt;
}

bool DFS(int cur) {
    if (cur == m)
        return true;

    for (int i = cur ? 0 : 1; i < 10; ++i) {
        A[cur] = i;
        if ((cur < n - 1 || !judge(cur + 1)) && DFS(cur + 1))
            return true;
    }

    return false;
}

int main() {
    int T, cnt = 0;
    scanf("%d", &T);
    while (T--) {
        printf("Case %d: ", ++cnt);
        scanf("%d%d", &n, &m);
        if (DFS(0)) {
            for (int i = 0; i < m; ++i)
                printf("%d", A[i]);
            puts("");
        }
        else
            puts("-1");
    }
    return 0;
}

UVA - 10624 Super Number

标签:

原文地址:http://blog.csdn.net/kl28978113/article/details/46417965

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!