hdoj1014 Uniform Generator

原创 2016年03月22日 19:43:11

题意:

给出公式next = (next + step) % mod中的step和mod,问能不能在恰好mod步之内生成0~mod-1中所有的数字。

另外,有人说可以不用模拟,直接判断step和mod这两个数是否互质就可以了(即最大公约数是否等于1),是则Good Choice,反之就是Bad Choice,暂时没有了解它的原理,也许是自己的数论基础不够好吧。

代码如下(15MS,1896K):

#include <iostream>
#include <fstream>
#include <iomanip>      // setw
#include <cstring>      // memset
using namespace std;

const int maxn(100001);
bool isGenerated[maxn];
int step, mod;

// 题意的输出格式 
void printFormat(bool flag) {
    cout << setw(10) << step << setw(10) << mod << "    ";
    cout << (flag ? "Good Choice" : "Bad Choice");
    cout << endl << endl;
}

/** 
*   模拟这个迭代的过程 
*   当在任意一个数字为起点(start)而在mod步恰好标记了整个数组,就返回成功true
*   反之,如果在每一个起点都不能满足,就返回失败 
*/
bool iterate() {
    for (int start = 0; start <= step - 1; ++start) {   // 只需要到step-1就可以了,因为跳了step,起点其实是一样的 
        memset(isGenerated, false, sizeof isGenerated);
        isGenerated[start] = true;
        int needTurn = mod - 1, next = start;   // needTurn为需要'翻转'(从false转为true)的次数 
        while (needTurn--) {
            next = (next + step) % mod;
            if (isGenerated[next]) {    // 如果其中有重复'翻转'的,即不能满足在mod步内翻转mod个元素,以这个起点的这一轮就失败 
                break;
            } else {
                isGenerated[next] = true;
            }
        }
        if (needTurn == -1) {   // 循环了恰好needTurn次 
            return true;
        }
    }
    return false;
}

int main() {
    //ifstream cin("in.txt");
    while (cin >> step >> mod) {
        bool resultFlag = iterate();
        printFormat(resultFlag);
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ACM--公约数为1--HDOJ 1014--Uniform Generator--水

HDOJ题目地址:传送门 Uniform Generator Time Limit: 2000/1000 MS (Java/Others)    Memory Limi...

hdoj1014Uniform Generator模拟题

Uniform GeneratorTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)...

HDOJ 1014 Uniform Generator(公约数问题)

Problem Description Computer simulations often require random numbers. One way to generate pseudo-r...

hdu--1014 Uniform Generator

题目:hdu–1014Problem Description Computer simulations often require random numbers. One way to genera...

杭电OJ—— 1014 Uniform Generator

Uniform Generator Problem Description Computer simulations often require random numbers. One...

HDU 1014 Uniform Generator 水题

Uniform Generator Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other...

hdu1014 Uniform Generator

Uniform Generator Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other...

hdu1014 Uniform Generator

给你一个产生随机数的函数,再给两个值 STEP和MOD,计算通过给出的两个值,判断这个随机数函数是否能产生0-MOD-1的所有数,如果是就是Good Choice,否则为Bad Choice。题目很简...

HDU1014uniform generator

Problem Description Computer simulations often require random numbers. One way to generate pseudo-r...

1014 Uniform Generator

/* 题意;给定step和MOD 计算seed数组 且seed由公式 seed[i]=(seed[i-1]+step)%MOD 决定 若 seed数组里的所有数值在【0,MOD-1】内 输出 goo...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)