stormdpzh的专栏

路漫漫其修远兮,吾将上下而求索

usaco runround

一个纯粹的模拟题。

/*
ID: stormdp1
LANG: C++
TASK: runround
*/
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

bool judge[10];
int digit[20];
long long n;
int len;

bool isOk()
{
    memset(judge, false, sizeof(judge));
    int times = digit[len-1];
    int done = 1;
    int place = len - 1;

    judge[times] = true;
    while(done <= len) {
        place = (place - times + 10 * len) % len;   //这里给len乘上10,不然len比较短而数字比较大时会出错
        times = digit[place];
        done++;
        judge[times] = true;
    }
    
    for(int i = 0; i < len - 1; i++) {
        if(!judge[digit[i]])
            return false;
    }
    if(place != len - 1)
        return false;
    return true;
}

int main()
{
    freopen("runround.in", "rb", stdin);
    freopen("runround.out", "wb", stdout);    
    scanf("%lld", &n);
    for(long long t = n + 1; ; t++) {
        bool flag = true;
        long long tmp = t;
        len = 0;
        memset(judge, false, sizeof(judge));
        while(tmp) {      //判断0和重复数字
            int a = tmp % 10;
            if(a == 0) {
                flag = false;
                break;
            }
            if(judge[a]) {
                flag = false;
                break;
            }
            else {
                judge[a] = true;
            }
            digit[len] = a;     //预处理出各个位
            len++;
            tmp /= 10;
        }
        if(flag && isOk()) {
            printf("%lld\n", t);
            return 0;
        }
    }
    fclose(stdin);
    fclose(stdout);
}
阅读更多
文章标签: c
个人分类: usaco
上一篇usaco preface
下一篇Fuzhou 2011 Xiangqi
想对作者说点什么? 我来说一句

runround循环C++源程序

2012年03月30日 1KB 下载

usaco 合集usaco 合集usaco 合集

2010年04月06日 6.26MB 下载

没有更多推荐了,返回首页

关闭
关闭