2013年12月10日 星期二

[USACO] 2-2-3 Runaround Numbers


/*
ID: 551100k1
LANG: C++
TASK: runround
*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int check[15];
int v[15],arr[15],p,n;
void dfs(int a,long long int b){
    int i,k;
    if(a==p){
        memset(check,0,sizeof(check));
        k=0;
        if(b<=n) return;
        for(i=0;i<p;i++){
            k=(k+arr[k])%p;
            check[k]=1;
        }
        for(i=0;i<p;i++)
            if(check[i]==0)
                return;
        printf("%lld\n",b);
        exit(0);
    }
    for(i=1;i<=9;i++){
        if(!v[i]){
            v[i]=1;
            arr[a]=i;
            dfs(a+1,b*10+i);
            v[i]=0;
        }
    }
}
int main(){
    freopen("runround.in","r",stdin);
    freopen("runround.out","w",stdout);
    int i,j;
    scanf("%d",&n);
    for(i=1;i<=10;i++){
        p=i;
        dfs(0,0);
    }
}

沒有留言:

張貼留言