HDU - 1014 - Uniform Generator

本文详细解读HDU1014 UniformGenerator问题,探讨如何通过种子、步长和模数生成均匀分布的伪随机数。分析不同参数选择对随机数生成的影响,并提供实例验证其正确性。

HDU 1014.Uniform Generator

Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/32768 K (Java/Others)

Problem Description

Computer simulations often require random numbers. One way to generate pseudo-random numbers is via a function of the form

seed(x+1) = [seed(x) + STEP] % MOD

where ‘%’ is the modulus operator.

Such a function will generate pseudo-random numbers (seed) between 0 and MOD-1. One problem with functions of this form is that they will always generate the same pattern over and over. In order to minimize this effect, selecting the STEP and MOD values carefully can result in a uniform distribution of all values between (and including) 0 and MOD-1.

For example, if STEP = 3 and MOD = 5, the function will generate the series of pseudo-random numbers 0, 3, 1, 4, 2 in a repeating cycle. In this example, all of the numbers between and including 0 and MOD-1 will be generated every MOD iterations of the function. Note that by the nature of the function to generate the same seed(x+1) every time seed(x) occurs means that if a function will generate all the numbers between 0 and MOD-1, it will generate pseudo-random numbers uniformly with every MOD iterations.

If STEP = 15 and MOD = 20, the function generates the series 0, 15, 10, 5 (or any other repeating series if the initial seed is other than 0). This is a poor selection of STEP and MOD because no initial seed will generate all of the numbers from 0 and MOD-1.

Your program will determine if choices of STEP and MOD will generate a uniform distribution of pseudo-random numbers.

Input

Each line of input will contain a pair of integers for STEP and MOD in that order (1 <= STEP, MOD <= 100000).

Output

For each line of input, your program should print the STEP value right- justified in columns 1 through 10, the MOD value right-justified in columns 11 through 20 and either “Good Choice” or “Bad Choice” left-justified starting in column 25. The “Good Choice” message should be printed when the selection of STEP and MOD will generate all the numbers between and including 0 and MOD-1 when MOD numbers are generated. Otherwise, your program should print the message “Bad Choice”. After each output test set, your program should print exactly one blank line.

Sample Input

3 5
15 20
63923 99999

Sample Output

    3         5    Good Choice

   15        20    Bad Choice

63923     99999    Good Choice

题意:给你一个公式seed(x+1) = [seed(x) + STEP] % MOD,再给你STEP和MOD,让你判断由这个公式求出来的数字是不是涵盖了所有0 - mod-1的数值,如果是就是good choice如果不是就是bad choice

为啥单独把这个拿出来,就是因为我写这道题遇到了一个奇怪的坑点,就是cin和scanf,按理说cin流输入是比scanf慢的,不知为何,我用scanf一直TLE,给我急的没法,找各种题解,发现大部分用cin输入,说试试吧,一下过了,我也就一下蒙圈了,为啥慢的反而A了,最后问了D大神,他说我用scanf后面没加EOF,因为当时题目中没要求文件结束我才没加的,结果因为这个TLE那么多次,感觉心里好亏的,cin是自动判断EOF的。以后记住了,一般都加EOF,泪奔啊 T T….



#include<cstdio>
#include<algorithm>
using namespace std;

int seed[100000];

void ug(int m, int s){    
    seed[0] = 0;
    for (int i = 1; i < m; i++)
        seed[i] = (seed[i - 1] + s) % m;
}

int main()
{
    int s, m;
    while (scanf("%d %d", &s, &m)!=EOF){
        int flag = 1;
        ug(m, s);
        sort(seed, seed + m);
        for (int i = 0; i < m; ++i){
            if (seed[i] != i){
                flag = 0;
                break;
            }
        }
        if (flag)
        printf("%10d%10d    Good Choice\n\n", s, m);
        else 
        printf("%10d%10d    Bad Choice\n\n", s, m);
    }
}
【顶级EI完美复现】电力系统碳排放流的计算方法【IEEE 14节点】(Matlab代码实现)内容概要:本文介绍了名为《【顶级EI完美复现】电力系统碳排放流的计算方法【IEEE 14节点】(Matlab代码实现)》的技术文档,核心内容是基于IEEE 14节点电力系统模型,利用Matlab实现碳排放流的精确计算方法。该方法通过建立电力系统中各节点的功率流动与碳排放之间的映射关系,实现对电能传输过程中碳足迹的追踪与量化分析,属于电力系统低碳调度与碳流管理领域的关键技术。文中强调“顶级EI完美复现”,表明其算法和仿真结果具有较高的学术严谨性和可重复性,适用于科研验证与教学演示。; 适合人群:电力系统、能源与动力工程、电气工程及其自动化等相关专业的研究生、科研人员以及从事电力系统低碳化、碳排放核算工作的技术人员。; 使用场景及目标:①用于电力系统碳排放流理论的学习与仿真验证;②支撑含新能源接入的电力系统低碳调度、碳交易、绿色电力溯源等课题的研究;③为撰写高水平学术论文(如EI/SCI期刊)提供可靠的代码基础和技术参考。; 阅读建议:读者应具备电力系统分析、Matlab编程的基础知识,建议结合电力系统潮流计算、节点导纳矩阵等前置知识进行学习,并通过调整系统参数和运行方式,深入理解碳排放流的分布规律与影响因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值