Fork me on GitHub

Uva 10624 - Super Number

Problem B
Super Number
Input: Standard Input Output: Standard Output Time Limit: 3 Seconds

主要是还是效率问题,一般暴力就直接怎么想就怎么解决就行了,但这题死活都是TEL,用了long long超时,用了char型替换整型不超时,如此还是不懂  -_- Mark一下~~

 

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char digit[32];
int n, m;

bool digit_mod(int k){
    int sum = 0;
    for(int i=0; i<k; ++i){
        sum = (sum*10+digit[i])%k;
    }
    if(sum == 0) return true;
    return false;
}

bool Traverse(int cur){
    if(cur == m) return true;
    for(int i=0; i<=9; ++i){
        digit[cur] = i;
        if(cur<n-1 || digit_mod(cur+1)){
            if(Traverse(cur+1)) return true;
        }
    }
    return false;
}

int main(){
    int t, times = 0;
    cin>>t;
    while(t--){
        cin>>n>>m;
        memset(digit, 0, sizeof(digit));
        bool flag = false;
        for(int i=1; i<=9 && flag == false; ++i){
            digit[0] = i;
            flag = Traverse(1);
        }
        printf("Case %d: ", ++times);
        if(flag == false) printf("-1\n");
        else{
            for(int i=0; i<m; ++i){
                printf("%c", digit[i]+'0');
            }
            printf("\n");
        }
    }
    return 0;
}

 

                                                                               

posted @ 2013-06-16 18:37  Gifur  阅读(343)  评论(0编辑  收藏  举报
TOP